一、设计任务书设计内容:用80C51单片机设计一个步进电机控制器设计要求:1.用8015设计一个四相步进电机。
2.可控制步进电机的启动与停止,正转与反转。
3.10档速度调节。
4.点动控制。
5.可显示电机运行参数。
二、设计总体方案(一)控制方式的选择控制主要用于电机速度和方向的转换。
控制方式有按键控制和开关控制两种。
按键较开关而言,操作更加简便,故选按键控制。
方案一:独立按键。
独立按键可自由连接,线路简单。
方案二:编码式键盘。
编码式键盘的按键接触点接于74LS148芯片。
当键盘上没有闭合时,所有按键都断开,当某一键闭合时,该键对应的编码由74LS148输出。
本次设计所需按键不多,不需要采用复杂编码,考虑硬件条件、线路连接和经济性等方面,选择方案一。
(二)电机电路设计方案的选择由于条件的限制,对于电机的选择只能是实验台上最小步距角18°的电机,其中已包含了驱动电路。
(三)单片机的选择方案一:AT89C51高性能8位单片机,内部集成CPU、存储器、寄存器、I/O接口,从而构成较为完整的计算机,价格便宜。
方案二:C8051F005单片机,该单片机是完全集成的混合信号系统及芯片,具有8051兼容的微控制器内核,与MCS-51指令集完全兼容。
除了具有标准8052的数字外设部件,片内还继承了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,执行速度快,但价格较贵。
本次课程设计是在仿真环境下进行,没有太过考虑单片机选择的问题,但就设计本身来讲,从物美价廉的角度考虑,选择方案一较合适。
(四)显示方案的选择方案一:采用LED数码管。
LED数码管是轮流现实的,其利用人烟的视觉暂留特性,使人感觉不到数码管闪动,看到每只数码管都常亮。
利用其显示必须不停给数码管数据输入口循环赋值,显示内容较多,编程和接线较为复杂。
方案二:采用LCD1602液晶显示器。
LCD1602具有功率小,效果明显,变成容易等优点,且它最多能显示2×16个字符,可以轻松满足设计要求。
由上可知,LCD1602液晶显示器的优点突出,故选择方案二。
(五)软件部分的选择软件部分的选择主要是指编程语言的选择,编译调试工具根据设计平台选择伟福软件。
编程语言主要有以下两种方案。
方案一:采用C语言编程。
C语言是一种结构化的高级语言,编程灵活,可移植性强,但占用资源多,执行效率低。
方案二:采用汇编语言进行编程,。
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言,占用资源少,程序执行效率高,但不易移植。
从一般编程所遵循的规律以及设计条件考虑,综合分析以上两种方案,最终选择方案二。
三、硬件设计该电机控制器采用单片机作为数据处理及控制核心,并上电机的驱动电路,通过单片机的P2口控制开关的操作,P0口来控制电机的脉顺序,P3口来控制LED数码管的显示,总体框图如图1所示。
图1 步进控制器硬件总体框图主要器件及简介如下:单片机AT89C51本次设计采用伟福仿真器模仿AT89C51环境。
由上面介绍可知,AT89C51为一款典型的80C51单片机,具有8位数据总线、16位地址总线、128字节片内RAM和4K 的片内ROM以及4个并行I/O口等单元。
其连接电路如图2所示。
晶振选择为11.0592MHz,以产生精确的时钟频率。
P0和P2口作为16位地址端口,P0口也作为数据端口,P1口用于LCD及按键的控制,P2.7口控制片外RAM。
图2 A T89C51接线图步进电机该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图3是该四相反应式步进电机工作原理示意图。
图3 四相步进电机步进示意图开始时,开关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相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图4.a、b、c所示:a. 单四拍b. 双四拍c八拍图4.步进电机工作时序波形图LED数码管显示LED数码管为7段数码管显示模块,具有共阴极和共阳极两种,如图5所示。
数据由单片机P3口给出。
图5 数码管原理线路接线图图6 线路接线图四、软件设计软件流程图如图7图7 软件流程图源程序清单ORG 0000HLJMP MAINORG 0040HMAIN: MOV @R1,#00HJNB P2.2,ZDCHU ;电机电动JNB P2.5,ZHENGC;电机正转JNB P2.6,EE;电机反转JNB P2.7,STOP;电机停止JMP MAINEE: LJMP FANC;电机电动的子程序ZDCHU:MOV R7,#1MOV P3,#0A1HCALL DELAY1DIAN:MOV P0,#09HCALL DELAY1MOV P0,#03HCALL DELAY1MOV P0,#06HCALL DELAY1MOV P0,#0CHCALL DELAY1DJNZ R7,DIANJNB P2.2,$JMP MAIN;电机停止的子程序STOP:MOV P3,#8CHCALL DELAY1MOV P0,#00HJNB P2.2,ZDCHUJNB P2.5,ZHENGJNB P2.6,FANJMP NEXT1NEXT1:LJMP STOP;电机正转的子程序ZHENGC:MOV P0,#00HZHENG:MOV P0,#09HCALL DELAYMOV P0,#03HCALL DELAYMOV P0,#06HCALL DELAYMOV P0,#0CHCALL DELAYJB F0,TIAO ;F0为加的符号位,当加完一次用符号位来判断开关的状态JNB P2.0,JIATIAO:JB P2.0,QINGLNEXT2:JB CY,JTIAOJNB P2.1,JIANJTIAO:JB P2.1,JQINGLNEXT3:JNB P2.6,FANJNB P2.7,STOPFH: JMP ZHENGQINGL:CLR F0 ;符号位清零JMP NEXT2JQINGL:CLR CY l;CY为正转减速符号位JMP NEXT3;反转子程序FANC:MOV P1,#0FEHFAN :MOV P0,#0CHCALL DELAYMOV P0,#06HCALL DELAYMOV P0,#03HCALL DELAYMOV P0,#09HCALL DELAYJB OV,FTIAO;OV为反正加速符号位JNB P2.3,FJIAFTIAO:JB P2.3,FQINGLFJIAN3:JB AC, FJTIAO;AC为反正减速符号位JNB P2.4,FJIANFJTIAO:JB P2.4,FJQINGLFJIAN2:JNB P2.5,ZHENGJNB P2.7,FFFH1:LJMP FANFF:LJMP STOPFQINGL:CLR OVJMP FJIAN3FJQINGL:CLR ACJMP FJIAN2;正转加速子程序JIA: CJNE @R1,#0AH,JIA1 ;控制10档速度JMP ZHENGJIA1: INC @R1 ;控制延时子程序变量自加1 SETB F0JMP FH;反正加速子程序FJIA: CJNE @R1,#0AH,FJIA1JMP FANFJIA1: INC @R1MOV A,@R1SETB OVJMP FH1;正转减速子程序JIAN: CJNE @R1,#01H,JIAN1JMP ZHENGJIAN1:DEC @R1SETB CYJMP FH;反正减速子程序FJIAN: CJNE @R1,#01H,FJIAN1JMP FANFJIAN1:DEC @R1SETB ACJMP FH1DELAY:MOV R4,AMOV DPTR,#TABMOVC A,@A+DPTRMOV R6,A;通过改变延时来改变电机的转速PUSH AMOV A,R4JNB P2.6,AAMOV DPTR,#TAB1BB: MOVC A,@A+DPTRMOV P3,APOP ACALL DELAY1D1: MOV R7,#50DL: NOPNOPDJNZ R7,DLDJNZ R6,D1MOV A,@R1RETAA: MOV DPTR,#TAB2JMP BBDELAY1:MOV R4,#5D1_2: MOV R5,#249DL2: NOPNOPDJNZ R5,DL2DJNZ R4,D1_2RETDELAY2:MOV R6,#255D1_3: MOV R7,#255DL3: NOPNOPDJNZ R7,DL3DJNZ R6,D1_3RETDELAY3:MOV R4,#255D1_4: MOV R5,#249DL4: NOPNOPDJNZ R5,DL4DJNZ R4,D1_4RETTAB:DB 130,130,120,110,100,90,80,70,60,50,40,30,25TAB1:DB 086H,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80HDB 90H,88H,83H,0C6H,0A1H,86H,8EH,8CH,7FH,0FFHTAB2:DB 08EH,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80HDB 90H,88H,83H,0C6H,0A1H,86H,8EH,8CH,7FH,0FFHEND五、调试过程调试过程中,首先遇到的第一难点就是在加速过程中怎样来使每次开关拨一次档位加1,刚开始的时候如果没有设置的话,电机的档位调速会变的很不均匀,呈现一种乱跳乱加减速的现象,观察程序发现,由于主程序每次循环执行,当调用加速子程序的时候,会每次自动加1,所以为了克服这个困难真的是花了很长的时间,后面经过各种调试,发现可以利用符号位来置位从而是下次循环跳出执行加速的子程序语句,这样可以很均匀的发现每拨一次开关就可以换一个档位,直到10档结束,用CJNE语句可以实现。
碰到的第二个问题便是怎样才能将电机的各种参数可以实时显示出来,刚开始由于对LCD液晶的不熟悉所以选择了用LED数码管来显示,但在使用过程中发现,用查询法的方法来写程序,要使同时6个数码管发亮并且显示不同的数字遇到了困难,几经调试还是不成,便改用LCD液晶,对于液晶的显示还是比较容易,但是当发现将液晶和电机程序加减速合并起来的时候遇到了困难,液晶可以显示加减的档位数,但是电机却没有改变转速,经过了很久的怒路,包括设断点,单步执行,自动跟步的方法还是没能调试出来,自己能力也有限,还是得多加努力,最终由于时间的关系,最后还是选择了相对而言较简单的数码管来显示,并且由于自己能力的原因,还是只能用单个数码管显示。