【精品】步进电机研究报告_第1页
【精品】步进电机研究报告_第2页
【精品】步进电机研究报告_第3页
【精品】步进电机研究报告_第4页
【精品】步进电机研究报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、步进电机控制器1. 课题名称基于51单片机设计并实现步进电机的控制2. 内容介绍 用51单片机实现28byj48型四相八拍步进电机的控制。 使用单片机输出四路脉冲信号送到驱动电路uln2003,驱动步进电机的和 应绕组得电,即步进电机获得脉冲,而产生一定的角位移。单片机循序 不断的输出时序脉冲,就可以实现步进电机的旋转。 步进电机的控制主要通过6个按键來实现,这6个按键分别表示“正转”、“反转”、“加速”、“减速”、“消铃”和“停止”,从而实现电机的转向, 转速,停止,报警的控制。 通过加减速按键,对电机的转速进行控制,数码管显示转速的等级,一 共有8个转速等级。 当电机转速超过最高等级时,蜂

2、鸣器鸣叫,发出超速报警信号,同时自 动停止电机。再按卜减速键调节时,屯机又可以按设定转速自动转动。 当电机正转时,按下反转键,电机可以自动切换到反转状态,无需按下 停止键。3国内外现状随着计算机技术和数字控制技术的发展,步进电机的应用也日益广泛。 日前,步进电机应用于磁盘驱动器、数控机床、轧钢机、机器人、以及门动 化仪表等方面。近10多年來我国微电机市场一直吸引国内外企业投资。国内巨大的市场 潜力和丰富的资源、廉价的劳动力等优势,吸引了众多跨国公司和国内上市 公司的冃光。步进电动机国外早已发展高性能的混合式结构,我国混合式步进电机 90年代才开始发展,混合式电机的使用量近年也在不断增长。近年来

3、,为克服步进电机低速转动时振动和噪声人的缺点,通过步进电 机通过改变减速比等机械传动避开共振区;采用带有细分功能的驱动器;换 成步距角更小的步进电机,如三和或五和步进电机;换成交流伺服电机,几 乎可以完全克服震动和噪声;在电机轴上加磁性阻尼器,市场上已有这种产 品,但机械结构改变较人,使得步进电机的发展更有前途。近年,又采用步进电机的细分技术,减弱或消除步进电机的低频振动, 更有利于减小噪声,同时提高电机的运转精度,使步进电机的控制更为精确。步进电机因其特有的工作方式,还是有很大市场的,尤其在精度比较高 的仪器上,做开环闭环控制上很实用,但是控制部分很少用到51单片机了, 51的资源和速度只足

4、以做简单的控制。本设计只是为了实现低速的电机控制,51单片机足以实现所需功能,考 虑到价格合理,设计简单,操作方便,接线简单等优势,由于经费问题,仍然 选用51芯片控制。4.创新之处可以直接在正反转z间进行切换,不需要小间按停止键,而且正反转z 间切换时间很短。当电机超速时,电机自动停止,发出报警信号,便于操作者进行降速的 调节,同时当转速调整后,电机可以恢复到原來的运转方向和状态。通过数码管显示转速的等级。采用lln2003控制电路,基本原理如门单片机输出四路脉冲信号,经过非门和限流电阻,送到uln2003a。由uln2003a放人后分给相应的绕组,步进电机的每相绕组并上一个二极管,口 的是

5、防止在三极管瞬间截止时,绕组电感所产生很高的感应电动势击穿三极 管。当通电状态的改变完成一个循环时,转子转过一个齿距,此次采用八拍 控制,实现电机的转动控制。步进电机28byj48型四相八拍电机,屯压为dc5vo当对步进屯机施加一系 列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电 机的某一相或两和绕组的通电状态改变一次,也就对应转子转过一定的角度(一 个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步 进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四 拍(a-b-c-d-a),双(双相绕组通电)四拍(ab-bc- cd-da-ab

6、),八拍 (a-ab-b-bc-c-cd-d-da-a);此次设计采用八扌控制,控制时序如下表。表3-1步进电机正转的旋转相序:橙黄粉蓝十六制(p1 口)10000x081100oxoc01000x0401100x0600100x0200110x0300010x0110010x09反转的旋转相序正好与之相反。14023933843753663573483393210311130122913281427152616251724182319222021t2pi.0t2expi.ip1.2p1.3p1.5p1.6p1.7rstrxd p3.0 txd p3.1into p3.2ikti p3.3t0

7、p3.4t: p3.5wrp3.6r15p3.7xtal2 xtal1gndlujijlujuljljljljljljljljljljlj 匸gpo.oro.po.po.po.popopo.p4alp4.p2.p2p2p2.p2p2p2p2 mnnrmnnnnnnnnnnnnn6 5 4 3 2 105具体过程5.1硬件电路设计5.1. 1单片机的最小系统1.单片机:本次设计使用单片机芯片stc89c51煦4kb的flash存储器擦写次数1000图 511stc89c51 引脚图次;内含128字节的ram;具有32根可编程i/o线;具有2个16位编程定时器stc89c51的工作特性:具有6个屮

8、断源,5个屮断矢量,2级优先权的屮断结构;具有1个全双工的可编程串行通信接口;具有1个数据指针dptr;具有可编程3级程序锁定位;-stc89c51的工作电源为5 (1±0.2) v且典型值为5v; stc89c51最高工作频率为24mh乙 stc89c51的编程频率为324mh乙 编程启动电流和启动电压分别为1ma、5或i2vo2晶振:本次设计釆用的是12m的晶振,电路图如下:y212mhzc930pfcio3opfgkid图51一2晶振电路两只电容在20pfloopf z间取值,其取值在60pf70pf时振荡器频率 稳定性较高,按照-般经验,外接晶体时两个电容的取值为3opf;外

9、接陶瓷振 荡器是两电容的典型值是47pfo3 复位电路:在时钟电路工作后,只要在单片机的rst引脚上出现24个时钟振荡脉冲(2 个机器周期)以上的高屯平,单片机便可实现初始化状态服务。为保证应用系统 可靠的复位在设计复位电路时,通常使rst引脚保持4ms以上的高屯平,只要 rst保持高电平,mcs-51单片机就会循环复位;当rst从高电平变为低电平 时,mcs-51单片机就从0000h地址开始执行程序,在单片机复位的有效期间, ale、psen引脚输出高电平。本次设计采用的是手动复位,其电路图如下:rst±.c1 1lufrst图513复位电路4 电源电路:以usb接口作为电源接口5

10、.1.2步进电机驱动电路:由于单片机接口信号不够人需要通过uln2003放大再连接到相应的电机接 口,对电流进行放大,从而增加驱动力。由于uln2003不仅有放大信号作用,同时有将信号取反的功能,所以加 74ls04反和器,使得输入的脉冲信号与电机正反转所需的时序信号一致,便于 控制。从单片机输出四路脉冲信号,经过非门和限流电阻,送到uln2003ao由 uln2003a放大后分给和应的绕组,步进电机的每和绕组并上一个二极管,h的 是防止在三极管瞬间截止时,绕组电感所产生很高的感应电动势击穿三极管。非 门采用74ls04芯片,其内部共有六个独立的非门,这里只用了其屮的四个。uln2003驱动器

11、的管脚图:图514uln2003驱动器的管脚图步进电机驱动电路:r4|r3|k.714.7hr54.7k1r 12r 24r 45lln200316 mlis m214 m3hm42ttto匸td lr2r3r4r5r6r7rg1 2 3 4 5 6 7 c qqqqqqqcv uln2003+5+5 step mtrtm4ml1345图515步进电机驱动电路5.1.3键盘电路设计键盘含有16个键,有9个数字键,分为四行四列,四列分别对应p0.0,p0,p0.2,p0.3 口,二行分别对应 p0.4,p0.5, p0.6, p0.7 口。键盘连接电路图如下所示:图516键盘电路图按键分配为:k

12、ey0:屯机正转启动;key1:电机反转启动;key2:电机转动停止;key3:电机转动加速;key4:电机转动减速;key5:消铃键,当电机转速超过最高等级时,喇叭处丁讳响的状态,电机停止转动,此时按此键停止喇叭的蜂鸣。5.1.4蜂鸣器电路设计蜂鸣器电路由单片机芯片的p1.0 口驱动。蜂鸣器电路图如下:图517蜂鸣器电路当电机的转速己经达到最高等级,而此时仍然按动加速键,则蜂鸣器响,提 醒超速转动,发出警报,并停止电机的转动。5.1.5转速等级显示电路图518数码管显示电路利用74hc164芯片作为位码的移位控制,ab端输入1,而使位选信号流水 移动,确保每次只有一位选通,同时通过uln28

13、03芯片对驱动信号放人,确保 数码管有足够大的驱动电流。利用74hc574锁存器进行数码管段码的锁存。74hc164是8位串入、并出移位寄存器。74hc164是高速硅门cmos器件, 与低功耗肖特基型ttl (lsttl)器件的引脚兼容;是8位边沿触发式移位寄存 器,串行输入数据,然后并行输出。数据通过两个输入端(dsa或dsb)之一dsa1迴vccdsb2迴q7q0312 q6q14164tt| q5q25"lol q4q369| mrgnd7n cp图 51974hc164串行输入;任一输入端可以用作高电平使能 端,控制另一输入端的数据输入。两个输入 端或者连接在一起,或者把不用

14、的输入端接 高电平,一定不耍悬空。时钟(cp)每次由低 变高时,数据右移一位,输入到qo, q0是 対个数据输入端(dsa和dsb)的逻辑与, 它将上升时蚀沿z前保持一个建立时间的长度。主复位(mr)输入端上的一个低屯平将使其它所有输入端都无效,同时非同 步地清除寄存器,强制所有的输出为低电平。当直接利用74hc164的输出信号直接驱动数码管时,由于电流比较小,数码 管数值显示亮度不够,加uln2803芯片将信号放大。uln2803是高压、大电流 达林顿阵列,每一个包含8个开漏的集电极达林顿对,它们之间共发射极。每一 通道额沱电流为500ma,能够承受的最人漏电流为600 ma,内部集成抑制二

15、极 管用以感性负载,输入端接相反的输出端以简化电路板布局,输出电流(单输出) 最大500mao利用数码管显示电路显示电机转速的等级。5. 1. 6总体硬件电路5.1.7实物图:5. 2软件设计5. 2.1主程序流程图:图521主程序流程图5. 2. 2软件程序清单:# include<reg51.h>包含头文件# definedataport po定义数据端口# definezqd0设正向启动# definefqd1/设反向启动# definestop2/电机停止转动# definejiasu3/电机加速键值# definejiansu4/电机减速键值# definexiaolin

16、g 5喇叭提醒消铃键值/定义锁存使能端口段锁存/位锁存定义步进电机连接端口sbit latch 1=p1a6;sbit latch2=pia5;sbit hc164ab=p0a7;sbit laba=plao;sbit al=p2a0; sbitbl=p2al;sbit c1=p2a2;sbitdl=p2a3;#define coil.ab 1 al=0; b1=o;c1=1;d1=1; /ab 相通电,其他相断电#define coil.bcl al=l; b1=o;c1=o;d1=1; /bc 相通电,其他相断电 #define coil.cdl al=l; b1=1;c1=o;d1=o;

17、 /cd 相通电,其他相断电 #define coil_dai a1=o;b1=1;c1=1;d1=o; /da 相通电,其他相断电 #define coil_al a1=o;b1=1;c1=1;d1=1; /affl通电,其他相断电 #define coil_bl a1=1;b1=o;c1=1;d1=1; /b 相通电,其他相断电 #define coil_cl a1=1;b1=1;c1=o;d1=1;/c 相通电,其他相断电 #define coil_dl a1=1;b1=1;c1=1;d1=o; /d 相通电,其他相断电 #define coil_off a1 = 1;b1=1;c1 =

18、 1;d1 = 1; 全部断电unsigned char code duanma= ox3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ 共阴,显示段 码值0funsigned char dengji=o;速度等级unsigned char speed=24;unsigned char keyval;键盘扌扌苗的键值us级延时函数声明ms级延吋数码管显示函数 键盘扫描转速过高的提解unsigned charzflag; 正向转动的标志 static unsigned char time

19、s,i;void delayus2x(unsigned char t); void delayms(unsigned char t); void display(unsigned char disval); unsigned char keyscan(void); unsigned char readkey(void);void baojing(void);关扬声器停止电机锁存第一个数码管*/void main (void)laba= 1;p2=0xff;th0=0xle;tl0=0x0c;tmod=0x 10;et0=l;et1 = 1;ea=1;hc164ab=1;latch2=1;lat

20、ch2=1;latch2=0;times=0;i=0;while (1)/主循环display(dengji);keyval=readkey();if(keyval!=oxff)switch (keyval)case zqd: tr1=1 ;重新赋值1ms重新赋值1mszflag=l;thl=(65536-1000)/256;tll=(65536-1000)%256; break; case fqd: tr1 = 1 ;zflag=o;th 1=(65536-1000)/256;tll=(65536-1000)%256; break;case stop: tri=0;p2=0xff;times

21、=0;i=0; break;)case jiasu:if(dengji<8)dengji+; speed=speed-3;elsebaojing();break;case jiansu:if(dengji>0)dengji-;speed=speed+3;break;default: break; us延时函数,含有输入参数unsigned chart,无返冋值 unsigned char是定义无符号字符变量,其值的范围是0255这里使用晶振12m,精确延时请使用汇编,大致延吋 长度如下t=tx2+5 us*/void delayus2x(unsigned char t)while(

22、t);ms延时函数,含有输入参数unsigned chart,无返冋值 unsigned char是定义无符号字符变量,其值的范鬧是 0255这里使用晶振12m,精确延时请使用汇编*/void delayms(unsigned char t)while(t)大致延时imsdelayus2x(245);delayus2x(245);显示函数,用于动态扫描数码管num表示需要显示的位数,如需要显示99两位数值则该值输入2*/void display(unsigned char disval)dataport=duanmaldisval% 10;/取显示的个位latch1 二 1;latch1=1;

23、/段锁存latch 1=0;按键扫描函数,返冋扫描键值*/ unsigned char keyscan(void) 键盘扫描函数,使用彳了列逐级打描法 unsigned char vai,keyport,tempkey,row,cow;dataport=0x0f;/高四位置高,低四位拉低if(dataport!=oxof)表示有按键按下delayms(lo); 去抖if(dataport !=oxof) row=0;cow=0;keyport=0xef;dataport=keyport;tempkey=dataportloxfo;while(tempkey=oxff)检测按键所在行row+;k

24、e yport=ke y port« 1;keyport=keyport 10x01;dataport=keyport; tempkey=dataportloxfd;1if( tempkey !=oxff)if( te mpke y=0xte) cow=0;else if(tempkey=oxfd) cow=l;else if(tempkey=0xfb) cow=2;else cow=3; / 检测按键所在列val=row*4+cow;elseval=0xff;return vai;读取键值函数*/unsigned char readkey(void)unsigned keynum;

25、keynum=keyscan();if(keynum!=oxft) while(keyscan() !=oxff); 等待按键松开return keynum;转速过高的报警子程序*/ void baojing(void)p2=0xff;tr1=o;/关闭电机times=0;i=0;tro=1;while(readkey() !=xiaoling);tr0=0;laba=l; 关扬声器定时器1中断子程序 */ void timero_isr(void) internipt 1 using 1 th0=0xle;tl0=0x0c;laba=-laba;定吋器中断子程序*/void timerl_i

26、sr(void) internipt 3 using 3 th1=(65536-1000)/256;重新赋值 1mstll=(65536-1000)%256;if(times=speed)times=o;if(zflag=l)switch(i)case 0: coil_a 1 ;i+;break;j case 1: coil_ ab 1 ;i+;break; case 2: coil_b 1 ;i+;break; case 3: coil_bc 1 ;i+;break;) case 4: coil_c 1 ;i+;break; case 5:coil_cdl;i卄;break; case 6:

27、 coil_d 1 ;i+;break; case 7: coil_da1 ;i+;break; case 8:i=0;break; default: break;) elseswitch(i)case 0: coil_a 1 ;i+;break; case 1: coil_dal ;i+;break; case 2: coil_dl;i+;break; case 3: coil_cd 1 ;i+;break; case 4: coil_c 1 ;i+;break; case 5: coil_bcl;i-h-;break; case 6: coil_b 1 ;i+;break; case 7:

28、 coil_ab 1 ;i+;break; case 8: i=0;break; default:break;elsetimes+;5. 2.3软件调试分析=| file edit view project debug flash peripherals tools sws lindw help_ | 占 x簡空后丹 您念xb 'ahl3必谢梯辻i 匕;xs|target 1project workspacexb lj 1& 臼 source group i 的 dcmtrtist c01 smclude<reg52. h>02 sbit keyjjp=p32: z

29、/iehlsbt03 sbit key.dow=p3-3;/h04 sbit key.stop二p3p;停止®t05 5bit zz二p0:/控制瑞06 sbit fz=pri;/|$制瑞07 sb讥 beep = p36: /«««!$制站口p36 06 unsigned char keyv, teapkeyv.12 3 k k k 曲餉的09 void de lay (unsigned mt n) 10e)unsigned mt ji; for/ for(jj=0:jj<125:jj+) :dcitrtestbuild target '

30、target 11 compiling dcktrtest.c. linking mdmoprogram size: data»ll.0 xdata»0 code»170 creating hex file from "dcmtrtest” ,dcfrtest, - 0 error(s), 0 warning(s).build command findrfies /k«xl bonitor*51 drxvtt图5-2-2 keil软件调试界面图1. 无法编译成功:编译软件提醒未定义p2等变量,由丁使用c语言编写软件,直接使用 了单片机的端口名称,所以必须增加v reg51 .h>的头文件。增加语句:# include < reg51 ,h>/包含头文件2. 函数返冋值类型与参数类型不一致:修改了函数的入口参数,返凹值的类型,从而正确调用函数,使得返回 值与被赋值的参数类型一致。5. 3硬件调试分析5.3.1硬件电路基本检查:硬件调试主要是检

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论