单片机控制步进电机 论文(汇编程序)_第1页
单片机控制步进电机 论文(汇编程序)_第2页
单片机控制步进电机 论文(汇编程序)_第3页
单片机控制步进电机 论文(汇编程序)_第4页
单片机控制步进电机 论文(汇编程序)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理与应用技术课程设计论文单片机控制步进电机 组 长: 组 员: 专业班级:电子信息工程1401班 学 期:2015-2016年第二学期 指导教师:东北农业大学电子信息工程系2016年06月 课程设计小组成员分工明细 姓 名负责课程设计内容(组长)负责绘制电路原理图 完成仿真 制作PPT(组员)查找相关资料 修改调试代码 修改论文(组员)查找相关资料 撰写论文 修改PPT目录 1摘要.11 设计任务要求22 设计方案23设计原理33.1步进电机工作原理33.2系统设计原理44 硬件设计55 软件设计66 Proteus仿真条件与仿真结果137 总结138参 考 文 献139附录.14 9

2、.1系统完整仿真电路图14 9.2系统汇编语言程序源代码14摘要本次课程设计是通过单片机对步进电机进行控制,通过控制其步数实现对其步进角度的控制。我们采用了键盘扫描的方法判断其要转动的步数,并控制步进电机的转动及其转动方向。还采用了温度采集及报警模块防止其过热而产生损耗。通过Keil软件的程序编写及Protues软件的仿真,基本达到了课设的要求。 关键字:单片机 步进电机 步数 步进角度 键盘扫描 温度采集1.设计任务要求 采用单片机控制一个三相单三拍的步进电机工作。步进电机的旋转方向由正反转控制信号控制。步进电机的步数由键盘输入,可输入的步数分别为3、6、9、12、15、18、21、24和2

3、7步,且键盘具有键盘锁功能,当键盘上锁时,步进电机不接受输入步数,也不会运转。只有当键盘锁打开并输入步数时,步进电机才开始工作。 电机运转的时候有正转和反转指示灯指示。 电机在运转过程中,如果过热,则电机停止运转,同时红色指示灯亮,同时警报响。 本题目的关键之处是:如何生成控制步进电机的脉冲序列。 2.设计方案 用单片机(AT89C51)为主芯片设计电路来控制四相步进电机以四相八拍方式工作。1.设两个按键,分别作开关键盘,左转、右转控制;2.设9个触电按键分别控制输入的步数为3、6、9、12、15、18、21、24和27步;3.设置三个发光二极管分别指示其旋转方向(正转,反转)及温度报警。4.

4、使用DS18B20温度传感器感测温度;5.使用ULN2003A芯片驱动步进电机工作。3.设计原理: 3.1步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机,图2是四相步进电机结构示意图。图1图2 开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C

5、相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:a. 单四拍         &#

6、160;       b. 双四拍                 c.八拍图2步进电机工作时序波形图3.2系统设计原理 该系统采用的芯片有:DS18B20温度传感器、ULN2003A以及四相六线步进电机,并且步进电机在双八拍的方式下工作,步矩设置为5°。步进电机的旋转方向由正反转控制信号控制。步进电机的步数由键盘输入,可通过独立键盘S1S9输入的步数分别为

7、3、6、9、12、15、18、21、24和27步对应的角度为15°、30°、135°,且键盘S10具有键盘锁功能,当键盘按键时,通过键盘S11选择运转方向并且输入步数时,步进电机才开始工作;否则,步进电机不接受输入步数,也不会运转。 电机运转的时候有正转指示灯D2和反转指示灯D3指示。 电机在运转过程中用温度传感器采集步进电机外表温度(可设置),如果过热,则电机停止运转,同时红色指示灯亮,同时蜂鸣器警报响。4. 硬件设计4.1最小单片机系统 5V电源:给系统供电。复位电路:使AT89C51从程序存储器的0000H单元开始执行程序。晶振:给单片机运行提供时钟。EA接

8、高电平:表示运行内部程序存储器下载的程序。P0口接排阻:P0口作为通用的I/O使用需加上拉电阻,这时为准双向口。4.2 键盘设计该电路中采用独立键盘工作方式,共设有11个按键,分别提供3、6、9、12、15、18、21、24、27布局选择功能、键盘锁功能以及步进电机转动方向选择功能。其中有程序决定起作用。4.3步进电机及其驱动电路 采用ULN2003A芯片为驱动电路驱动四相电机工作。芯片的四个引脚分别以逆时针方式连接步进电机对应引脚。4.4温度监测及报警系统 使用DS18B20传感器感测温度,当温度高于预设温度时,发光二极管点亮,蜂鸣器报警。5软件设计软件设计采用汇编语言编写控制程序,主要由以

9、下几个模块组成5.1主函数模块: 该模块重要功效是调动温度采集函数、步进电机函数中函数,实现模块化编程。5.2温度检测及报警模块:该模块的重要功效是对步进电机的外表采集温度,并且对已设定好的数值进行比较,从而确定机身温度是否过高,正常时电机正常转动,当温度过高时电机不再转动,并且蜂鸣器报警,红灯点亮。5.3键盘扫描模块:通过键盘扫描模块判断所要走步数,控制步进电机的开关,改变步进电机的转向。5.4步进电机驱动模块:通过单片机的定时器,通过控制延时时间控制转速;在10ms过后执行中断程序,即使步进电机转动。各模块程序流程图如下: 步进电机驱动程序:否是是否是否步数为零停止定时器初始化步数减1步进

10、电机转一步是否有步数按下是否达到10ms定时器开始计时 开始键盘扫描模块:否是否拍序数=7-当前拍序数等待拍序数不变是否改变转向是否按下开关键开始是步进电机转一步流程图: 开始反转正转或反转转正转基址取正转数组首地址,加拍序数即为要取数基址取反转数组首地址,加拍序数即为要取数将数值赋予P2步进电机转一步温度检测及报警模块:是否 结束将数据存入预设存储单元数据转换读取温度值发送跳ROM匹配指令判断DS18B20是否存在系统初始化 开始否开始初始化程序否主函数模块流程图:报警、红灯亮、步进电机停判断步进电机温度是否高于31度 是 是否按键S10 是 确定输入步数确定正反转 电机转动6.仿真条件及结

11、果:仿真条件:打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“step.hex”。在“Clock Frequency”栏中输入晶振频率为11.0592MHz。仿真结果:按下S10,打开步进电机,每按下3,6,9,1227键,步进电机反转,转动-15,-30-135度角;当按下一次S11,步进电机正转,再按一次,步进电机反转,以此类推。当温度超过31度时,步进电机停止工作,此时发光二极管变亮,蜂鸣器报警。7.总结:在做课程设计期间,我们得到了周修理老师的指导和原浩强同学的帮助,在此一并感谢。本次课程设计,不仅使我们了解并掌握了步进电机的用法,而且让我们对

12、利用单片机实现控制功能有了更加深刻的理解。极大的锻炼了我们的能力,尤其是理论与实践相结合的能力。在未来电子信息行业的竞争中,我们只有尽早将理论应用于实践,才能更好地理解理论,才能由此不断创新,在竞争中拔得头筹。今后我们将会把精力更多地放在动手能力的培养上。我们还懂得了,做学问就要有实事求是的精神,哪怕减少生命的长度,也不能减少实事求是的态度。8.参考文献: 1.张毅刚编著,单片机原理及应用高等教育出版社,2010。 2.郭天祥编著,新概念51单片机C语言教程,2009。9附录9.1 系统完整仿真电路图 9.2 系统汇编语言程序源代码 SPEED DATA 30H ;用于定时中断重载用,与PUL

13、S_TIME相反,越大定时越长,也即速度越小 PULS_TIME DATA 31H ;拍数周期,为零时将用speed重载PULS_TIME DISPSPEED DATA 32H ;显示用级数=15-SPEED,越大,转动速度越快 STEP DATA 33H PULS_ORDER DATA 34H ;拍序数 DISPBUFFER DATA 35H ;显示十位 S4_ON_TIME DATA 36H ;S4按下不放计数 MORTORPORT DATA P2 ;步进电机输出口 ORIENT BIT 00H ON_OFF BIT 01H ON_TIME3S BIT 02H ;按住超3s S1 BIT

14、P0.1 ;启动/停止键 S2 BIT P0.2 ;正反向命令 S3 BIT P0.3 ;转速级数 S4 BIT P0.4 ;转动步数 ON_OFFK EQU S1 ORIENTK EQU S2 SPEEDK EQU S3 STEPK EQU S4 STEPK1 EQUP1.0 STEPK2 EQUP1.1 STEPK3 EQUP1.2 STEPK4 EQUP1.3 STEPK5 EQUP1.4 STEPK6 EQUP1.5 TH10MS EQU HIGH(65536-10000);12MHZ晶振10MS TL10MS EQU LOW(65536-10000) TH50MS EQU HIGH(

15、65536-50000);12MHZ晶振50MS TL50MS EQU LOW(65536-50000)/*接线:用导线将MCU的IO1连接到TEMP SENSOR DS18B20的DQ。过程:上电,编译、下载程序,按注释说明设置断点,运行程序到断点处,观察寄存器R7中的数据,用手摸住传感器DS18B20芯片,再运行到断点处,比较R7的变化。*/ A_BIT EQU 20H ;存放个位数变量 B_BIT EQU 21H ;存放十位数变量 FLAG EQU 38H ;DS18B20是否存在标志 DQ EQU P2.7 ;DQ引脚由P0.0控制;-初始化及读取温度值子程序-RE_TEMP:SETB

16、DQ;拉高单总线LCALLRESET_1820;调用复位子程序JBFLAG,ST;判断DS18B20是否存在 HOME:RET ST:;DS18B20存在MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820;调用写入数据子程序MOVA,#44H;发出温度转换命令LCALLWRITE_1820;调用写入数据子程序LCALLRESET_1820;调用读温度前先复位MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820;调用写入数据子程序MOVA,#0BEH;发出读温度命令LCALLWRITE_1820;调用写入数据子程序LCALLREAD_1820;调用读取数据子程序LJ

17、MPHOME;-复位子程序-RESET_1820:SETB DQ;拉高单总线NOPCLR DQ;拉低单总线;-主机发出复位低脉冲- MOVR1,#3;延时,模拟时序 DLY: MOVR0,#53 DJNZR0,$DJNZR1,DLY;-然后拉高数据线-SETB DQ;拉高单总线NOPNOP NOP ;-等待DS18B20回应- MOVR0,#13H;延时,模拟时序 T2:JNBDQ,T3;等待DS18B20回应DJNZR0,T2LJMPT4;-标志位FLAG=1,表示DS18B20存在- T3:SETBFLAG;DS18B20存在LJMPT5;-标志位FLAG=0,表示DS18B20不存在-

18、T4:CLRFLAG;DS18B20不存在LJMPT7;-时序要求延时一段时间- T5:;延时,模拟时序MOVR0,#55 T6:DJNZ R0,T6 T7:SETBDQRET;-写入子程序-WRITE_1820:MOVR2,#8;一共8位数据 CLRC;C=0 WR1:CLRDQ;总线低位,开始写入MOVR3,#4DJNZ R3,$ ;保持16us以上RRCA;把字节DATA分成8个位,环移给CMOVDQ,C;写入一个位MOVR3,#12DJNZR3,$ ;等待SETBDQ;重新释放总线NOPDJNZR2,WR1;写入下一个位SETBDQ;拉高单总线RET;-读子程序-READ_1820:

19、MOVR4,#2;读出两个字节的数据MOVR1,#29H;低位存入29H,高位存入28H RE0:MOVR2,#8 ;数据位一共有8位 RE1:CLRC;清零进位SETB DQ;拉高单总线NOPNOPCLRDQ;读前总线保持为低NOPNOPNOPSETB DQ;开始读总线释放MOVR3,#4 RE2: DJNZ R3,RE2;延时18usMOVC,DQ;从总线读到一个位MOVR3,#12 RE3: DJNZR3,RE3;等待50usRRCA ;把读得的位值环移给ADJNZR2,RE1;读下一个位MOVR1,A DECR1;存入下一个地址单元DJNZR4,RE0RET;-数据转化子程序- TUR

20、N:;只保留读回的高8位,存入29H单元中MOVA,29HMOVC,40H ;28H.0,将28中的最低位移入C(4043H对应的是28H的位地址,也可以改用28H.028H.3)RRCA ;将A中内容和进位位一起循环右移一位MOVC,41H;28H.1RRCAMOVC,42H;28H.2RRCAMOVC,43H;28H.3RRCAMOV29H,A;最后的温度值存入29H单元中RETEND ORG 0000H LJMP MAIN ORG 000BH LJMP TIME0MAIN: LOOP LCALLRE_TEMP;调用读取温度子程序 LCALLTURN;数据转化子程序 MOVR7,29H C

21、JNE R7,#31,GOGO: JC LOOP JNC GO1GO1: MOV SP,#50H ACALL DELY20MS MOV STEP,#01 MOV PULS_ORDER,#00 MOV DISPSPEED,#00;作显示用 MOV SPEED,#15 MOV PULS_ORDER,#07 MOV PULS_TIME,#00 MOV A,DISPSPEED INC A MOV DISPBUFFER,A CALL DISP MOV S4_ON_TIME,#00 CLR ORIENT CLR ON_OFF ;为零停止,为1运行 CLR ON_TIME3S MOV TMOD,#01H M

22、OV TH0,#TH10MS MOV TL0,#TL10MS MOV TH1,#TH50MS MOV TL1,#TL50MS SETB EA SETB ET0 SETB ET1 ;* TESTKEY: JB ON_OFFK,TESTKEY1 ;判断开关键 CALL DELY20MS JB ON_OFFK,TESTKEY1 JNB ON_OFFK,$ CPL ON_OFF JB ON_OFF,TESTKEY0 MOV A,DISPSPEED INC A MOV DISPBUFFER,A CALL DISP CLR TR0 SJMP TESTKEY1TESTKEY0: SETB TR0 ;判断方向

23、键 MOV DISPBUFFER,STEP CALL DISPTESTKEY1: JB ORIENTK,TESTKEY2 CALL DELY20MS JB ORIENTK,TESTKEY2 JNB ORIENTK,$ CPL ORIENT MOV A,#07 SUBB A,PULS_ORDER MOV PULS_ORDER,ATESTKEY2: JB ON_OFF,TESTKEY JB SPEEDK,TESTKEY3 CALL DELY20MS MOV A,DISPSPEED INC A MOV DISPBUFFER,A CALL DISP JNB SPEEDK,$ INC DISPSPEED

24、 MOV A,DISPSPEED MOV B,#16 DIV AB MOV DISPSPEED,B MOV A,#15 SUBB A,DISPSPEED MOV SPEED,A MOV PULS_TIME,A MOV A,DISPSPEED INC A MOV DISPBUFFER,A ;CALL DISP AJMP TESTKEY3TESTKEY_: AJMP TESTKEYTESTKEY3: JB STEPK,TESTKEY4 CALL DELY20MS JB STEPK,TESTKEY4 MOV DISPBUFFER,STEP CALL DISPTESTKEYL: JNB STEPK,$

25、 INC STEP ;mov step,#03 MOV A,STEP MOV B,#100 DIV AB MOV STEP,B MOV DISPBUFFER,STEP CALL DISP AJMP testkeyend TESTKEY4: JB STEPK1,TESTKEY5 CALL DELY20MS JB STEPK1,TESTKEY5 MOV DISPBUFFER,STEP CALL DISP JNB STEPK1,$ ;INC STEP MOV step,#03 MOV A,STEP MOV B,#100 DIV AB MOV STEP,B MOV DISPBUFFER,STEP CA

26、LL DISP AJMP testkeyend TESTKEY5: JB STEPK2,TESTKEY6 CALL DELY20MS JB STEPK2,TESTKEY6 MOV DISPBUFFER,STEP CALL DISP JNB STEPK2,$ ;INC STEP MOV step,#06 MOV A,STEP MOV B,#100 DIV AB MOV STEP,B MOV DISPBUFFER,STEP CALL DISP AJMP testkeyend TESTKEY_: AJMPTESTKEY_TESTKEY6: JB STEPK3,TESTKEY7 CALL DELY20

27、MS JB STEPK3,TESTKEY7 MOV DISPBUFFER,STEP CALL DISP JNB STEPK3,$ ;INC STEP MOVstep,#09 MOV A,STEP MOV B,#100 DIV AB MOV STEP,B MOV DISPBUFFER,STEP CALL DISP AJMP testkeyend TESTKEY7: JB STEPK4,TESTKEY8 CALL DELY20MS JB STEPK4,TESTKEY8 MOV DISPBUFFER,STEP CALL DISP JNB STEPK4,$ ;INC STEPMOV step,#12M

28、OV A,STEPMOV B,#100DIV AB MOV STEP,B MOV DISPBUFFER,STEPCALL DISPAJMP testkeyend TESTKEY8: JB STEPK5,TESTKEY9 CALL DELY20MS JB STEPK5,TESTKEY9 MOV DISPBUFFER,STEP CALL DISP JNB STEPK5,$ ;INC STEP MOV step,#15 MOV A,STEP MOV B,#100 DIV AB MOV STEP,B MOV DISPBUFFER,STEP CALL DISP AJMP testkeyend TESTK

29、EY9: JB STEPK6,TESTKEY_ CALL DELY20MS JB STEPK6,TESTKEY_ MOV DISPBUFFER,STEP CALL DISP JNB STEPK6,$ ;INC STEP MOV step,#15 MOV A,STEP MOV B,#100 DIV AB MOV STEP,B MOV DISPBUFFER,STEP CALL DISP AJMP testkeyend TESTKEYEND: AJMP TESTKEY;*TIME0: PUSH ACC PUSH PSW PUSH B MOV TH0,#TH10MS MOV TL0,#TL10MS MOV A, PULS_TIME ; JNZ MINU

温馨提示

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

评论

0/150

提交评论