步进电机的单片机控制文档格式.docx
《步进电机的单片机控制文档格式.docx》由会员分享,可在线阅读,更多相关《步进电机的单片机控制文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
![步进电机的单片机控制文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/17/4014bde0-3c46-4bd1-833c-2f05a4ec259b/4014bde0-3c46-4bd1-833c-2f05a4ec259b1.gif)
步进电机单片机数码管
一、方案论证与比较
1、本设计的重点在于对步进电机的控制和驱动,设计中受控电机为四相六线制的步进电机(内阻33欧,步进1.8度,额定电压12V)
方案一:
使用多个功率放大器件驱动电机
通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。
但是由于使用的是四相的步进电机,就需要对四路信号分别进行放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。
方案二:
使用L298N芯片驱动电机
L298N芯片可以驱动两个二相电机(如图1-1),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;
可以直接用单片机的IO口提供信号;
而且电路简单,使用比较方便。
图1-1
通过比较,使用L298N芯片充分发挥了它的功能,能稳定地驱动步进电机,且价格不高,故选用L298N驱动电机。
而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;
也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。
2、数码管显示电路的设计
串行接法
设计中要显示4位数字,用74LS164作为显示驱动,其中带锁存,使用串行接法可以节约IO口资源,但要使用SIO,发送数据时容易控制。
并行接法
使用并行接法时要对每个数码管用IO口单独输入数据,占用资源较多。
由于设计中用一块单片机进行控制,资源有限,选择了方案一。
另外,使用锁存也起到节约资源的作用。
二、步进电机控制原理
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。
步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。
其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。
例如:
三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
(2)控制步进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。
两个脉冲的间隔越短,步进电机就转得越快。
调整单片机发出的脉冲频率,就可以对步进电机进行调速。
三、理论设计
综和以上选取的方案,总的流程如图3-2所示。
图3-1
1、步进电机驱动电路
通过L298N构成步进电机的驱动电路,电路图如图3-2所示。
通过单片机SPCE061A的IOB8~IOB13对L298N的IN1~IN4口和ENA、ENB口发送方波脉冲信号,起时序图如图3-3所示。
图3-2
图3-3
2、数码管显示电路的设计
数码管的显示驱动使用74LS164,通过SPCE061A的IOB0和IOB1口对DATA和CLK发送数据。
图3-4
3、4x4键盘电路
在设计中,使用了标准的4x4键盘,其电路图如图3-5所示。
单片机的A口低8位为键盘的接口。
尽管设计要求中只需要4个键对步进电机的状态进行控制,但考虑到对控制功能的扩展,我们使用了4x4的键盘。
图3-5
四、程序设计
在进行程序设计的过程中,主要分为五个部分:
双机通讯、语音报数、数字显示、步进电机驱动、键盘;
其中双机通讯的实现和语音报时比较有特点,将其流程简要介绍如下,其他部分见附的程序。
1、双机通讯
图4-1
我们在实现双机通讯的过程中使用了“三次握手”的方式,这是Intle网中成用的数据通讯确认协议,其流程图如图4-1所示。
2、语音报数
程序设计中语音报数使用的是SACM-A2000,考虑到程序比较简单,首先使用了自动报数方式,但发现不能进行连续报数,于是使用了非自动方式,流程图如图4-2所示。
图4-2
五、结果分析与总结
应该说这次课程设计还是基本达到了设计的要求,但是也存在着未能解决的问题,由于在执行语音程序时对资源的消耗比较大,在语音报数的时候会中断步进电机驱动信号的输出,导致电机停转。
为此,我们修改了方案,使用了两块单片机,通过双机通讯来传递信号,遗憾的是问题仍然没有得到解决。
这次步进电机的综合实验我们学到了步进电机、数码管、4*4键盘、语音报数和双机通讯的使用,更重要的是学会了程序出问题时调试的方法,并养成了Debug的习惯,学到了程序出问题后怎样去解决的基本方法。
参考文献:
[1]谢自美《电子线路设计、实验、测试(第二版)》[M]武汉:
华中理工大学出版社,2000.
[2]薛钧义,张彦斌,樊波等《凌阳十六位单片机原理及应用》[M]北京:
北京航空航天大学出版社,2003
HH204步进电机驱动电路
在复费率计度器上的应用
TheapplicationofHH204(stepmotordrivecircuit)tomultiple-expensespowermeter
上海华晖自控设备有限公司陈辉
随着复费率电表在全国电网的大面积普及,对复费率计度器的性价比提出越来越高的要求。
低价格的步进电机驱动芯片HH204能够可靠的应用于复费率计度器的电机驱动。
在驱动力矩、控制信号的灵活性上优于市场上的其他芯片。
一块HH204电路内含四路H桥可以同时驱动一个四相步进电机或者二个二相步进电机,所以一块HH204电路可以完成复费率电机的二个步进电机的驱动电路。
Withthewidelyuseofmultiple-expensespowermeter,usershaveputmuchhigherrequirementsonitsperformanceandprice.HH204,lowpricechipforstepmotordrive,canbeappliedtothemultiple-expensespowermeterwithhighreliability.ThedrivemomentandtheagilityofcontrollingsignalofHH204overmatchedanyotherchipsbeinglaunchedinthemarket.
OneHH204circuit,including4Hbridges,isabletodriveonefour-phasestepmotorortwotwo-phasestepmotors,sooneHH204canperformthefunctionoftwostepmotors’drivecircuit.
HH204用作复费率电表二相四拍步进电机驱动芯片时,每个步进电机仅需要CPU提供三个I/O口,二个步进电机共需CPU提供六个I/O口,但可以利用HH204——1、7与11、17脚使能输入端的控制,将二电机的相同绕组的输入端分别并联(见图1),这样仅用四根MCU的I/O端口就可控制二只步进电机的分别运转。
以市场上大量销售的TJD-1计度器为例,当二组方向输入端口的状态每改变四次,刻度就走进0.01度电量。
这方案比带高价专用IC芯片的计度器仅多用了一根MCU的I/O口线,但价格上最起码下降了30%以上,对电表厂家来说,这是一个非常重要的选择。
下面给出用C51编写的复费率计度器驱动程序。
电表常数选用了3200p/kwh,用T0计数方式,T0对电能计量芯片的CF脚进行计数,满32只脉冲时,使计度器前进0.01度。
当计数器溢出时,响应中断。
用户只需根据硬件情况,稍加修改就可移植到PIC、TI等其它公司的单片机上。
WhenHH204isusedasthechipfortwo-phasefourstepssteppermotorinmultiple-expensespowermeter,eachsteppermotoronlyneedsthreeI/Oports.However,ifweparalleledconnecttwogroupsofdirectioninputportstocontrolENpin1,7andENpin11,17,weareonlyneed4MCUI/Oportstocontroltwosteppermotorsrespectively.TaketheTJD-1asinstance,whenthestateofthetwogroupsofdirectionportsarechangedfourtimes,thescalewillforward0.01.ThisplanusesonemoreMCUI/Olinebutwithcostdropatleast30%thanusesspecializedICchip.
Thefollowingisthedriveprogramofmultiple-expensespowermeterinC51language.
#include"
reg51.h"
sbitEN1=P1^7;
//P1^7使能平电机控制peakperiodmotorcontrol
sbitEN2=P1^6;
//P1^6使能谷电机控制valleyperiodmotorcontrol
sbitD1=P1^5;
//电机数字码motordigitalcode
sbitD2=P1^4;
//电机数字码motordigitalcode
unsignedinttnum;
voidturn_step(bittim,bitbackflag);
//函数定义functiondefinition
voidturn(bittim,bitbackflag);
//函数定义functiondefinition
voidtint()interrupt1//time0计数中断服务程序countinterruptserviceroutine
{
TR0=0;
turn_step(0,1);
//使平电机反转0.01度enablemotorwh