远程步进电机控制与状态显示器附带程序Word下载.docx
《远程步进电机控制与状态显示器附带程序Word下载.docx》由会员分享,可在线阅读,更多相关《远程步进电机控制与状态显示器附带程序Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
4.3焊接注意事项3
3步进电机程序控制的设计3
3.1步进电机的传动方式3
3.2硬件接口电路4
3.3脉冲的形成4
3.4旋转方向控制5
3.5转速控制6
3.6控制程序设计6
4步进电机各部件7
4.1ATmega32芯片的特点7
4.2LCD1602液晶显示器8
4.3通信模块RS4858
5软件程序设计8
6总结15
谢辞16
参考资料17
引言
步进电机是自动控制系统中常用的执行部件。
步进电机的输入信号为脉冲电流,它能将输入的脉冲信号转换为阶跃型的角位移或直线位移,因而步进电机可看作是一个串行的数/模转换器。
由于步进电机能够直接接受数字信号,而不需数/模转换,所以使用微机控制步进电机显得非常方便。
另外,步进电机由于结构和工作原理不同于普通的直流电机和交流电机,它必须由双环形脉冲信号、功率驱动电路等组成控制系统,使用起来较复杂。
1步进电机的简介
步进电机的品种规格很多,按照它们的结构和工作原理行控制。
可以划分为磁阻式也称反应式或变磁阻式电机、混合式电机、永磁式电机和特种电机等四种主要型式。
步进电机不需位移传感器就可精确定位,所以在精确定位系统中应用广泛。
目前打字机、计算机外部设备、数控机床、传真机等设备中都使用了步进电机。
随着电子计算机技术的发展,步进电机必将发挥它的控制方便、控制准确的特点,在工业控制等领域取得更为广泛的应用。
步进电机有以下优点:
(1)通常不需要反馈就能对位置和速度进行控制;
(2)位置误差不会积累;
(3)与数组设备兼容,能够直接接收数字信号;
(4)可以快速启停。
1.1步进电机的工作原理
以磁阻式步进电机为例,介绍一下步进电机的工作原理。
图1.1是磁阻式步进电机工作原理的示意图。
它的定子上有六个极,转子有四个极。
定子磁极上绕有三组绕组,每组绕组由相互串联的两个线圈构成。
一组绕组叫做一相。
因此,图1.1所示的电机为三相步进电机。
直流电源通过开关I、Ⅱ和Ⅲ,驱动电流流过绕在定子上的绕组。
状态
(1),开关I闭合,A相通电。
由于A相绕组受到激磁,空气隙里出现如箭头所示的磁场。
A相上的两个定子磁极和两个转子齿对准,转子处于平衡状态。
若再闭合开关R激励B相,如状态
(2)所示,B相的定子磁极以同样的方式产生磁场。
在磁力线的张力作用下,产生逆时针方向的转矩。
于是,转子沿逆时针方向转过一个固定的角度,到达状态(3)。
图中,转过的角度为15°
。
如果现在打开开关I,去掉A相的激磁,转子将再转15°
,到达状态(4)。
因此,转子的角位置可以用这种开关方式进行控制。
若开关以某种时序转换,则转子就能以步进运动的方式连续旋转;
若进一步使时序转换的速度可调,则平均速度也能用这种开关方式进按照它们的结构和工作原理行控制。
图1.1 磁阻式步进电机的工作原理
实际上,驱动步进电机的开关是晶体管,开关信号由数字集成电路或微机产生。
通过前面的介绍可以看到,步进电机是一种把开关激励的变化变换成精确的转子位置增量运动的执行机构。
2远程步进电机主机、从机原理图
2.1主机电路板PCB设计图如下:
图2.1主机PCB图
2.2从机电路板设计
远程步进电机包括一个主机和2个从机。
两个从机电路板PCB设计图如下图:
图2.2从机PCB图
3步进电机程序控制的设计
3.1步进电机的传动方式
3.1.1三相单三拍工作方式
在这种工作方式下,A、B、C三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。
因此这种通电方式叫做三相单三拍工作方式。
3.1.2三相六拍工作方式
在这种工作方式下,首先A相通电,转子齿与A相定子齿对齐。
第二拍,A相继续通电,同时接通B相,A、B各自建立的磁场形成一个合成磁场,这时转子齿既不对准A相也不对准B相,而是对准A、B两极轴线的角等分线,使转子齿相对于A相定子齿转过1/6齿距,即1.5°
第三拍,A相切断,仅B相保持接通。
这时,由B相建立的磁场与单三拍时B相通电的情况一样。
依次类推,绕组以A—AB—B—BC—C—CA—A时序或反时序转换6次,磁场旋转一周,转前进一个齿距,每次切换均使转子转动1.5°
,故这种通电方式称为三相六柏工作方式。
3.1.3双三拍工作方式
这种工作方式每次都是有两相导通,两相绕组处在相同电压之下,以AB─BC─CA─AB或反之方式通电,故称为双三拍工作方式。
以这种方式通电,转子齿所处的位置相当于六拍控制方式中去掉单三拍后的三个位置。
由上述分析可知,要使磁阻式步进电机具有工作能力,最起码的条件是定子极分度角不能被齿距角整除。
因为三相双三拍步进电机不易失步,控制精度比较高,所以本文对三相双三拍步进电机进行控制,定子有三对磁极,运行时两相同时通电,循环带动转子转动。
3.2硬件接口电路
传统的步进电机控制系统采用硬件进行控制,用一个脉冲发生器产生频率变化的脉冲信号,再经一个脉冲分配器把方向控制信号和脉冲信号转换成有一定逻辑关系的环形脉冲;
经驱动电路放大后就可以来驱动步进电机了。
在这种控制中,步进电机的脉冲由硬件电路产生,如果系统发生变化或使用不同类型的步进电机,需重新设计硬件电路,系统的可移植性不好微机控制系统代替脉冲发生器和脉冲分配器,就可以根据系统需要通过软件编程的方法任意设定步进电机的转速、旋转角度、转动次数和控制步进电机的运行状态。
这样可简化控制电路,降低生产成本,提高系统的运行效率和灵活。
图3.1为单片机控制步进电机接口原理图。
图3.1单片机控制步进电机接口电路原理图
3.3脉冲的形成
实现对步进电机的控制,微机应能输出有一定周期的控制脉冲。
步骤是:
先输出一个高电平,延时一段时间后,再输入一个低电平,然后再延时。
改变延时时间的长短,即可改变脉冲的周期,脉冲的周期由步进电机的工作频率确定。
用软件形成环形脉冲的程序流程图如图3.2所示。
图3.2软件法形成脉冲序列的程序流程
3.4旋转方向控制
步进电机的旋转方向和内部绕组的通电顺序及通电方式有密切关系。
对于三相双三拍工作方式:
正相旋转:
AB→BC→CA→AB
反相旋转:
AB→CA→BC→AB
三相双三拍控制模型如下表所示。
(1)正转控制模型:
表1正转控制模型
(2)反转控制模型
表2反转控制模型
3.5转速控制
控制步进电机的运行速度,实际上是控制系统发出时钟脉冲的频率或换相的周期,即在升速过程中,使脉冲的输出频率逐渐增加;
在减速过程中,使脉冲的输出频率逐渐减少。
脉冲信号的频率可以用软件延时和硬件中断两种方法来确定。
采用软件延时,一般是根据所需的时间常数来设计一个子程序,该程序包含一定的指令,设计者要对这些指令的执行时间进行严密的计算或者精确的测试,以便确定延时时间是否符合要求。
每当延时子程序结束后,可以执行下面的操作,也可用输出指令输出一个信号作为定时输出。
采用软件定时,CPU一直被占用,因此CPU利用率低。
可编程的硬件定时器直接对系统时钟脉冲或某一固定频率的时钟脉冲进行计数,计数值则由编程决定。
当计数到预定的脉冲数时,产生中断信号,得到所需的延时时间或定时间隔。
由于计数的初始值由编程决定,因而在不改动硬件情况下,只通过程序变化即可满足不同的定时和计数要求,因此使用很方便。
3.6控制程序设计
控制程序的设计方法是:
通过标志位FLAG来判断电机的旋转方向,然后输出相应的控制脉冲序列;
判断要求的脉冲信号是否输出完毕。
三相双三拍控制模型完成的步进电机控制程序设计如下:
三相双三拍控制程序流程图如图3.3和图3.4所示。
正转控制模型03H、06H、05H存放在以RM为起始地址的内存单元中,反转控制模型03H、05H、06H存放在以LM为起始地址的内存单元中。
图3.3 主程序流程图
4步进电机各部件
4.1ATmega32芯片的特点
ATmega32有如下特点:
32K字节的系统内可编程Flash(具有同时读写的能力,即RWW),1024字节EEPROM,2K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,面向字节的两线串行接口,8路10位具有可选差分输入级可编程增益(TQFP封装)的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。
工作于空闲模式时CPU停止工作,而USART、两线接口、A/D转换器、SRAM、T/C、SPI端口以及中断系统继续工作;
掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;
在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;
ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;
Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;
扩展Standby模式下则允许振荡器和异步定时器继续工作。
本芯片是以Atmel高密度非易失性存储器技术生产的。
片内ISPFlash允许程序存储器通过ISP串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。
引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlashMemory)。
在更新应用Flash存储区时引Flash区(BootFlashMemory)的程序继续运行,实现了RWW操作。
通过将8RISCCPU与系统内可编程的Flash集成在一个芯片内,ATmega32成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。
4.2LCD1602液晶显示器
LCD显示器模块1602AT(S)R为2*16字符,能够同时显示16x02即32个字符。
(16列2行)。
含有5*10或5*7点LCD,共12*16=192种CG显示字型及双组、8个自由利用软件设定的5*8点图字形,因此除内部固定192种字形外,再加上此16个可自由设定图字形,共208种字图形。
因5*8个点输入设定,故5个点仅占用D4~D0的5位,而D7~D5则可为任意值;
第8行值为游标地址,因此共8行占8个地址,组成1个字形及标示游标地址,总共8个设定字图形,占有8*8=64个地址,CG地址设定值为D5~D0。
4.3通信模块RS485
RS485是由美国电子工业协会EIA(ElectronicIndustriesAssociation)在1983年提出的一种平衡式数据发送标准,满足此标准的收发器采用平衡发送和差分接收工作方式。
实际上,RS485(TIA/EIA-485)通常被看作是TIA/EIA-422标准的一种扩展。
由于支持多节点(32个节点,有些公司的此类器件可能会支持更多节点)、远距离(最大4000英尺)和接收高灵敏度(200mV),在构成通信网络时,仅需要一对双绞线作传输线,因此成本低廉,设备简单,在多站、远距离通信环境下获得了广泛应用。
5软件程序设计
#include"
PMPDataT.h"
unsignedcharcodedisplaybit[4]={0xF7,0xFB,0xFD,0xFE};
//数码管位分布(自左至右)
unsignedcharcodedisplaycode[]={
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管字段0,1,2,3,4,5,6,7,8,9
sbitLED=P3^3;
sbitDE=P3^2;
uchartmp;
unsignedlongintspeed=60036;
uchartmpe;
/*延时t毫秒*/
voiddelay(uintt)
{
uinti;
while(t--)
{/*对于11.0592M时钟,约延时1ms*/
for(i=0;
i<
125;
i++)
{}
}}
voidDisplay(unsignedlongdat)//显示子程序
unsignedchari;
for(i=0;
i!
=4;
i++)
{P0=displaycode[dat%10];
P2=displaybit[i];
dat/=10;
delay
(1);
}}
ucharkeyscan(void)
{ucharscancode,tmpcode;
P1=0xf0;
//发全0行扫描码
if((P1&
0xf0)!
=0xf0)//若有键按下
{delay(10);
//延时去抖动
=0xf0)//延时后再判断一次,去除抖动影响
{scancode=0xfe;
while((scancode&
0x10)!
=0)//逐行扫描
{P1=scancode;
//输出行扫描码
=0xf0)//本行有键按下
{tmpcode=(P1&
0xf0)|0x0f;
/*返回特征字节码,为1的位即对应于行和列*/
return((~scancode)+(~tmpcode));
}
elsescancode=(scancode<
<
1)|0x01;
//行扫描码左移一位
}}}
return(0);
//无键按下,返回值为0
}/*发送数据函数*/
voidsenddata(ucharbuf)
{/*发送数据*/
TI=0;
TB8=0;
//发送数据帧
SBUF=buf;
while(!
TI);
ucharrecvdata()
{/*接收数据*/
RI);
if(RB8==1)
return0xee;
//若接收的为地址帧,则返回0xee
buf=SBUF;
RI=0;
return0;
//返回0
}/*串口初始化函数*/
voidinit_serial()
{TMOD=0x21;
//定时器T1使用工作方式2
TH1=250;
TL1=250;
TR1=1;
//开始计时
PCON=0x80;
//SMOD=1
SCON=0xd0;
//工作方式,9位数据位,波特率9600kbit/s,允许接收
voidGetkey()
{switch(get_key)
{case0x11:
//1行1列,数字0
key=0;
break;
case0x21:
//1行2列,数字1
key=1;
case0x41:
//1行3列,数字2
key=2;
case0x81:
//1行4列,数字3
key=3;
case0x12:
//2行1列,数字4
key=4;
case0x22:
//2行2列,数字5
key=5;
case0x42:
//2行3列,数字6
key=6;
case0x82:
//2行4列,数字7
key=7;
case0x14:
//3行1列,数字8
key=8;
case0x24:
//3行2列,数字9
key=9;
case0x44:
//3行3列,10
key=10;
case0x84:
//3行4列,11
key=11;
case0x18:
//4行1列,12
key=12;
case0x28:
//4行2列,13
key=13;
case0x48:
//4行3列,14
key=14;
case0x88:
//3行4列,15
key=15;
default:
break;
}
/*主程序*/
voidmain()
{
uchari=0;
key=10;
tmp=0xff;
DE=1;
RI=0;
tmpe=speed/2560;
while
(1)
{EA=1;
get_key=keyscan();
//调用键盘扫描函数
Getkey();
buf=key;
Display(tmpe);
/*通过P0口读要访问的从机地址*/
P2=0xff;
addr=P2&
0xf0;
init_serial();
//串口初始化
EA=1;
//关闭所有中断
TI=0;
TB8=1;
//发送地址帧
SBUF=addr;
while(!
TI=0;
if(key==0)
{
senddata(buf);
//发送数据
key=10;
}
if(key==1)
{senddata(buf);
if(key==2)
senddata(buf);
if(key==3)
speed=speed-200;
tmpe=speed/2560;
if(speed<
=55036)speed=55036;
if(key==4)
speed=speed+200;
}}}
6总结
本次实训花了近两周时间,是我们大学以来的最后一个实训。
这次实训和考研复习时间上有冲突,因而时间很紧,既要做实训,又要抓复习。
经过自己的努力和同学们的帮助,本次实训任务圆满完成。
在实训过程中,发现了很多问题,首先是不够专心,实际操作不够快,不该耗时间的地方却多用了时间。
这都说明了自己还有很多不足之处,今后需要多学习、多锻炼,加强动手能力,实现理论与实践相结合。
在焊接的时候,由于我们所做的题目用到了很多贴片,所以焊接技术、难度大大加深,这更培养了我们的细心和仔细。
实训中,我发现了自己对贴片元件焊接还不是很熟悉,容易焊偏。
在同学们和老师的指导下,懂得了基本的焊接步骤,先在焊板上粘些焊锡,然用镊子夹紧帖片元件,轻微地放到焊板上,用焊锡固定元件的时候注意及时调整元件位置,以免焊偏了,待焊锡凝固后,可焊接另一端。
由于事先不懂在焊板上沾焊锡,导致元件歪,或是虚焊的发生。
之后比较重视焊接的质量,虽然过程中出现了问题,但我总体感觉还是成功的。
我比较满意的是我的焊接点,由于