微机课程设计报告小型步进电机控制系统设计Word文档格式.docx
- 文档编号:16494404
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:36
- 大小:374.50KB
微机课程设计报告小型步进电机控制系统设计Word文档格式.docx
《微机课程设计报告小型步进电机控制系统设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机课程设计报告小型步进电机控制系统设计Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
二、设计的题目名称及要求
设计题目:
小型步进电机控制系统设计。
设计要求:
(1)分别用C语言和汇编语言编程完成硬件接口功能设计;
(2)基于80x86微机接口硬件电路设计调试;
(3)控制功能要求:
小键盘给定分段速度,数码管显示当前步进电机启动与停止、方向、速度信息;
(4)具有本地与远程(串行方式下)功能。
三、实验设备
PC机一台(装有TDPIT软件)、唐都AEDK8688ET实验箱。
使用硬件:
8086PC,8255芯片,键盘数码管,步进电机驱动电路,步进电机。
系统设计:
键盘采用实验板提供的4*4键盘,使用4个数码管实时显示系统当前状态。
四、设计的思想和实施方案
4.1.2步进电机的工作原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。
使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
步进电机动态指标及术语:
1、步距角精度:
步进电机每转过一个步距角的实际值与理论值的误差。
用百分比表示:
误差/步距角*100%。
不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。
2、失步:
电机运转时运转的步数,不等于理论上的步数。
称之为失步。
3、失调角:
转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。
4、电机正反转控制:
当电机绕组通电时序为AB-BC-CD-DA或()时为正转,通电时序为DA-CA-BC-AB或()时为反转。
驱动控制系统组成:
使用、控制步进电机必须由环形脉冲,功率放大等组成的控制系统,其方框图如下:
脉冲信号的产生:
脉冲信号一般由单片机或CPU产生,一般脉冲信号的占空比为0.3-0.4左右,电机转速越高,占空比则越大。
下图步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图1是该四相反应式步进电机工作原理示意图。
图1四相步进电机步进示意图
开始时,开关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方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a.单四拍b.双四拍c八拍
图2.步进电机工作时序波形图
4.1.28255A的功能简介
Intel8086/8088系列的可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。
它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0:
基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1:
选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2:
双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
4.1.3设计思想和实施方案
初步设计的模块图如下:
进一步的设计图:
本次设计,对8255的使用是这样的:
8255工作于方式0,A口低四位接键盘及数码管显示单元的X1~X4;
C口低四位接键盘及数码管显示单元的Y1~Y4;
C口高四位接步进电路的驱动电路,使电机转动起来;
B口接数码管的A、B、C、D、E、F、G和DP,以使数码管显示电机的转向和转速。
8255的A口高四位本次课程设计没有用到。
此外,本次设计还用到了实验箱中的键盘及数码管显示单元:
方向键:
控制步进电机运行方向,无论电机处于运行或停止状态,每按下一次,电机转动方向反向;
运行/暂停键:
控制电机运行与否。
电机转动时按下,电机暂停,当前电机运行参数不变,再次按下时,电机继续按暂停前参数运行;
停止键:
无论电机处于任何状态,按下此键,电机停止转动,电机各运行参数复位,默认参数为:
“顺时针,停止状态,1档”;
档位键:
无论电机处于任何状态,均可设定电机档位。
数码管显示信息:
左起第一个数码管显示当前电机的运行状态:
S(Stop)表示当前电机为停止状态;
E(Enable)表示当前电机为运行状态;
P(Pause)表示当前电机为暂停状态。
第二个数码管未使用,只有小数点点亮。
第三个数码管显示电机运行方向:
C(Clockwise)表示电机运行方向为顺时针;
A(Anti-clockwise)表示电机运行方向为逆时针。
第四个数码管显示电机的档位:
1、2、3、4分别表示1、2、3、4档。
键盘数码管内部连线如下图:
五、硬件电路原理图
图步进电机控制系统硬件电路原理
如上图示:
该原理图涉及到系统总线、可编程外围接口芯片8255、键盘及数码管显示单元和步进电机及其驱动电路.8255的D0~D7依次接系统总线的XD0~XD7,A1和A0依次接系统总线的XA3和XA2;
WR和RD依次接系统总线上的XIOW和XIOR;
8255的CS接系统总线的IOY0,8255的A口低四位PA0~PA4依次接小键盘的X1~X4(列);
C口低四位PC0~PC3分别接小键盘的Y1~Y4(行);
C口高四位PC4~PC7依次接驱动电路的A、B、C和D;
B口PB0~PB7分别接数码管的A、B、C、D、E、F、G和DP;
A口高四位没用到。
图步进电机模块
此模块的主要功能是通过接收8255的C口输入信号来控制步进电机的转动,A,B,C,D分别代表不同的四个相位,分别接入到PC0,PC1,PC2和PC3,实现转动控制。
图LED模块
六、典型程序模块及典型编程技巧分析
1.主函数模块
主函数MAIN主要是综合调用各子函数,以完成对四项八拍步进电机转速
和转向的控制,并在数码管上实时显示电机的运行状态、转向和转速档位。
本次设计的电机转速分为四个档,分为一二三四档,在数码管的档位部分显示,分别显示1,2,3,4。
当程序开始运行时,数码管上显示初始状态:
S(停止),
小数点(该位不用)
C(顺时针)
1(速度为1档)
小键盘“0”控制电机转向:
程序默认初始态为C(顺时针);
按下该键,电机可以切换转向,C(Clockwise)表示电机运行方向为顺时针;
无论电机处于运行或停止状态,每按下一次,电机转动方向反向。
小键盘“1”控制电机开始和暂停两个状态之间的切换:
电机转动时按下,电机暂停,当前电机运行参数不变,再次按下时,电机继续按暂停前参数运行。
小键盘“2”控制电机的停止复位(S:
Stop):
按下该键,电机停止转动,并且恢复到初始参数状态。
小键盘“4”“5”“6”“7”控制电机的四个转速档位:
当按下这四个键时,分别是电机运行在1,2,3,4,转速档位。
即实现了电机的调速,并且可以实现任意档速的切换。
2.键盘扫描与显示子程序模块
此子函数是用来扫描小键盘哪行哪列有键按下,当确定某行某列有键按下时,再把相应的键值保存起来。
小键盘有四行四列共16个按键,第一行从左到右依次是0~3;
第二行从
左到右依次是4~7;
第三行从左到右依次是8~B;
第二行从左到右依次是C~F。
为了实现判断功能,在C语言中设置三个标志位:
1.运行状态标志MODE:
0=停止(Stop);
1=运行(Enable);
2=暂停(Pause)。
2.方向标志DIR(Direction):
0=逆时针(Anti-clockwise);
1=顺时针(Clockwise)。
3.档位标志GRD(Grade):
1=1档;
2=2档;
3=3档;
4=4档。
数组a[]中存放数码管的编码,一次为:
“S”、“E”、“P”、“A”、“C”、“1”、“2”、“3”、“4”、“.”。
数组b[]中分别存放四个数码管应显示的编码在数组a[]中对应的位置,例如:
b[]的初值为:
0,9,4,5,则数码管会对应显示:
“S.C1”。
在汇编程序中,用DTABLE1中存放数码管的编码。
[SI][SI+2][SI+4][SI+6]中分别存放四个数码管应显示的编码在DTABLE1中对应的位置。
与C程序中不同,汇编程序中取消了dir、mode、grd三个独立的变量,而是直接用[SI][SI+4][SI+6]来代表,即:
[SI]=0时,表示停止状态;
[SI]=1时,表示运行状态;
[SI]=2时,表示暂停状态;
[SI+4]=3时,表示方向为逆时针;
[SI+4]=4时,表示方向为顺时针;
[SI+6]=5时,表示档位为1档;
[SI+6]=6时,表示档位为2档;
[SI+6]=7时,表示档位为3档;
[SI+6]=8时,表示档位为4档。
首先保证使计数值i在0-7之间变化,若正转,则递增;
反转则递减。
判断是否运行,如运行,则跳出循环,给步进电机发驱动脉冲。
3.保存键值子程序
此函数完成在按下小键盘按键后,将其相应的电机运行状态、转向和转速数值保存起来,以备其它子程序使用。
4.扫描是否有按键闭合子程序
此子函数用来扫描小键盘是否有键按下。
通过8255的C口高四位,使X1~X4(列)全选通,然后由8255的C口低四位判断各列所对应的行是否有键安下,无任何键按下则C口低四位读入的全是“1”,若有键按下则C口低四位读入的对应行是“0”,其余全是“1”,经取反(NOT)后扫描小键盘的子程序CCSCAN的功能变为:
若小键盘无键按下则AL寄存器数据为“0”;
若小键盘有键按下则AL寄存器数据为非“0”。
为减少引线,键盘采用矩阵式。
键盘的识别采用行扫描法,程序使某行为低电平,则说明行列交叉点处的键被按下,然后,再具体确定按下的是哪个键。
为此先使所在行输出为0,再检查列线是否有0。
如果有零的话,此时由于不能确定闭合键所在的行,于是再用行扫描法来具体定位。
如果读得数据全部为1,则说明无键闭合。
硬件上将8255端口C的上、下半部分分别用作键盘的行线和列线。
用电平逻辑开关输出高低电平来代替键盘按键。
5.显示键值子程序
将保存示值子函数中保存下的电机运行状态、转向和转速值送到数码管上显示。
数码管的段位顺序如右图所示:
一般来说在一个字节中按照abcdefgdp的顺序放置字型码,比如在一个“共阴极”数码管上要显示“1”,则b、c段需被点亮,因此在段选线中写入60H。
对应规则:
a----->
D7
b----->
D6
c----->
D5
d----->
D4
e----->
D3
f----->
D2
g----->
D1图3-2数码管显示
dp---->
D0
LED显示器的显示方法有两种——静态显示法和动态扫描显示法。
静态显示就是每一个显示器各笔画段都要独占具有所存功能的输出口线,CPU把要显示的字符代码送到输出口上,就可以是显示器显示所需的数字后符号。
但由于它站用的I/O口线较多,硬件成本高。
所以我们选用了动态扫描显示法。
6.清除数码管显示子程序
将段位置0即可清除数码管显示,即将00H分别送入A口(驱动LED灯和B口(驱动数码管)便可实验此功能
7.软件延时子程序
延时子函数,可供别的程序调用以实现较好的显示和操作效果。
读取键盘时要有一定的延时,来跳过键盘在刚按下时产生的抖动。
判断档位,进行相应的延时,注意延时的时候也应每隔一定时间调用keyscan()键盘扫描及显示程序,已保证及时响应键盘输入,和刷新数码管,使数码管常亮。
应注意调用子程序前要将CX与AX寄存器的内容入栈进行保护。
七、课程设计中遇到的问题及解决方法
在本次课程设计过程中,我遇到了一下问题:
首先,在显示模块中,在做数码管显示时,每次可以输出四位信息,而且要输出的字符须转化为相应的ASCII才行,否则就不能输出想要的东西。
显示模块的调试一般是程序问题,硬件连接很简单,一般不会出错,我在调试时,开始没有初始化8255,导致结果不能输出。
再就是相应的端口一定不能定义错误。
这在显示模块调试中应该多注意。
在这里还有一个比较难解决的问题,即调用了数码管显示程序而却看不到数码管有示数,这主要是调用数码管显示子函数的频率不够高,可以把数码管显示子函数换个位置,或者是多调用几次就可以解决了。
至于数码管好像是全亮,情况正好相反,是数码管显示子函数调用的频率过高,把数码管显示子函数换个位置,或者是在关键位置调用一下延时函数就可以解决了。
还有,DIS和CLEAR成对调用可使数码管有个较好的显示效果。
在刚开始编程时,各种功能大部分是由主程序来完成的。
由于主程序过于复杂,可读性不高。
使得在以后的程序的调试中遇到了很大的麻烦。
后来把主程序的部分功能转化成子程序来实现,并在一些重要的地方增加了注释,使的程序的可读性大大加强。
调试也变的比较简单了。
其次,在使用小键盘时容易死机。
出现死机的原因有很多,有时候同一个程序换台机子运行就会死机,有时候同一台机子同一个程序运行多次就会死机,不过总的来看死机的出现多少是和所编写的程序有关,记得我以前用小键盘时就是很容易就死机了,不过在这次的课程设计中我把所有的和小键盘有关的程序都用了子函数代替,大大简化了主程序的结构,这样就基本再也没发生过死机现象了。
再者,当小键盘按下不松时电机也停止转动这种情况出现在电机的加速、减速和改变转向中,这主要是在原有的keyscan程序中有一段判断按键是否弹起的程序,将此段换成一个合适的软件延时便可以起到很好的效果(按键不松时可以连续的加速和减速)。
再就是寄存器的使用问题。
在编程时,子程序的调试也是相当重要,由于子程序不可避免的使用AX\BX\CX\DX通用寄存器一个或几个。
使得原主程序中的通用寄存器的内容很容易被覆盖,对子程序中所有的通用寄存器出入栈即可以避免上诉的问题,不用考虑使用的是哪几个寄存器,使用起来又比较简单方便。
数码转换问题,首先查找许多相关的典型程序,例如:
十六位二进制数转换为10进制BCD码,可将AX中的二进制数先后除以1000,100,10,每次除法所得的商,即是BCD的千位、百位和十位数,余数是个位。
TRAN:
PUSHCXSHLDX,CL
PUSHDXXCHGAL,AH
SUBDX,DXSUBAH,AH
MOVCX,1000MOVCL,10
DIVCXDIVCL
XCHGAX,DXADDDL,AL
MOVCL,4MOVCL,4
SHLDX,CLSHLDX,CL
MOVCL,100ADDDL,AH
DIVCLMOVAX,DX
ADDDL,ALPOPDX
MOVCL,4POPCX
而在算术运算方面也遇到了不少的问题,由于设计过程中存在着小数所以很多时候总会出现算术方面错误,具体表现为结果的溢出或者结果小数点位置错误。
解决的方法通常是先将所要计算的数值乘以10、100等使得数值为整数,然后再进行计算,而在结果输出时再除以相映的数值从而实现小数的算术运算功能,而不需要采用定义浮点型去计算小数以避免出现数值定义的错误。
另一个常见的错误就是自定义存储空间之间的数值存放,因为在许多时候总是需要将结果保存在某一段存储空间里面,由于对存储空间的定义使得其大小范围各有不同,所以对其赋值时总是会出现溢出或数值转换的错误。
而在子程序调用以循环方面存在的问题是指针的计数以及标志位清零或置1搞错从而使子程序运算错误或者进入死循环等。
所采取的解决方法是对指针计数值在各个部分运算结束后进行清零以保证指针初值的正确。
最后的问题就是DOS系统功能调用和BIOS中断调用,因为本课题设计中要实现软件时钟,所以需要对软件延迟以及中断调用有一定的了解,对此在设计时查阅了一些相关的软件中断命令。
当个模块都调试成功后,即可合成到一起运行。
本系统电机的速度可以通过速度增减键来控制。
通过验证各按键是否被有效采用,来检验该系统是否正确的完成了指定的功能。
八、实验程序的流程图
主流程图:
扫描与显示流程图:
键盘显示子程序流程图:
键盘扫描子程序流程图:
九、汇编程序清单及程序注释
;
步进电机实验
IOY0EQU0e400H;
片选IOY0对应的端口始地址
MY8255_AEQUIOY0+00H*4;
8255的A口地址
MY8255_BEQUIOY0+01H*4;
8255的B口地址
MY8255_CEQUIOY0+02H*4;
8255的C口地址
MY8255_MODEEQUIOY0+03H*4;
8255的控制寄存器地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
DTABLE1DB6DH,79H,73H,77H,39H,06H,5BH,4FH,66H,80H
DTABLE3DB10H,30H,20H,60H,40H,0C0H,80H,90H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,3000H
MOV[SI],00H
MOV[SI+2],09H
MOV[SI+4],04H
MOV[SI+6],05H
MOV[SI+8],01H
MOVDX,MY8255_MODE;
初始化8255工作方式
MOVAL,81H;
方式0,A口、B口输出,C口低4位输入
OUTDX,AL
KAISHI:
MOVSI,3000H
MOVDH,[SI+8]
CMPDH,8
JAZHI1
CMPDH,1
JBZHI8
JMPJIXU
ZHI1:
MOV[SI+8],01H
ZHI8:
MOV[SI+8],08H
JIXU:
CALLKEYSCAN
MOVAH,1;
判断是否有按键按下
INT16H
JZSFRUN;
无按键则跳回继续循环,有则退出
QUIT:
MOVAX,4C00H;
结束程序退出
INT21H
SFRUN:
MOVDH,[SI]
CMPDH,01H
JNZJIXU
MOVDH,[SI+4]
CMPDH,04H
JNZZIJIAN
INC[SI+8]
JMPRUN
KAISHI1:
JMPKAISHI
ZIJIAN:
DEC[SI+8]
RUN:
MOVAL,[SI+8]
MOVBX,OFFSETDTABLE3
ANDAX,00FFH
ADDBX,AX
DECB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 课程设计 报告 小型 步进 电机 控制系统 设计