微机原理课程设计数字PID控制直流电机程序清单Word文档下载推荐.docx
- 文档编号:19353900
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:56
- 大小:28.65KB
微机原理课程设计数字PID控制直流电机程序清单Word文档下载推荐.docx
《微机原理课程设计数字PID控制直流电机程序清单Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计数字PID控制直流电机程序清单Word文档下载推荐.docx(56页珍藏版)》请在冰豆网上搜索。
保存INTR原中断处理程序入口偏移地址的变量
IM_BAKDB?
保存INTR原中断屏蔽字的变量
CS_BAK1DW?
保存定时器0中断处理程序入口段地址的变量
IP_BAK1DW?
保存定时器0中断处理程序入口偏移地址的变量
IM_BAK1DB?
保存定时器0中断屏蔽字的变量
TSDB14H;
采样周期
SPECDW56;
转速给定值
CSPDDW?
IBANDDW0060H;
积分分离值
KPPDW1060H;
比例系数
KIIDW0010H;
积分系数
KDDDW0020H;
微分系数
YKDW?
CKDB?
VADDDW?
ZVDB?
ZVVDB?
TCDB?
FPWMDB?
CK_1DB?
EK_1DW?
AEK_1DW?
BEKDW?
AAAADB?
VAADB?
BBBDB?
VBBDB?
MARKDB?
R0DW?
R1DW?
R2DW?
R3DW?
R4DW?
R5DW?
R6DW?
R7DB?
R8DW?
****MYDATA****
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;
键值表,0~F对应的7段数码管的段位值
DTABLEKDB06DH,77H,73H,30H,5EH;
存放数码管要显示的类型号,'
s'
:
实时速度'
A'
设置的速度'
P'
参数KPP'
I'
参数KII'
d'
参数KDD
SHOWTYPEDB0;
存放显示类型号,0在数码管处显示实时速度,1在数码管处显示设置速度,2在数码管处显示KPP参数,3在数码管处显示KII参数,4在数码管处显示KDD参数
LEDBITDB3;
数码的列位,0,1,2,3
KEYDB?
1或2,按下了1号键,则置1,按下了2号键则置2
TEMP1DW00FFH;
临时变量
BUFDB8DUP(?
);
缓冲区
DATAENDS
代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
主程序
MAIN:
MOVDX,OFFSETTABLE1;
显示字符串1
MOVAH,09H
INT21H
MOVAX,SPEC;
显示给定值
CALLDECSHOW
MOVDX,OFFSETENT;
回车,换行
MOVDX,OFFSETTABLE2;
显示字符串2
初始化
CALLINIT
开始处理
M1:
MOVAL,TS;
判断采样周期到否?
SUBAL,TC
JNCM1;
没到则继续等待
MOVTC,00H;
采样周期到,将采样周期变量清0
MOVAL,ZVV
MOVAH,00H
MOVYK,AX;
得到反馈量YK
CALLPID;
调用PID子程序,得到控制量CK
MOVAL,CK;
把控制量转化成PWM输出
SUBAL,80H
JCIS0
MOVAAAA,AL
JMPCOU
IS0:
MOVAL,10H;
电机的启动值不能低于10H
COU:
MOVAL,7FH
SUBAL,AAAA
MOVBBB,AL
MOVAX,YK;
将反馈值YK送到屏幕显示
MOVDI,OFFSETCSPD
MOV[DI],AX
MOVDL,0DH;
回车
MOVAH,02H
CALLKEYSCAN
CALLCLEAR
CALLDIS
MOVAH,1;
判断是否有按键按下
INT16H
JZM1;
无按键则跳回继续等待,有则退出
EXIT:
CALLDESTROY;
销毁程序,恢复现场,停止电机运转
MOVAX,4C00H
键盘扫描子程序
KEYSCANPROCNEAR
PUSHAX
PUSHDX
BEGIN:
CALLDIS;
显示刷新
CALLCLEAR;
清屏
CALLCCSCAN;
扫描按键
JNZGETKEY1;
有键按下则跳置GETKEY1
GETKEY1:
CALLDALLY1
再次扫描按键
JNZGETKEY2;
有键按下则跳置GETKEY2
JMPENDKEYSCAN;
否则跳回开始继续循环
GETKEY2:
MOVCH,0FEH
MOVCL,00H;
设置当前检测的是第几列
COLUM:
MOVAL,CH;
选取一列,将X1~X4中一个置0
MOVDX,MYIO_A
OUTDX,AL
INAL,DX
LP1:
TESTAL,01H;
是否为第1行
JNZLP2;
不是则继续判断
MOVAL,00H;
设置第1行第1列的对应的键值
JMPKCODE
LP2:
TESTAL,02H;
是否为第2行
JNZLP3;
MOVAL,04H;
设置第2行第1列的对应的键值
LP3:
TESTAL,04H;
是否为第3行
JNZLP4;
MOVAL,08H;
设置第3行第1列的对应的键值
LP4:
TESTAL,08H;
是否为第4行
JNZNEXT;
MOVAL,0CH;
设置第4行第1列的对应的键值
KCODE:
ADDAL,CL;
将第1列的值加上当前列数,确定按键值
;
CALL
CALLINPUTDEAL;
保存按键值;
KON:
扫描按键,判断按键是否弹起
JNZKON;
未弹起则继续循环等待弹起
POPAX
NEXT:
INCCL;
当前检测的列数递增
MOVAL,CH
检测是否扫描到第4列
JZKERR;
是则跳回到开始处
ROLAL,1;
没检测到第4列则准备检测下一列
MOVCH,AL
JMPCOLUM
KERR:
JMPBEGIN
ENDKEYSCAN:
POPDX
RET
KEYSCANENDP
按键处理子程序
INPUTDEALPROCNEAR
CMPAL,0
JZINPUTZERO
CMPAL,1
JZINPUTONE
CMPAL,2
JZINPUTTWO
JMPENDINPUT
INPUTZERO:
按小键盘0,执行功能转换
MOVDI,OFFSETKEY
MOVAL,0
MOV[DI],AL
MOVSI,OFFSETSHOWTYPE
MOVAL,[SI]
CMPAL,4
JZISFOUR
ADDAL,1
MOV[SI],AL
ISFOUR:
INPUTONE:
按小键盘1,根据功能键,增加参数的值
MOVAL,1
CALLKDEAL;
调用参数处理函数
INPUTTWO:
按小键盘2,根据功能刍,减少参数的值
MOVAL,2
ENDINPUT:
INPUTDEALENDP
ASPD,KPP,KII,KDD参数修改子程序
KDEALPROCNEAR
CMPAL,1;
功能1,更改速度
JZDEALASPD
CMPAL,2;
功能2,更改KPP
JZDEALKPP
CMPAL,3;
功能3,更改KII
JZDEALKII
CMPAL,4;
功能4,更改KDD
JZDEALKDD
JMPENDKDEAL
修改ASPD(设置速度)
DEALASPD:
根据按键修改SPEC
MOVSI,OFFSETKEY
如果按了小键盘1,速度就增加1
JZINCSPEC
JZDECSPEC;
如果按了小键盘2,速度就减少1
INCSPEC:
MOVSI,OFFSETSPEC
MOVDX,[SI]
INCDX;
速度加1
MOV[SI],DX
DECSPEC:
DECDX;
速度减1
修改KPP
DEALKPP:
如果按的是一号键,则跳转到INCKPP处,KPP加5
JZINCKPP
如果按的是二号键,则跳转到DECKPP处,KPP减5
JZDECKPP
INCKPP:
MOVSI,OFFSETKPP
MOVAX,5H
ADDDX,AX;
KPP加5
DECKPP:
SUBDX,AX;
KPP减5
修改KII
DEALKII:
如果按了1号键,则跳转到INCKII标号处,KII加1
JZINCKII
如果按了2号键,则中转到DECKII标号处,KII减1
JZDECKII
INCKII:
MOVSI,OFFSETKII
KII加1
DECKII:
KII减1
修改KDD
DEALKDD:
根据按键修改KDD
JZINCKDD;
如果按了1号键,则跳转到INCKDD标号处,KDD加1
JZDECKDD;
如果按了2号键,则跳转到DECKDD标号处,KDD减1
INCKDD:
MOVSI,OFFSETKDD
KDD加1
DECKDD:
KDD减1
ENDKDEAL:
CALLCLEARKEYS
KDEALENDP
清除显示管屏幕子程序
CLEARKEYSPROCNEAR
CLEARKEYSENDP
计算机屏幕显示子程序
DECSHOWPROCNEAR;
完成两位十进制数显示子程序
MOVDX,0
MOVBX,10;
计算AX/10
DIVBX
ADDAL,30H;
商+30H,即为十位数ASCII码
MOVAH,0EH
INT10H
ADDDL,30H;
余+30H,即为个位数ASCII码
MOVAH,2
DECSHOWENDP
系统总线INTR中断处理程序
MYISRPROCNEAR
PUSHCX
MOVAL,MARK
CMPAL,01H
JZIN1
MOVMARK,01H
JMPIN2
IN1:
MOVMARK,00H;
计算转速
VV:
MOVDX,0000H
MOVAX,03E8H
MOVCX,VADD
CMPCX,0000H
JZMM1
DIVCX
MM:
MOVZV,AL
MOVVADD,0000H
MM1:
MOVAL,ZV
MOVZVV,AL
IN2:
MOVDX,PCI_INTCSR;
清PCI卡控制寄存器标志位
SUBDX,19H
MOVDX,PCI_INTCSR
ADDDX,2
MOVAX,003FH
OUTDX,AX
MOVDX,INTR_OCW2;
向PC机内部8259发送中断结束命令
MOVAL,20H
OUT20H,AL
POPCX
IRET
MYISRENDP
PC机定时器0中断处理程序
TIMERISRPROCNEAR
INCTC;
采样周期变量加1
CALLKJ
CLC
CMPMARK,01H
JCTT1
INCVADD
CMPVADD,0700H;
转速值溢出,赋极值
MOVVADD,0700H
MOVMARK,00H
TT1:
MOVAL,20H;
中断结束,发EOI命令
TIMERISRENDP
PWM子程序
KJPROCNEAR
CMPFPWM,01H;
PWM为1,产生PWM的高电平
JNZTEST2
CMPVAA,00H
JNZANOT0
MOVFPWM,02H
MOVAL,BBB
RCRAL,01H
MOVVBB,AL
JMPTEST2
ANOT0:
DECVAA
MOVAL,01H;
PB0=1电机转动
MOVDX,MY8255_B
TEST2:
CMPFPWM,02H;
PWM为2,产生PWM的低电平
JNZOUTT
CMPVBB,00H
JNZBNOT0
MOVFPWM,01H
MOVAL,AAAA
MOVVAA,AL
JMPOUTT
BNOT0:
DECVBB
PB0=0电机停止
MOVDX,MY8255_B
OUTT:
KJENDP
PID子程序
PIDPROCNEAR
MOVAX,SPEC
SUBAX,YK;
求偏差EK
MOVR0,AX
MOVR1,AX
SUBAX,EK_1
MOVR2,AX
SUBAX,AEK_1;
求BEK
MOVBEK,AX
MOVR8,AX
MOVAX,R1;
求偏差变化量AEK
MOVEK_1,AX
MOVAX,R2
MOVAEK_1,AX
TESTR1,8000H
JZEK1;
若偏差EK为正数,则不需要求补码
NEGR1;
若偏差EK为负数,则求偏差EK的补码
EK1:
判断偏差EK是否在积分分离值的范围内
SUBAX,IBAND
JCII;
在积分分离值范围内,则跳转到II,计算积分项
MOVR3,00H;
若不在积分分离值范围内,则将积分项清0
JMPDDD;
计算微分项
II:
计算积分项,结果放在R3变量中(R3=EK*TS/KII)
MOVAH,00H;
其中TS和KII均为正数,所以R3的正负由EK决定
MOVCX,R1
MULCX
MOVCX,KII
MOVR3,AX
TESTR0,8000H;
判断积分项的正负
JZDDD;
为正数,则跳转去计算微分项
NEGR3;
为负数,则将积分项的结果求补码
DDD:
TESTBEK,8000H;
判断BEK的正负
JZDDD1;
为正数,则BEK不变
NEGBEK;
为负数,则求BEK的补码
DDD1:
MOVAX,BEK;
计算微分项(R4=KDD*BEK/8TS)
MOVCX,KDD
MOVAL,TS
将微分项缩小8倍,防止溢出
MOVCX,0008H
MOVCX,AX
MOVR4,AX
TESTR8,8000H;
判断微分项的正负
JZDD1;
为正数,则结果不需要求补码
NEGR4;
为负数,则微分项结果R4求补码
DD1:
MOVAX,R3;
积分项和微分项相加,结果放在R5变量中
ADDAX,R4
MOVR5,AX
JOL9;
判断溢出
L2:
MOVAX,R5
ADDAX,R2
MOVR6,AX;
R6=R5+R2=积分项+微分项+AEK
JOL3
L5:
MOVAX,R6;
计算KPP*R6
MOVCX,KPP
IMULCX
MOVCX,1000H
IDIVCX
RCLAH,01H;
判断溢出,溢出赋极值
PUSHF
POPF
JCLLL1
CMPCH,00H
JZLLL2
JMPLLL2
LLL1:
CMPCH,0FFH
MOVAL,80H
LLL2:
MOVR7,AL;
CK=CK_1+CK
ADDAL,CK_1
JOL8
L18:
MOVCK_1,AL
ADDAL,80H
MOVCK,AL
L8:
TESTR7,80H;
CK溢出处理程序
JNZL17
MOVAL,7FH;
若为正溢出,则赋给正
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 数字 PID 控制 直流电机 程序 清单