PLC是不能直接驱动步进电机,需要通过对应的驱动器才能实现对型腊步进电机卜顷滑控制,对于脉冲控制型驱动器如EZM552,需要对驱动器发送控制脉冲和方向信号,对于调速型驱动器如EZD552,只需给启停和方向信号即可实现乎绝对电机的控制。接线图可以参考下图:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)