STC89C51单片机RS485控制步进电机系统设计与实现

0 下载量 98 浏览量 更新于2024-06-23 收藏 528KB DOC 举报
本篇毕业设计论文详细探讨了基于51单片机(STC89C51)与RS485通信技术在步进电机控制系统中的应用。作者的专业是XXX,隶属于XXX学院,研究的主题是设计一个利用485通讯协议控制步进电机的简易装置。论文结构包括以下几个部分: 1. **系统整体设计方案**: - 硬件设计部分着重于构建单片机最小系统、键盘输入电路、数码管显示电路、485通信电路以及步进电机驱动电路。这些子模块协同工作,形成一个集成的控制系统。 - 软件设计部分,作者首先阐述了整体思路,强调了主程序的设计,涉及数码管显示、485通信收发函数和步进电机控制函数的编写。 2. **硬件系统设计**: - 单片机最小系统电路确保了STC89C51的稳定运行,这是整个系统的基石。 - 键盘电路允许用户通过按键进行交互,增加系统的可操作性。 - 数码管显示电路用于实时显示步进电机的运动状态,如步进圈数。 - RS485通信电路则实现了单片机与外部设备间的通信,支持远程控制和数据交换。 - 步进电机连接电路确保了单片机精确控制电机的转动。 3. **软件系统设计**: - 主程序是核心逻辑,负责处理来自键盘的输入,控制数码管显示和步进电机的动作。 - 485通讯功能通过专门的函数实现,使得设备能够与其他智能装置进行通信,扩展了系统的功能。 - 步进电机控制函数是关键部分,确保电机按照预设指令准确执行。 4. **系统调试**: - 设计者对硬件和软件进行了严谨的调试,确保系统的稳定性和准确性。 5. **论文结论**: - 论文总结了研究的成果,强调了RS485通信在工业控制自动化领域的应用价值,尤其是在远程控制和数据采集方面。 通过这篇论文,作者展示了如何将基础的51单片机技术和RS485通信技术结合起来,开发出一款实用的步进电机控制系统,这对于理解单片机在工业自动化中的应用具有实际意义。同时,也为后续研究者提供了关于485通讯系统设计和集成的宝贵经验。
2023-02-27 上传
系统整图 系统整图如图3- 1所示,本系统采用外部中断方式,p0口作为信号的输入部分,p1口为发光二极管显 示部分,p2口作为电机的驱动部分。 电源部分 利用LM7812和LM7805芯片得到12V和5V的电压,它们的应用要注意以下几点:(1)输 入输出压差不能太大,太大则转换效率急速降低,而且容易击穿损坏;(2)输出电流不 能太大,1.5A 是其极限值。大电流的输出,散热片的尺寸要足够大,否则会导致高温保护或热击穿; (3)输入输出压差也不能太小,大小效率很差。 其中12V电压给步进电机供电,5V电压则给单片机供电。分别如图3-2、图3-3所示。 (1)、产生12V的电压给步进电机供电 (2)产生5V的电压给单片机供电 按键部分 本次设计选用的是单片机的P0口来控制信号的输入,所以把按键开关和P0口连接起来 ,当按下开关S1时,相当于给P0.0口一个低电平;当按下开关S2时,相当于给P0.1口一 个低电平;当按下开关S3时,相当于给P0.2口一个低电平;当按下开关S4时,相当于给 P0.3口一个低电平;当按下开关S5时,相当于给P0.4口一个低电平。然后通过单片机实 行相应的操作。如图3-4。 驱动部分 此电路是步进电机的驱动部分,我选用的是ULN2004芯片来驱动的,ULN2004系列是一 款高耐压,大电流达林顿管驱动器,包含7个NPN达林顿管。如图3-5。 状态指示部分 状态指示用P1口控制发光二极管的显示,如果相应端口是低电平,相应的发光二极管 就会亮,用它来表示步进电机所处的状态。如图3-6。 实物图: 源程序清单 QIAN EQU 40H HOU EQU 41H JIA EQU 42H JIAN EQU 43H TING EQU 44H ORG 000H LJMP MAIN ORG 003H LJMP DUAN /// 外部中断0 ORG 0030H MAIN: ///初始化 MOV R0,#0FH MOV 10H,#01H MOV 11H,#03H MOV 12H,#02H MOV 13H,#06H MOV 14H,#04H MOV 15H,#0CH MOV 16H,#08H MOV 17H,#09H MOV 20H,#50 MOV 21H,#40 MOV 22H,#30 MOV 23H,#20 MOV 24H,#10 MOV 25H,#5 MOV R1,#20H MOV IE,#10000001B CLR QIAN CLR HOU CLR JIA CLR JIAN CLR TING MOV A,@R1 MOV R2,A SETB IT0 ////边沿触发形式 LOOP1:JNB QIAN ,LOOP2 ACALL FRONT1 LOOP2:JNB HOU,LOOP1 ACALL BACK1 DUAN: MOV A,P0 CPL A ANL A,#1FH ///去高三位,使按下去的一位为1 CJNE A,#00H,CHA AJMP DUAN CHA: ACALL DELAY10MS MOV A,P0 CPL A ANL A,#1FH JZ DUAN ///为零转移 ACALL ZHAO RETI ZHAO:MOV A,P0 //查找是哪一位,下面置1 JNB ACC.0,FRONT JNB ACC.1,BACK JNB ACC.2,FAST JNB ACC.3,SLOW JNB ACC.4,STOP FRONT:SETB QIAN RET BACK: SETB HOU RET FAST: SETB JIA RET SLOW: SETB JIAN RET STOP: SETB TING RET FRONT1:CLR QIAN CLR HOU CLR JIA CLR JIAN CLR TING INC R0 ///前进子程序 R0用于给P2口送不同的值 MOV P2,@R0 MOV A,@R1 MOV R2,A /// R2用于延时不同的时间 ACALL DELAY CJNE R0,#17H,XIA MOV R0,#10H XIA: JB QIAN,HUI //回主程序////////XIA子程序用于过度 JB HOU, HUI JB TING,HUI JNB JIA,XIA1 ACALL JIA1 XIA1: JNB JIAN,XIA2 ///XIA子程序用于过度 ACALL JIAN1 JB TING ,HUI XIA2: AJMP FRONT1 HUI : RET //返回主程序 JIA1: CJNE R1,#25H,XIA3 /// 加速 RET XIA3: INC R1 RET BACK1: CLR QIAN //后退 CLR HOU CLR JIA CLR JIAN CLR TING CJNE R0,#0