微机课程设计电机的控制课程设计文档格式.docx
《微机课程设计电机的控制课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《微机课程设计电机的控制课程设计文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
反转单步走则类似。
这个模块作为键盘主程序的子程序使用,使用键盘的第三行为功能键,操作步进电机的正反转,数字键送入NUM的值则控制电机的步数。
功能键说明:
“+”控制步进电机正向转NUM步
“-“控制步进电机反向转NUM步
“,”控制步进电机正向单步走
“.”控制步进电机反向单步走
正向走NUM步的程序流程图:
(反向走NUM步的省略)
正向单步走程序流程图:
(反向单步的省略)
四、源程序代码:
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
MOVCH,00h;
键值左移4位存CH用,先初始化
MOVCL,00h;
控制步进电机单步走用作标志
MOVDX,203H;
置8255A控制口地址
MOVAL,90H;
A口输入,C口输出
OUTDX,AL
LOOP1:
MOVDX,202H;
8255A的C口
MOVAH,00000110B
MOVAL,00000110B;
键盘第一行
OUTDX,AL
MOVDX,200h;
8255A的A口
INAL,DX;
获取列码
CMPAL,0FFH
JNELOOP2;
有键按下
列码全1无键按下扫描第二行
MOVAH,00000101B
MOVAL,00000101B
MOVDX,200h
INAL,DX
CMPAL,0FFH
JNELOOP2
第三行
MOVAH,00000011B
MOVAL,00000011B
JMPLOOP1
LOOP2:
CALLDelay;
消除抖动
JELOOP1
MOVBL,0FEH;
确定有键按下则求列值
MOVBH,0;
BH存键值
LOOP3:
CMPAL,BL;
扫描列值
JEONE
CMPBH,7;
所有列码都扫描完
JELOOP1;
重新检测按键
INCBH
ROLBL,1;
列码循环左移一位
JMPLOOP3
ONE:
CMPAH,00000110B;
第一行按键
JEONE2
CMPAH,00000101B;
第二行按键
JETWO2
CMPAH,00000011B;
第三行功能键
JETHREE2
CALLJUMP
JMPwait1
ONE2:
CALLFirst;
调用第一行处理程序
TWO2:
CALLSecond;
调用第二行处理程序
THREE2:
CALLThird;
调用第三行处理程序
wait1:
wait2:
CMPAL,0FFh
JNEwait2;
等待按键
ORG200H
NUMDB?
;
存步进电机步数
FirstPROCNEAR
开控制口
MOVAL,90h;
A口输入,C口输出
CMPCH,0;
第一次执行按键
JZCH0;
ADDBH,CH;
显示八位,
CH0:
MOVDX,201H;
B口
MOVAL,BH;
键值送AL
OUTDX,AL;
在二极管上显示BH即输入的键值
MOVDX,208H;
打开D/A
控制直流电机转速
MOVNUM,AL;
步进电机转的步数
MOVCL,4
SALBH,CL;
BH值左移四位
MOVCH,BH;
BH值送CH
MOVCL,0;
CL清零,不影响步进电机单步走
RET
FirstENDP
SecondPROCNEAR
ADDBH,8h;
扫描第二行
MOVDX,203H
MOVAL,90h
JZCH1
ADDBH,CH
CH1:
8255A的B口输出
MOVAL,BH
输出键盘的值
MOVDX,208H
步进电机步数
SALBH,CL;
左移4位
MOVCH,BH
MOVCL,0
SecondENDP
ThirdPROCNEAR
ADDBH,10H;
扫描第三行
设置方式控制字
MOVAL,90H
二极管显示为全0;
MOVAL,00h;
CMPBH,13H;
比较键值13H为”+”
JZDONE2
正转
CMPBH,12H;
12H为”-”
JZDONE3
反转
CMPBH,11H;
11H为”,”
JZDONE4
正向一步一步转
CMPBH,10H;
10H为”.”
JZDONE5;
反向一步一步转
ThirdENDP
DONE2:
CALLPROGRAM1
DONE3:
CALLPROGRAM2
DONE4:
CALLPROGRAM3
DONE5:
CALLPROGRAM4
DelayPROCNEAR;
键盘延时子程序
PUSHCX
MOVCX,1800H
NEXT:
DECCX
JNENEXT
POPCX
DelayENDP
Delay2PROCNEAR;
电机延时子程序
MOVCX,5000H
NEXT2:
JNENEXT2
Delay2ENDP
JUMPPROCNEAR
JUMPENDP
PROGRAM1PROCNEAR;
正向连续转
MOVDX,203H
MOVAL,90H
MOVDX,202H;
C口
MOVCL,NUM;
电机步数
ZHENG:
MOVAL,10H;
正向
给A相通电
CALLDelay2
DECCL;
计算已进步数
JZDONE1;
步数已完成,返回
MOVAL,20H;
输出第二拍模型
给B相通电
CALLDelay2;
延迟;
DECCL
JZDONE1
MOVAL,40H;
输出第三拍模型
给C相通电
MOVAL,80H;
输出第四拍
给D相通电
回到原点
JNZZHENG;
ABCDA循环通电
PROGRAM1ENDP
DONE1:
JMPLOOP1
PROGRAM2PROCNEAR;
反向连续转
C口
设置转的步数
FAN:
反向转动
给A通电
给D通电
给C通电
给B通电
JNZFAN;
ADCBA通电
PROGRAM2ENDP
PROGRAM3PROCNEAR;
正向单步走
CMPCL,00H;
第一次按,给A通电转一步
JZAA1;
CMPCL,01H;
CL=1,B通电
JZBB1
CMPCL,02H;
CL=2,C通电
JZCC1
CMPCL,03H;
CL=3,D通电
JZDD1
JMPLOOP1;
检测键盘
AA1:
MOVAL,10H
INCCL;
自动加一,CL为01H
JNZDONE
BB1:
MOVAL,20H
INCCL
CC1:
MOVAL,40H
JNZDONE
DD1:
MOVAL,80H
MOVCL,00H
JZDONE
JMPLOOP1
PROGRAM3ENDP
PROGRAM4PROCNEAR;
反向单步走
MOVDX,202H
MOVCL,0
CL=0,A通电
JZAA2
CL=1,D通电
JZDD2
CL=2,C通电
JZCC2
CL=3,B通电
JZBB2
AA2:
DD2:
CC2:
BB2:
MOVCL,00H;
CL重新置0
PROGRAM4ENDP
DONE:
扫描键盘
CODEENDS
ENDSTART
五、设计的问题及难点
1在实现直流电机控制速度的时候也遇到了不少问题,起先连怎么把数据送入DAC0832转换处理都不知道,后来到图书馆查阅点资料才理解了。
在这里把旧键值送高4位,新键值送低4位花了不少时间,后面实现了才发现这有点容易了。
2刚开始在实现键盘扫描功能时遇到比较多的问题,如怎么根据行码和列码来判断到底是哪个键被按下,以及键值该如何处理,数字键和功能键又怎么区分等等,在询问同学和老师的过程中了解到了实现的一些方法。
3实现步进电机单步走的时候不知如何控制什么时候给哪相通电,后面想到用一个寄存器才标志该给哪个相通电,实现了单步走的功能。
六设计的不足:
控制直流电机的时候,按下数字键,速度不应该马上变化,可以设置一个功能键,实现先按下数字键先显示在B口,不直接送入DAC0832,等检测到按下那个功能键后才送进去,改变电机速度。