智能车制作

标题: 298 电机驱动 程序 [打印本页]

作者: onexiaofan    时间: 2012-8-31 16:39
标题: 298 电机驱动 程序
下面是298电机驱动程序 不知道为什么 电机就是转不了!  那位 大侠 看看是不是程序的问题?


#include<reg52.h>
#define  uchar unsigned char
#define uint unsigned int
void delay_ms(uint x)
{
uchar i,j;
for(i=0;i<x;i++)
  for(j=0;j<110;j++);
}
void main()
{
  while(1)
  
  {P1=0x88;
   delay_ms(1);
   P1=0x44;
   delay_ms(1);
  P1=0x22;
delay_ms(1)
   P1=0x11;
  delay_ms(1)

  }
}

作者: yfkling    时间: 2012-9-1 19:05
连线没问题么?为什么用总线赋值啊?用P1^0控制就行啦。。。用PWM波测试。。。
作者: onexiaofan    时间: 2012-9-2 09:26
位和总线有什么区别吗?怎么用PWM波测试?
作者: 黑名    时间: 2012-9-2 18:27
答:解决办法一:把L298N的使能端直接接5V,看电机是否正常,如果正常是程序问题,不正常,LED98N接线错误。
      解决办法二:用示波器接单片机的IO口,看下控制LED98N的使能端输出波形是否正常,高电平占空比低是带不动电机的。
      解决办法三:控制L298N的使能端使用位控制,程序改为P1.0之类的位去控制电机使能端。

    最后希望能帮助你解决问题,祝你有美好的一天。

作者: zhc_528    时间: 2012-9-6 09:10
你先检测驱动是否正常工作,看一下是低电平为有效信号还是高电平,自己是一下,然后用pwm模块输出pwm波形,若没有,测用定时器自己做pwm,然后再进行控制

作者: 杜岳丰    时间: 2012-9-16 10:46
不要对P1总线赋值(感觉你不太懂电机控制原理啊),控制电机只需要2个IO口输出信号就可以了,你可以选P0^1 P0^2两个口来给电机输出信号,电机信号就是PWM波,说白了PWM就是有时是高电压 有时是低电压,来告诉电机什么时候转什么时候不转,反映在直观上就是转速的快慢,这样就可以控制了。给你个例程。
#include<reg52.h>
#define  uchar unsigned char
#define  uing unsigned int
sbit moto1=P0^0; //+
sbit moto2=P2^1; //-
unsigned char count,count2;
void main()
{
EA=1;
moto1=1;
moto2=0;
TMOD=0X11;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
TR0=1;
ET0=1;
while(1)
{}
}
void t1()interrupt 1
{
   count2++;
   if(count2==60)
   {
    moto1=0;
   }
   if(count2==100)
   {
    moto1=1;
count2=0;
   }
   TH0=(65536-100)/256;
   TL0=(65536-100)%256;
}
这是51利用软件给的一个简单的pwm波周期10ms占空比60%.


作者: 可欣    时间: 2012-9-26 22:59
谢谢,上面的哥们
作者: sdlibin007@qq.c    时间: 2012-10-30 14:56
这~~~~~~~~~~~~~~~~~
作者: 轩辕镁锡    时间: 2012-11-2 23:08
杜岳丰 发表于 2012-9-16 10:46
不要对P1总线赋值(感觉你不太懂电机控制原理啊),控制电机只需要2个IO口输出信号就可以了,你可以选P0^1  ...

高手啊!

作者: 轩辕镁锡    时间: 2012-11-2 23:09
我不懂电机驱动……
作者: 刹车油门都好使    时间: 2012-12-10 16:06
受教.
作者: 541236895    时间: 2012-12-10 20:56
void t1()interrupt 1
{
   count2++;
   if(count2==60)
   {
    moto1=0;
   }
   if(count2==100)
   {
    moto1=1;
count2=0;
   }
   TH0=(65536-100)/256;
   TL0=(65536-100)%256;
是什么意思啊,count2起什么作用,开始也没定义它的初值啊,请教。
作者: shijiamoni    时间: 2012-12-10 23:56
看你程序是用了6个io口吧,298也6个,那就是全部用上咯,如果你的io和298就是顺序接线的,也就是说7口和2口是接两个使能位(分别是两组h桥的总控制线)另外4条线就是接的四个输出的电位控制咯,按着你这个程序,单控制线控制到电机能转的时候,总控线是0,总控制为1时那4调线位不能让电机转...你的总线翻译成二进制就是10001000。。。。01000100.。。。00100010.。。就这三个循环,当然转不动啦,不过这个程序的时序倒是三相步进或者无刷电机的。
作者: happyzn75    时间: 2012-12-15 13:00
L298的工作频率设低一些,要不转动无力,甚至转不动
作者: zhongchunyuan    时间: 2012-12-25 19:55
我觉得不要直接通高低电平,,,最好用定时器控制298.。。这样才能调速。。。

作者: onexiaofan    时间: 2013-1-2 11:29
zhc_528 发表于 2012-9-6 09:10
你先检测驱动是否正常工作,看一下是低电平为有效信号还是高电平,自己是一下,然后用pwm模块输出pwm波形, ...

嗯  你说的是对的!这个帖子发很久了,后来自己弄明白了  就没有回看这个帖子,今天才看到你的回帖!不过还是要谢谢你啊,交个朋友吧,有时间大家多多交流!qq1695887343(要添备注 不然不会加你的额)呵呵、、、

作者: onexiaofan    时间: 2013-1-2 11:31
zhongchunyuan 发表于 2012-12-25 19:55
我觉得不要直接通高低电平,,,最好用定时器控制298.。。这样才能调速。。。

不用定时器 也可以调速啊  不是吗??直接高低电平延时不久可以吗??感觉这样好像更简单 呵呵、、、
作者: onexiaofan    时间: 2013-1-2 11:36
shijiamoni 发表于 2012-12-10 23:56
看你程序是用了6个io口吧,298也6个,那就是全部用上咯,如果你的io和298就是顺序接线的,也就是说7口和2口 ...

哦哦   你说的对啊!后来弄了好久才我搞明白这个问题!不过还是要谢谢你啊!加我qq吧 以后多多交流 qq1695887343(要有验证信息的额  验证信息就写298 吧  )!  希望你在新的一年 有一份好心情吧!!呵呵、、、
作者: onexiaofan    时间: 2013-1-2 11:38
541236895 发表于 2012-12-10 20:56
void t1()interrupt 1
{
   count2++;

加我qq(1695887343)多多交流!祝福你在新的一年有更多的进步!加油、、、
作者: onexiaofan    时间: 2013-1-2 11:38
happyzn75 发表于 2012-12-15 13:00
L298的工作频率设低一些,要不转动无力,甚至转不动

怎么设??
作者: onexiaofan    时间: 2013-1-2 12:17
杜岳丰 发表于 2012-9-16 10:46
不要对P1总线赋值(感觉你不太懂电机控制原理啊),控制电机只需要2个IO口输出信号就可以了,你可以选P0^1  ...

哥们  你说的是直流电机吧??我忘了注明  我想要控制的是 步进电机。后来这个问题解决了  还是要谢谢哥们的回帖!加我qq 1695887343(要有验证信息 写298 就可以)呵呵、、、
希望你在新的一年里有一个好心情吧!

作者: happyzn75    时间: 2013-1-3 12:14
onexiaofan 发表于 2013-1-2 11:38
怎么设??

单片机输出的PWM的频率啊





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2