❶ 步进电机单片机控制系统
由于不知道怎么发图片,没有图片。如果想要你采用我的回答,你发EMAIL到[email protected]我回复你。同时再给你1-2篇关于步进电机驱动的论文和资料。希望对你有所帮助
基于L297/L298芯片步进电机的单片机控制
1 引言
步进电动机是一种将电脉冲信号转换成角位移或线位移的精密执行元件,由于步进电机具有控制方便、体积小等特点,所以在数控系统、自动生产线、自动化仪表、绘图机和计算机外围设备中得到广泛应用。微电子学的迅速发展和微型计算机的普及与应用,为步进电动机的应用开辟了广阔前景,使得以往用硬件电路构成的庞大复杂的控制器得以用软件实现,既降低了硬件成本又提高了控制的灵活性,可靠性及多功能性。市场上有很多现成的步进电机控制机构,但价格都偏高。应用SGS公司推出的L297和L298两芯片可方便的组成步进电机驱动器,并结合AT89C52单片机进行控制,即可以实现用相对便宜的价格组成一个性能不错的步进电机驱动电路。
2 工作原理
由于步进电机是一种将电脉冲信号转换成直线或角位移的执行元件,它不能直接接到交直流电源上,而必须使用专用设备-步进电机控制驱动器 典型步进电机控制系统如图1所示:控制器可以发出脉冲频率从几赫兹到几十千赫兹可以连续变化的脉冲信号,它为环形分配器提供脉冲序列。环形分配器的主要功能是把来自控制环节的脉冲序列按一定的规律分配后,经过功率放大器的放大加到步进电机驱动电源的各项输人端,以驱动步进电机的转动。环形分配器主要有两大类:一类是用计算机软件设计的方法实现环分器要求的功能,通常称软环形分配器。另一类是用硬件构成的环形分配器,通常称为硬环形分配器。功率放大器主要对环形分配器的较小输出信号进行放大.以达到驱动步进电机目的。
图1 典型步进电机控制框图
3 硬件组成
文中所控制的步进电机是四相单极式35BY48HJ120减速步进电动机。本文所设计的步进电机控制驱动器的框图如图2所示。它由AT89C52单片机、光电耦和器、集成芯片L297和L298组成。AT89C52是美国ATMEL的低电压、高性能8位CMOS单片机。片内置8K字节可重复擦写的
Flash闪速存储器。256字节RAM。3个16位定时器.可编程串行UART通道。对完成步进电机的简单控制已足以胜任。
图2 本文提出的步进电机控制驱动器框图
L297是步进电动机控制器(包括环形分配器)。L298是双H桥式驱动器。它们所组成的微处理器至双桥式步进电动机的接口如图3所示。这种方式结合的优点是,需要的元件很少.从而使得装配成本低,可靠性高和占空间少。并且通过软件开发。可以简化和减轻微型计算机的负担。另外,L297和L298都是独立的芯片.所以应用是十分灵活的。
L297芯片是一种硬件环分集成芯片.它可产生四相驱动信号,用于计算机控制的两相双极或四相单极步进电机 它的心脏部分是一组译码器它能产生各种所需的相序.这一部分是由两种输入模式控制,方向控制(CW/CCW) 和HALF/FULL 以及步进式时钟CLOCK.它将译码器从一阶梯推进至另一阶梯。译码器有四个输出点连接到输出逻辑部分,提供抑制和斩波功能所需的相序。因此L297能产生三种相序信号,对应于三种不同的工作方式:即半步方式(HALF STEP);基本步距(FULL STEP,整步)一相激励方式;基本步距两相激励方式。脉冲分配器内部是一个3bit可逆计数器,加上一些组合逻辑.产生每周期8步格雷码时序信号,这也就是半步工作方式的时序信号。此时HALF/FULL信号为高电。若HALF/FULL取低电平,得到基本步距工作方式。即双四拍全阶梯工作方式。
L297另一个重要组成是由两个PWM 斩波器来控制相绕组电流,实现恒流斩波控制以获得良好的矩频特性。每个斩波器由一个比较器、一个RS触发器和外接采样电阻组成,并设有一个公用振荡器,向两个斩波器提供触发脉冲信号。图3中,频率f是由外接16脚的RC网络决定的, 当R>10kΩ 时,f=1/0.69RC。当时钟振荡器脉冲使触发器置1,电机绕组相电流上升,采样电阻的R 上电压上升到基准电压Uref时,比
较器翻转,使触发器复位,功率晶体管关断,电流下降,等待下一个振荡脉冲的到来。这样,触发器输出的是恒频PWM信号,调制L297的输出信号,绕组相电流峰值由Uref确定。L297的CONTROL端的输入决定斩波器对相位线A、B、C、D或抑制线INH1和INH2起作用。CONTROL为高电平时,对A、B、C、D有控制作用;而为低电平时,则对INH1和INH2起控制作用,从而可对电动机转向和转矩进行控制。
L298芯片是一种高压、大电流双全桥式驱动器,其设计是为接受标准TTL逻辑电平信号和驱动电感负载的,例如继电器、圆筒形线圈、直流电动机和步进电动机 具有两抑制输入来使器件不受输入信号影响。每桥的三级管的射极是连接在一起的,相应外接线端可用来连接外设传感电阻。可安置另一输入电源,使逻辑能在低电压下工作。L298芯片是具有15个引出脚的多瓦数直插式封装的集成芯片。
图3中.AT89C52通过串口经MAX232电平转换之后与微机相连.接受上位机指令。向L297发出时钟信号、正反转信号、复位信号及使能控制等信号。电路中,电阻R13,R15用来调节斩波器电路的参考电压,该电压将与通过管脚13,14所反馈的电位的大小比较,来确定是否进行斩波控制,以达到控制电机绕组电流峰值、保护步进电机的目的
由于L297内部带有斩波恒流电路,绕组相电流峰值由Uref确定。当采用两片L297通过L298分别驱动步进电机的两绕组,且通过两个D/A转换器改变每相绕组的Uref时,即组成了步进电机细分驱动电路。另外,为了有效地抑制电磁干扰,提高系统的可靠性,在单片机与步进电动机驱动回路中利用两个16引脚光电耦合器件TLP521-4组成如图3所示的隔离电路。其作用是切断了单片机与步进电动机驱动回路之间电的直接联系,实现了单片机与驱动回路系统地线的分别联接.防止处于大电流感性负载下工作的驱动电路产生的干扰信号以及电网负载突变产生的干扰信号通过线路串入单片机,影响单片机的正常工作。
4 软件组成
在该电路中,将P1.0口设为电机开始按钮,P1.1,P1.2,P1.3为速度选择按钮。速度由低到高,P1.4为电机停止按钮。并设三档速度的最高速度依次为500pps、1000pps、2000pps 。RXD,TXD 已由MAX232电平转换接出串口。此外,步进电机其启动,停止的频率较低,一般在100-250Hz之间,而最高运行频率要求较高。通常为1-3kHz,为使其在启动、运行和停止整个过程中,既不会失步,又能够尽快精确地达到目标位置,运行速度都要有一个加速一恒速减速的过程。这里采用常用的离散办法来逼近理想的近似梯形的升降速曲线,如图5所示。即利用定时器中断方式来不断改变定时器装载值的大小.
本例中.为计算方便,把各离散点的速度所需的装载值用公式转化为各自所需的定时时间固化在系统的ROM 中,这里用TH0=(65536-time)/256,TL0=(65536-time)%256来计算装载值,time表示各阶梯所需定时时间。系统在运行中用查表法查出所需的时间,从而大幅度减少占用CPU的时间,提高系统的相应速度。因此.该程序主要由控制主程序、加减速子程序组成,主程序框图如图4所示。
5 结论
本文创新点在于提出应用单片机和L297、L298集成电路构成步进电机控制驱动器。使之具有元件少.可靠性高、占空间少、装配成本低等优点。通过软件开发,可以简化和减轻微型计算机的负担。另外。在上面提出的在加减速程序中定时器的装载值用式子计算不精确,这两条赋值要执行不少的时间.具体做的时候.可直接把初值计算出来或把除号用相加来计算.以达到精确的目的。
❷ 单片机控制步进电动机的运动的原理及单片机程序
51单片步进电机控制原理与控制设计程序
51单片步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称vr)、永磁式步进电机(简称pm)和混合式步进电机(简称hb)。
51单片步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
51单片步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为a-b-c-d,通电控制脉冲必须严格按照这一顺序分别控制a,b,c,d相的通断。
(2)控制步51单片进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制51单片步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
❸ 单片机是怎样控制电机的
单片机只输出信号,经过隔离电路,再经过功率开关电路驱动电机。
控制普通的三项异步电机可以单片机输出信号经三极管后驱动一个小功率继电器,由继电器来驱动交流接触器,进而控制电机,也可以单片机信号经三极管放大后直接驱动功率继电器。 方法有很多很多。至于驱动伺服,单片机端口的信号经过光耦隔离后可以直接驱动,伺服驱动器本身需要的驱动信号都是弱电信号。
单片机注意事项
一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。
不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。
❹ 远程控制电机,选择什么单片机
单片机控制5个电机是可能的,如果不是同时运动,那么不用扩展任何资源,IO口足够用了,比如步进电机,一个步进电机的芹正控制信号可以只有4路,即:A,/嫌缺悔A,B,/B,5个电机公用20个IO口,40芯单片机有32个IO口,所以够用了。
如果速度不一致而且需要同时运动的话,那么需要扩展一个8253定时器,采用52单片机,正好有5个定时器,用来控扮谨制速度。
❺ 51单片机控制电机转速选什么单片机,急求
80C51最好(1)MCS-51系列芯片采用HMOS工艺,而80C51芯片则采用CHMOS工艺。CHMOS工艺是COMS和HMOS的结合,
(2)80C51芯片具有COMS低功耗的特点。例如8051芯片的功耗为630mW,而80C51的功耗只有120mW,这样低的功耗,用一粒纽扣电池就可以工作。低功耗对单片机在便携式、手提式或野外作业的仪器仪表设备上使用十分有利。
(3)从80C51在功能增强方面分析,主要在以下几个方面做了增强。首先,为进一步降低功耗,80C51芯片增加了待机和掉电保护两种工作方式,以保证单片机在掉电情况下能以最低的消耗电流维持。
(4)此外,在80C51系列芯片中,内部程序存储器除了ROM型和EPROM型外,还有E2PROM型,例如89C51就有4KB E2PROM。并且随着集成技术的提高,80C51系列片内程序存储器的容量也越来越大,目前已有64KB的芯片了。另外,许多80C51芯片还具有程序存储器保密机制,以防止应用程序泄密或被复制。
;
❻ 如何用单片机控制直流电机
通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。
通过单片机产生PWM波控制直流电机程序
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管显示码(0-9)
sbitxiaoshudian=P0^7;
sbitwei1=P2^4;//数码管位选定义
sbitwei2=P2^5;
sbitwei3=P2^6;
sbitwei4=P2^7;
sbitbeep=P2^3;//蜂鸣器控制端
sbitmotor=P1^0;//电机控制
sbits1_jiasu=P1^4;//加速按键
sbits2_jiansu=P1^5;//减速按键
sbits3_jiting=P1^6;//停止/开始按键
uintpulse_count;//INT0接收到的脉冲数
uintnum=0;//num相当于占空比调节的精度
ucharspeed[3];//四位速度值存储
floatbianhuasu;//当前速度(理论计算值)
floatreallyspeed;//实际测得的速度
floatvv_min=0.0;vv_max=250.0;
floatvi_Ref=60.0;//给定值
floatvi_PreError,vi_PreDerror;
uintpwm=100;//相当于占空比标志变量
intsample_time=0;//采样标志
floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,积分,微分常数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
voidtime_init()
{
ET1=1;//允许定时器T1中断
ET0=1;//允许定时器T0中断
TMOD=0x15;//定时器0计数,模式1;定时器1定时,模式1
TH1=(65536-100)/256;//定时器1值,负责PID中断,0.1ms定时
TL1=(65536-100)%6;
TR0=1;//开定时器
TR1=1;
IP=0X08;//定时器1为高优级
EA=1;//开总中断
}
voidkeyscan()
{
floatj;
if(s1_jiasu==0)//加速
{
delay(20);
if(s1_jiasu==0)
vi_Ref+=10;
j=vi_Ref;
}
while(s1_jiasu==0);
if(s2_jiansu==0)//减速
{
delay(20);
if(s2_jiansu==0)
vi_Ref-=10;
j=vi_Ref;
}
while(s2_jiansu==0);
if(s3_jiting==0)
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)
{
registerfloaterror1,d_error,dd_error;
error1=vi_Ref-vi_SpeedBack;//偏差的计算
d_error=error1-vi_PreError;//误差的偏差
dd_error=d_error-vi_PreDerror;//误差变化率
vi_PreError=error1;//存储当前偏差
vi_PreDerror=d_error;
bianhuasu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);
return(bianhuasu);
}
voidv_Display()
{
uintsu;
su=(int)(reallyspeed*10);//乘以10之后强制转化成整型
speed[3]=su/1000;//百位
speed[2]=(su00)/100;//十位
speed[1]=(su0)/10;//个位
speed[0]=su;//小数点后一位
wei1=0;//第一位打开
P0=table[speed[3]];
delay(5);
wei1=1;//第一位关闭
wei2=0;
P0=table[speed[2]];
delay(5);
wei2=1;
wei3=0;
P0=table[speed[1]];
xiaoshudian=1;
delay(5);
wei3=1;
wei4=0;
P0=table[speed[0]];
delay(5);
wei4=1;
}
voidBEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
voidmain()
{
time_init();
motor=0;
while(1)
{
v_Display();
BEEP();
}
if(s3_jiting==0)//对按键3进行扫描,增强急停效果
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
voidtimer0()interrupt1
{
}
voidtimer1()interrupt3
{
TH1=(65536-100)/256;//1ms定时
TL1=(65536-100)%6;
sample_time++;
if(sample_time==5000)//采样时间0.1ms*5000=0.5s
{
TR0=0;//关闭定时器0
sample_time=0;
pulse_count=TH0*255+TL0;//保存当前脉冲数
keyscan();//扫描按键
reallyspeed=pulse_count/(4*0.6);//计算速度
pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);
if(pwm
if(pwm>100)pwm=100;
TH0=TL0=0;
TR0=1;//开启定时器0
}
num++;
if(num==pwm)//此处的num值,就是占空比
{
motor=0;
}
if(num==100)//100相当于占空比调节的精度
{
num=0;
motor=1;
}
}
❼ 基于单片机的步进电机控制~ 目前单片机都用什么型号啊
建议用AT89S52,在线可编程,方便! 并且可兼容C51,C52,价格也便宜!