一、第一步是将电机连接到HC6800em3单板注意使用P1端的电缆排列单片机连接到电机控制芯片的输入端(4Pin端口),以确保P1.0-P1.3正常。
二、接下来,将电机连接到标记控制芯片的输出端。此时,请注意确保电机的a+/-和B+/-导线匹配。
三、然后用keil-uvisin5编写步进电机控制程序。此时,编译并输出hex文件
#包括“reg52.h”。
四、写完后,打开单片机的电源此时,USB下载线需要连接到计算机。请注意,PZISP工具用于将电机控制编译的十六进制文件下载到单片机上。
五、最后一步是启动测试电机控制程序这时,就会发现步进电机是按一定的时间间隔按照旋转指令完成的。
51单片机驱动直流电机程序(用的是l298n芯片):
#include<reg51.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define N 100
sbit s1=P1^0//电机驱动口
sbit s2=P1^1//电机驱动口
sbit s3=P1^2//电机驱动口
sbit s4=P1^3//电机驱动口
sbit en1=P1^4//电机使能端
sbit en2=P1^5//电机使能端
sbit LSEN=P2^0//光电对管最左
sbit LSEN1=P2^1//光电对管左1
sbit LSEN2=P2^2//光电对管左2
sbit RSEN1=P2^3//光电对管右1
sbit RSEN2=P2^4//光电对管右2
sbit RSEN=P2^5//光电对管最右
uint pwm1=0,pwm2=0,t=0
void delay(uint xms)
{
uint a
while(--xms)
{
for(a=123a>0a--)
}
}
void motor(uchar speed1,uchar speed2)
{
if(speed1>=-100&&speed1<=100)
{
pwm1=abs(speed1)
if(speed1>0)
{
s1=1
s2=0
}
if(speed1==0)
{
s1=1
s2=1
}
if(speed1<0)
{
s1=0
s2=1
}
}
if(speed2>=-100&&speed2<=100)
{
pwm2=abs(speed2)
if(speed2>0)
{
s3=1
s4=0
}
if(speed2==0)
{
s3=1
s4=1
}
if(speed2<0)
{
s3=0
s4=1
}
}
}
void go_forward(uint speed)
{
s1=1
s2=0
s3=1
s4=0
pwm1=speed
pwm2=speed
}
void go_back(uint speed)
{
s1=0
s2=1
s3=0
s4=1
pwm1=speed
pwm2=speed
}
void stop()
{
s1=1
s2=1
s3=1
s4=1
pwm1=0
pwm2=0
}
void turn_right(uint P1,uint P2) //右转函数
{
s1=1
s2=0
s3=0
s4=1
pwm1=P1
pwm2=P2
}
void turn_left(uint P1,uint P2) //左转函数
{
s1=0
s2=1
s3=1
s4=0
pwm1=P1
pwm2=P2
}
void tracking()
{
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //没有检测到
{
go_forward(100)
}
if((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //左一检测到
{
turn_left(40,80)//左转 右轮 》左轮
delay(N)
}
if((LSEN1==0)&&(LSEN2==1)&&(RSEN1==0)&&(RSEN2==0)) //左二检测到
{
turn_left(40,60)//左转 右轮 》左轮
delay(N)
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==1)&&(RSEN2==0)) //右一检测到
{
turn_right(60,4)//右转 左轮 》右轮
delay(N)
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==1)) //右二检测到
{
turn_right(80,40)//右转 左轮 》右轮
delay(N)
}
if((LSEN1==1)&&(LSEN2==1))
{
turn_left(0,100)
delay(1000)
}
if((RSEN1==1)&&(RSEN2==1))
{
turn_right(100,0)
delay(1000)
}
}
void avoidance()
{
}
void init()
{
TMOD=0x02//timer0 同时配置为模式2, 8自动重装计数模式
TH0=156//定时器初值设置100us中断
TL0=156
ET0=1
EA=1
TR0=1//开启总中断
}
void main()
{
init()
while(1)
{
tracking()
}
}
void timer0() interrupt 1 //电机驱动 提供PWM信号
{
if(t<pwm1)
en1=1
else
en1=0
if(t<pwm2)
en2=1
else
en2=0
t++
if(t>100)
t=0
}
扩展资料
L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。
参考资料来源:百度百科-l298n
首先你想要通过单片机控制这个马达就要首先明白为什么控制或者说这个单片机是通过怎样的方式来控制这个马达的转速的?马达工作的原理是因为给了它一个高电平,所以我们可以用pwm这个波来控制电动马达的转速。也就是占空比的大小,可以直接影响马达的转速。
你想要控制马达的转速就是控制程序上面的占空比。占空比越高,那么马达的转速就会越快。反之占空比越低,马达的转速就会随之减慢。你如果用程序函数控制的话,可以写一个占空比。而用51单片机写一个马达转速控制函数,可以使用定时器来,做一个真空比。
你可以通过一个按键来调节占空比的大小这样你就可以通过按键调节电机的转速,所以这样来说比较好控制,而且现象更直观,便于观察。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)