单片机 电机驱动程序

while(1)
{
switch(keys)
{
case ~0xF3: go();break;
case ~0xA1: back();break;
case ~0xF7: turn_lef();break;
case ~0xA5: turn_rig();break;
case ~0xE7: inc();break;
case ~0xAD: dec();break;
case ~0xE3: stop();break;
default:break;
}
if(a==1)
{
IN2=0;
IN1=1;
delay1ms(on);
IN1=0;
delay1ms(100-on);
}
if(b==1)
{
IN1=0;
IN2=1;
delay1ms(on);
IN2=0;
delay1ms(100-on);
}
}
这段程序来控制电机,ab控制正反转,on控制速度,但我on=50;可以正反转,但速度一直都是最大?这是什么错误?

个人觉得 你这个程序当ON为50时 理论上讲占空比为50% 电机转速应该会是最大值的一半 但是你这个程序中的delay1ms()函数;如果delay1ms(1)延时为1ms;那么当on=50时,你给小车的PWM信号的频率为20HZ 这个频率太太小了(应该不会有PWM信号的作用了) 我当时做飞思卡尔用的PWM信号频率为10K到20KHZ,用的是专用芯片, 你可以试着把频率调高一点试试 比如 把delay1m(1)的延时改为1us试试,这只是个人感觉的 ,对错不知道,别扔砖。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-20
您好,对于您这样的情况建议您下载最新版本的驱动软件,更新到最新版本的驱动。

单片机怎样驱动电机?
单片机的输出电流只有20mA左右,所以不可以直接接到电机上驱动电机。必须使用电机驱动模块(比如LN298)。编程如下:include<reg52.h> sbit IN0=P1^0;sbit IN1=P1^1;void main(){ while(1){ \/\/使电机正转 IN0=0;IN1=1;\/\/使电机反转 \/\/ IN0=1;\/\/IN1=0;} } ...

如何用单片机控制步进电机?
1、该电路图的工作原理:该电路是一个步进电机驱动电路,通过控制脉冲Ui,可以实现步进电机的转动。步进电机的一个线圈被表示为图中的W,通过光耦OT和脉冲变压器T与控制脉冲Ui相连。当控制脉冲Ui为高电平时,光耦OT导通,使得线圈W接收到脉冲信号,产生磁场,推动步进电机转动一个步进角度。当控制脉冲Ui为...

我就用51单片机和l9110这么连接的可是电机驱动不了,
程序不对啊,步进电机没有驱动,下面给你一段程序,写入你的程序中试试:uchar code motoz[4]={0x01,0x04,0x02,0x08}; \/\/步进电机正转顺序编码 uchar code motof[4]={0x08,0x02,0x04,0x01}; \/\/步进电机反转顺序编码 define MOTOR P3 for(i=0;i<4;i++) \/\/4步一个循环 ...

51单片机步进电机正反转程序
单片机控制步进电机,我想你说的是两相步进电机,一般是控制其相序分配的顺逆从而控制正反转,一般而言,步进电机相序分配你可以做成一个数组比如step[]={0x03,0x06,0x0c,0x09},这样来说可以假设P0口是步进电机控制口,那么可以按如下方式来控制: while(1) { for(i=0;i<4;i++) { if(fx==1...

单片机控制电机怎么驱动的
驱动电机。控制普通的三项异步电机可以单片机输出信号经三极管后驱动一个小功率继电器,由继电器来驱动交流接触器,进而控制电机。也可以单片机信号经三极管放大后直接驱动功率继电器。方法有很多很多。至于驱动伺服,单片机端口的信号经过光耦隔离后可以直接驱动,伺服驱动器本身需要的驱动信号都是弱电信号。

单片机通过驱动器控制步进电机程序 反转不了 求助
如果你的步进电机不能反转, 首先检查硬件电路, 单片机是否可靠控制步进电机驱动器的方向引脚Dir, 其次是单片机编程是否正确.如果你使用MaxDuino编程, 就简单了很多了:MOTOR.begin(TIM1,200,DO1,DO2); \/\/初始化步进电机.MOTOR.speed(300); \/\/设定电机转速.MOTOR.OpenRamp(); \/\/开启电机S曲线加...

我想用STC12C5A60S单片机控制STI6608驱动步进电机动作,请问C程序怎么...
这个STI6608驱动器输入信号是Pluse+DIR方式控制,可以带2个步进电机。Reset可以置位步进电机到位置1。刚启动是置位1次就可以了。以下编一简单的演示程序:include<reg51.h>#define uchar unsigned char#define uint unsigned charsbit pluse1=P1^0;sbit pluse2=P1^1;sbit dir1=P1^2;sbit dir2=P1...

单片机控制电机正反转动的c语言程序
首先要看你的电机是直流电机还是步进电机。直流电机就简单了,只有两根线,电机两端电压正负极改变就可以实现正转反转。不过要加电机驱动芯片,或者H桥电路,电机驱动芯片可以选择L298N,加上适当的外围电路就可以直接用单片机控制电机了。比如让单片机P1.0 = 0,P1.1 = 1;(单片机I\/0口要与电机驱动...

求单片机AT89C52控制步进电机的程序 谢谢! 要C语言的
可以自行换成反转表格 Delay(500); \/\/改变这个参数可以调整电机转速 } } for(j=0;j<512;j++){ for(i=0;i<4;i++) \/\/4相 { P1=F_Rotation[i]; \/\/输出对应的相 可以自行换成反转表格 Delay(500); \/\/改变这个参数可以调整电机转速 } } } } ...

单片机中怎样用io口驱动电机
第一步:先在Proteus软件中设计仿真电路原理图。第二步:再在Keil C51软件中编写且编译程序,程序后缀必须是.c。然后在打开的“Option for Target‘Target 1’”选项卡,“Target”标签下频率设置为“11.0592”, “Output”标签下,将“Creat HEX File”项打勾选中,设置生成一个.hex文件。第三步:...

相似回答