文档详情

小型直流电机闭环调速系统PID控制器设计

m****
实名认证
店铺
DOCX
308.39KB
约50页
文档ID:155298569
小型直流电机闭环调速系统PID控制器设计_第1页
1/50

微机原理及接口技术课程设计报告小型直流电机闭环调速系统PID控制器设计目录一、课程设计的目的及意义1二、课程设计的题目与要求1三、基本原理11. PID算法12. 霍尔元件测速原理4转速调节原理5四、基于80x86芯片微机接口控制电路的设计61. 实现功能62. 设计思想73. 模块介绍(附流程图)7(1) 电机控制模块71) 测速模块9PWN波产生模块10PID计算模块11(2) 键盘扫描与显示单元141)键盘扫描模块14五、基于80c51单片机控制电路的仿真设计181. 实现功能182. 设计思想183. 模块介绍19(1) 测速反馈模块19(2) PID模块19(3) 键盘扫描模块20相关流程图21六、结束语23附件:程序代码一、课程设计的目的及意义通过本次课程设计要掌握80x86、8255、8251等芯片及基本输入输出电路的使用方法,灵活运用课本知识,加深对所学的知识理解,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解,学会利用课本知识联系实际应用及编程同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后设计时逻辑更加清晰。

二、课程设计的题目与要求1. 题目小型直流电机闭环调速系统PID控制器设计2. 设计要求(1)设计基于80x86微机接口控制电路;(2)分别用C语言或汇编语言或VC+编程完成硬件接口功能设计;(3)程序功能要求:电机速度由按键分段给定或电位器连续给定,计算机屏幕和数码管同步跟踪显示当前给定速度和电机实际运行速度,实现PID参数显示和修改4)具备本地及远程(串行方式)监控功能三、基本原理1. PID算法及相关内容在DDC系统中,用计算机取代了模拟器件,控制规律的实现是由计算机软件来完成的因此,系统中数字控制的设计,实际上是计算机算法的设计由于计算机只能识别数字量,不能对连续的控制算式直接进行运算,故在计算机控制系统中,首先必须对控制规律进行离散化的算法设计为将模拟PID控制规律按式(1.2)离散化,我们把图1.1中r(t)、e(t)、u(t)、c(t)在第n次采样的数据分别用r(n)、e(n)、u(n)、c(n)表示,于是式(1.1)变为:e(n)=r(n)-c(n)(1.4)当采样周期T很小时dt可以用t近似代替,de(t)可用e(n)e(n1)近似代替,“积分”用“求和”近似代替,即可作如下近似(1.5)de(t)e(n)e(n1)dtTt0e(t)dte(i)Ti1(1.6)这样,式(1.2)便可离散化以下差分方程Tntu(n)Kp{e(n)e(n)D[e(n)e(n1)]}u°T|i1T(1.7)上式中U0是偏差为零时的初值,上式中的第一项起比例控制作用,称为比例(P)项Up(n),即Up(n)Kpe(n)(1.8)第二项起积分控制作用,称为积分(I)项ui(n)即TnU|(n)Kpe(i)(1.9)TIi1第三项起微分控制作用,称为微分(D)项ud(n)即ud(n)Kp;d[6(n)e(n1)](1.10)这三种作用可单独使用(微分作用一般不单独使用)或合并使用,常用的组合有:P控制:u(n)up(n)u。

1.11)PI控制:u(n)up(n)ui(n)Uo(1.12)PD控制:u(n)up(n)Ud(n)Uo(1.13)PID控制:u(n)up(n)ui(n)Ud(n)Uo(1.14)式(1.7)的输出量u(n)为全量输出,它对于被控对象的执行机构每次采样时刻应达到的位置因此,式(1.7)又称为位置型PID算式由(1.7)可看出,位置型控制算式不够方便,这是因为要累加偏差e(i),不仅要占用较多的存储单元,而且不便于编写程序,为此对式(1.7)进行改进根据式(1.7)不难看出u(n-1)的表达式,即Tn1Tu(n1)Kp{e(n1)e(n)D[e(n1)e(n2)]}u°(1.15)T|i1T将式(1.7)和式(1.15)相减,即得数字PID增量型控制算式为u(n)u(n)u(n1)Kp[e(n)e(n1)]Qe(n)K°[e(n)2e(n1)e(n2)](1.16)从上式可得数字PID位置型控制算式为u(n)Kp[e(n)e(n1)]Ke(n)Kd[&n)2e(n1)e(n2)]u1.17)式中:Kp称为比例增益;KiKp—称为积分系数;TiKdKp—d称为微分系数⑴数字piD位置型示意图和数字piD增量型示意图分别如图所示:数字piD位置型控制示意图数字PID增量型控制示意图霍尔元件测速原理霍尔传感器是对磁敏感的传感元件,由磁钢、霍耳元件等组成。

测量系统的转速传感器选用SiKO的NJK-8002D的霍尔传感器,其响应频率为100KHz额定电压为5-30(V、检测距离为10(mrho其在大电流磁场或磁钢磁场的作用下,能测量高频、工频、直流等各种波形电流该传感器具有测量精度高、电压范围宽、功耗小、输出功率大等优点,广泛应用在高速计数、测频率、测转速等领域输出电压4〜25V,直流电源要有足够的滤波电容,测量极性为N极安装时将一非磁性圆盘固定在电动机的转轴上,将磁钢粘贴在圆盘边缘,磁钢采用永久磁铁,其磁力较强,霍尔元件固定在距圆盘1-10mm处当磁钢与霍尔元件相对位置发生变化时,通过霍尔元件感磁面的磁场强度就会发生变化圆盘转动,磁钢靠近霍尔元件,穿过霍尔元件的磁场较强,霍尔元件输出低电平;当磁场减弱时,输出高电平,从而使得在圆盘转动过程中,霍尔元件输出连续脉冲信号这种传感器不怕灰尘、油污,在工业现场应用广泛霍尔器件是由半导体材料制成的一种薄片,器件的长、宽、高分别为I、b、d若在垂直于薄片平面(沿厚度d)方向施加外磁场E,在沿1方向的两个端面加一外电场,则有一定的电流流过由于电子在磁场中运动,所以将受到一个洛仑磁力,其大小为:fqVB式中:f—洛仑磁力,q—载流子电荷,V—载流子运动速度,E—磁感应强度。

这样使电子的运动轨迹发生偏移,在霍尔元器件薄片的两个侧面分别产生电子积聚或电荷过剩,形成霍尔电场,霍尔元器件两个侧面间的电位差UH称为霍尔电压霍尔电压大小为:UHRHIB/d(mV)式中:Rh—霍尔常数,d—元件厚度,E—磁感应强度,I—控制电流设Khrh/d,则uh=khIB/d(mV)Kh为霍尔器件的灵敏系数(mV/mA/T),它表示该霍尔元件在单位磁感应强度和单位控制电流下输出霍尔电动势的大小应注意,当电磁感应强度E反向时,霍尔电动势也反向图2.3为霍耳元件的原理结构图若控制电流保持不变,则霍尔感应电压将随外界磁场强度而变化,根据这一原理,可以将两块永久磁钢固定在电动机转轴上转盘的边沿,转盘随被测轴旋转,磁钢也将跟着同步旋转,在转盘附近安装一个霍尔元件,转盘随轴旋转时,霍尔元件受到磁钢所产生的磁场影响,输出脉冲信号传感器内置电路对该信号进行放大、整形,输出良好的矩形脉冲信号,测量频率范围更宽,输出信号更精确稳定,已在工业,汽车,航空等测速领域中得到广泛的应用其频率和转速成正比,测出脉冲的周期或频率即可计算出转速2. 转速调节原理PW啲占空比决定输出到直流电机的平均电压.PW不是调节电流的.PWM啲意思是脉宽调节,也就是调节方波高电平和低电平的时间比,一个20%占空比波形,会有20%的高电平时间和80%的低电平时间,而一个60%占空比的波形则具有60%勺高电平时间和40%的低电平时间,占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高•如果占空比为0%那么高电平时间为0,则没有电压输出.如果占空比为100%那么输出全部电压.所以通过调节占空比,可以实现调节输出电压的目的,而且输出电压可以无级连续调节.在使用PWM控制的直流无刷电动机中,PWM控制有两种方式:(1)使用PWM信号,控制三极管的导通时间,导通的时间越长,那么做功的时间越长,电机的转速就越高。

2)使用PWM6制信号控制三极管导通时间,改变控制电压高低来实现直流电机单元由DC12V1.1W的直流电机,小磁钢,霍尔元件及输出电路构成PWM示意图如图1-1-3所示通过调节T1的脉冲宽度,改变T1的占空比,从而改变输出,达到改变直流电机转速的目的IHt轉g律时asm吃时里ciT=T_^lueXTOS€罔期T1=Tt_valL]eXTOSC髙电平牌期图1-1-3PWM示意图利用8255的PB产生脉冲信号作为控制量,经驱动电路驱动电机运转霍尔测速元件输出的脉冲信号记录电机转速构成反馈量在参数给定的情况下,经PID运算,电机可在控制量的作用下,按PC机累加器给定的转速运转通过PC的0号通道,设置为输出1ms方波,作为采样时钟,PB)产生PWN脉冲计时及转速累加,系统总线上INTR中断用于测量电机转速1. 四、基于80x86芯片微机接口控制电路的设计实现功能1 )实现小型直流电机闭环PID控制调速;2 )使用汇编语言完成硬件接口功能的设计;3 )使用小键盘实现现场设置设定速度v、比例参数p、积分参数i、微分数d;4 )使用4位数码管实现现场显示实时速度s、设定速度v、比例参数p、积分参数i、微分参数d;2. )实现控制台屏幕显示设置速度v与实时速度s设计思想整个系统可以的划分为两部分,一部分是直流电机闭环PID调速单元,一部分是键盘扫描和数码管显示单元。

直流电机闭环PID调速单元运用PID算法通过对P、I、DS、V参数的运算得出PID控制量,并将PID控制量转化为PWMS过8255单元输出给直流电机从而实现对直流电机的控制键盘扫描单元通过对键盘的重复扫描读取用户的输入数据P、I、DV并进行相应的存储,数码管显示单元分析当前选择状态、读取P、I、DSV参数并通过基本输入输出单元进行相应的显示具体实施过程:将电机闭环调速的PWM波产生模块、PID控制量产生模块、测速生成模块、初始化模块和键盘扫描和数码管显示实验中的键盘扫描模块、数码管显示模块分别编写为子过程;将以上模块进行适当的组合即可完成指定功能,具体可见代码3. 模块介绍(1)电机控制模块这是一个主要的模块,完成PID反馈控制调速小型直流电机用8255单元来产生正弦波控制直流电机通过控制高电平的时间就可以控制电机转速了其中驱动电路由达林顿管组成测速元件是霍尔传感器,具体的测度原理见《先行知识》,模块原理图如下:I」Y:.,X21豆xdTXJLTD5C-1DjD2DI□(■RDCSMT1-0-0^竿111R頁浇电巧8255pbo单元电机控制模块原理图利用实验平台上8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。

霍尔测速元件输出的脉冲信号记录电机转速构成反馈量在参数给定情况下,经PID运算,电机可在控制量作用下,按给定转速运转实验利用PC机定时器0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加系统总线上INTR中断用于测量电机转速程序流程如图所示:IRET测速中断流程图定时采样中断流程图直流电机闭环调速流程图1)测速模块基本原理霍尔传感器产生一系列反应电机转速的矩形波,矩形波是中断定时器的中断控制信号通过中断频率就可以知道电机的速度了程序代码MYISRPROCNEARPUSHPUSHPUSHMOVMOVAXCXDXAX,DATADS,AXMOVCMPJZAL,MARKAL,01HIN1MOVJMPMARK,01HIN2IN1:MOVVV:MOVMOVMOVCMPJZDIVMARK,00H;计算转速DX,0000HAX,03E8HCX,VADDCX,0000HMM1CXMM:MOVZV,ALMOVVADD,0000HMM1:MOVAL,ZVMOVZVV,ALIN2:MOVSUBINMOVADDMOVOUTDX,PCI_INTCSR;清PCI卡控制寄存器标志位DX,19HAL,DXDX,PCI_INTCSRDX,2AX,003FHDX,AXMOVMOVOUTMOVOUTPOPPOPPOPIRETDX,INTR_0CW2;向PC机内部8259发送中断结束命令AL,20HDX,ALAL,20H20H,ALDXCXAXMYISRENDP2)PWM波产生模块基本原理PWM波的输出高电平的时间点一个周期的比例越大,则输出的平均电压就越大,通过速度反馈及PID计算,然后输出相应占空比的PWI波,占空比越大,则电机两端获得的电压也越大,这里PWM波的信号是通过8255芯的PB0端输出到驱动电路的A端口的程序代码KJPROCNEARPUSHAXCIPFPWI,01H;PWIJNZTEST2CIPVAA,00HJNZANOT0为1产生PWM勺高电平IOVFPWI,02HIOVAL,BBBCLCRCRAL,01HIOVVBB,ALJIPTEST2ANOT0:DECVAAIOVAL,01H;PB0=1IOVDX,IY8255_BOUTDX,AL电机转动TEST2:CIPFPWI,02H;PWIJNZOUTTCIPVBB,00HJNZBNOT0为2,产生PWM勺低电平IOVFPWI,01HIOVAL,AAAACLCRCRAL,01HIOVVAA,ALJIPOUTTBNOT0:DECVBBIOVAL,00H;PB0=0IOVDX,IY8255_BOUTDX,AL电机停止OUTT:POPRETKJENDPAX3)PID计算模块基本原理PID计算模块就是通过测速反馈得来的实时速度反应量YK来计算相关的比例项、积分项、微分项。

最后得到控制量CK,送给PWM模块,用于产生控制波PIDPROCNEARMOVAX,SPECSUBAX,YK;求偏差EKMOVR0,AXMOVR1,AXSUBAX,EK_1MOVR2,AXSUBAX,AEK_1;求BEKMOVBEK,AXMOVR8,AXMOVAX,R1;求偏差变化量AEKMOVEK_1,AXMOVAX,R2MOVAEK_1,AXTESTR1,8000HJZEK1;若偏差EK为正数,则不需要求补码NEGR1;若偏差EK为负数,则求偏差EK的补码EK1:MOVAX,R1;判断偏差EK是否在积分分离值的范围内SUBAX,IBANDJCII;在积分分离值范围内,则跳转到II,计算积分项MOVR3,00H;若不在积分分离值范围内,则将积分项清0JMPDDD;计算微分项II:MOVAL,TS;计算积分项,结果放在R3变量中(R3=EK*TS/KII)MOVAH,00H;其中TS和KII均为正数,所以R3的正负由EKMOVCX,R1MULCXMOVCX,KIIDIVCXMOVR3,AXTESTR0,8000H;判断积分项的正负JZDDD;为正数,则跳转去计算微分项决定NEGR3;DDD:TESTBEK,8000HJZDDD1;NEGBEK;DDD1:MOVAX,BEK为负数,则将积分项的结果求补码判断BEK的正负为正数,则BEK不变为负数,则求BEK的补码计算微分项(R4=KDD*BEK/8TS)MOVCX,KDDMULCXPUSHAXPUSHDXMOVAL,TSMOVAH,00HMOVCX,0008HMULCXMOVCX,AXPOPDXPOPAXDIVCXMOVR4,AXTESTR8,8000HJZDD1;NEGR4;DD1:MOVAX,R3将微分项缩小8倍,防止溢出判断微分项的正负为正数,则结果不需要求补码为负数,则微分项结果R4求补码积分项和微分项相加,结果放在R5变量中ADDAX,R4MOVR5,AXJOL9;L2:MOVAX,R5ADDAX,R2MOVR6,AX;R6=R5+R2=判断溢出积分项+微分项+AEKJOL5:MOVMOVIMULMOVIDIVMOVRCLPUSHFRCRPOPFJCCMPJZMOVJMPL3AX,R6CX,KPPCXCX,1000HCXCX,AXAH,01HAL,01HLLL1CH,00HLLL2AL,7FHLLL2计算KPP*R6判断溢出,溢出赋极值LLL1:CMPCH,0FFHJZLLL2MOVAL,80HLLL2:MOVR7,AL;CK=CK_1+CKADDAL,CK_1JOL8L18:MOVCK_1,ALADDAL,80HMOVCK,ALRETL8:TESTR7,80H;CKJNZL17MOVAL,7FH;JMPL18L17:MOVAL,80H;JMPL18L9:TESTR3,8000HJNZL1MOVR5,7FFFH;JMPL2L1:MOVR5,8000H;JMPL2L3:TESTR2,8000HJNZL4溢出处理程序若为正溢出,则赋给正极值7FH若为负溢出,则赋给赋极值80H若为正溢出,则赋给正极值7FFFH若为负溢出,则赋给负极值8000HMOVR6,7FFFHJMPL5L4:MOVR6,8000HJMPL5RETPIDENDP2.键盘扫描与显示单元键盘及数码管显示单元通过基本输入输出单元与80X86CPU总线连接,选通信号CS_ACS_B分别与I0Y1、I0Y2连接,地址分别为3040H3080H通过OA0-OA3与X1-X3相连选通指定行,IA0-IA3与丫1-丫3连接读取当前闭合列,从而确定当前闭合按键。

A-GDP与0B0-0B7连接,根据按键使数码管选通显示相应的数据键盘扫描与显示原理图如下图所示:765432JODDDDDDuD基本输入输出单元I234Y¥¥¥D123AAAAAfiR□ss^R匚匚F—7-34ABCDEFGDXXXX键盘扫描模块基本原理键盘扫描模块,实现了判断是否有按键,并且如果有按键获取按键码的功能,4X4键盘的编码,从左到右,从上到下,依次编码为0~F,如果有按键,则转入到按键处理子程序模块执行如果没有,则返回主程序循环程序代码KEYSCANPROCNEARPUSHAXPUSHDXMOVAX,DATAMOVDS,AXBEGIN:CALLDISCALLCLEARCALLCCSCANJNZGETKEY1GETKEY1:CALLDISCALLDALLY1CALLDALLY1CALLCLEARCALLCCSCANJNZGETKEY2JMPENDKEYSCAN显示刷新清屏扫描按键有键按下则跳置GETKEY1显示刷新清屏再次扫描按键有键按下则跳置GETKEY2否则跳回开始继续循环设置当前检测的是第几列选取一列,将X1〜X4中一个置0GETKEY2:MOVCH,0FEHMOVCL,00H;COLUM:MOVAL,CHMOVDX,MYIO_AOUTDX,ALINAL,DXLP1:TESTJNZMOVJMPAL,01H;LP2;AL,00H;KCODE是否为第1行不是则继续判断设置第1行第1列的对应的键值LP2:TESTAL,02H;是否为第2行JNZLP3;不是则继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODELP3:TESTAL,04H;是否为第3行JNZLP4;不是则继续判断MOVAL,08H;设置第3行第1列的对应的键值JMPKCODELP4:TESTAL,08H;是否为第4行JNZNEXT;不是则继续判断MOVAL,0CH;设置第4行第1列的对应的键值KCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值;CALLCALLINPUTDEAL;保存按键值,进入相应的按键处理程序PUSHAXKON:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键,判断按键是否弹起JNZKON;未弹起则继续循环等待弹起POPAXNEXT:INCCL;当前检测的列数递增MOVAL,CHTESTAL,08H;检测是否扫描到第4列JZKERR;是则跳回到开始处ROLAL,1;没检测到第4列则准备检测下一列MOVCH,ALJMPCOLUMKERR:;JMPBEGINENDKEYSCAN:POPDXPOPAXRETKEYSCANENDP秋c按犍採|再星齐剧新疑稱屏扫挝小直盘輕邃无按锥'斗匚二扌朋•卜健处执返戸IKDOS无捲蜒I打報風依挖检测ij死.确迖壘葡几厅兹建按卜側始化龍神爼于存值初始m255T作方式ly.itm-vfj-诃计•<•键盘扫描程序流程图五、基于80c51单片机控制电路的仿真设计1. 实现功能基本功能1 )用仿真基于80c51实现小型直流电机闭环PID控制调速;2 )使用C语言完成硬件接口功能的设计;3 )使用小键盘实现现场设置设定速度v、比例参数p、积分参数i、微分数d;4 )使用4位数码管实现现场显示实时速度s、设定速度v、比例参数p、积分参数i、微分参数d;5 )实现控制台屏幕显示设置速度v与实时速度s。

附加功能1 )通过按键实现直流电机的正反转控制;2 )通过按键实现直流电机的快速停车2. 设计思想与80x86芯片微机接口控制电路系统类似,整个系统可以的划分为两部分,一部分是直流电机闭环PID调速单元,一部分是键盘扫描和数码管显示单元直流电机闭环PID调速单元运用PID算法通过对P、I、DS、V参数的运算得出PID控制量,并将PID控制量转化为PWMS过8255单元输出给直流电机从而实现对直流电机的控制键盘扫描单元通过对键盘的重复扫描读取用户的输入数据P、I、DV并进行相应的存储,数码管显示单元分析当前选择状态、读取P、I、DSV参数并通过基本输入输出单元进行相应的显示与80x86芯片微机接口控制电路系统不同之处在于,通过设置15号按键,通过对驱动芯片L298输入端IN1、IN2的控制实现直流电机的快速停车与正反转控制具体实施过程:将电机闭环调速的PWM波产生模块、PID控制量产生模块、测速生成模块、初始化模块和键盘扫描和数码管显示实验中的键盘扫描模块、数码管显示模块分别编写为子过程;将以上模块进行适当的组合即可完成指定功能,具体可见代码1) 模块介绍测速反馈模块基本原理测速反馈是通过一个定时器和一个计数器来完成的给定时中断一定的时间(计算得来),当定时器还未溢出时,计数器通过接受motorencoderd的正弦波来产生与速度相关的计数量,当定时中断到达时,将其赋给实时速度变量就行。

程序代码oidtO(void)interrupt1using0//定时TO中断服务函数{tcnt++;//每过25Ousttcnt加一if(tcnt==40)//计满40次(1/100秒)时{tcnt=0;//重新再计sec++;if(sec==10)//定时0.1秒,在从零开始计时{sec=0;TH0=0x06;//对TH0TL0赋值TL0=0x06;miaoshu=count;//测速给相关变量count=0;}}}voidsdf(void)interrupt2using0//计数T1中断服务函数(2) {count=count+1;PID模块基本原理该模块与80x86系统中汇编程序思路类似,但溢出处理要简单很多程序代码voidpid(void)//PID计算输出量{ek=sv1-miaoshu;uk=uk_1+q0*ek+q1*ek_1+q2*ek_2;ek_2=ek_1;ek_1=ek;uk_1=uk;if(uk>400)uk=400;//限定输出上限if(uk<5)(3) uk=5;//限定输出下限}键盘扫描程序基本原理选通相应的行,逐次读取各列判断是否闭合,若没有按键闭合则确定按键,若没有按键闭合则选通下一行重复上述操作,知道找到闭合按键为止。

程序代码voidkey(){uchari,temp,lie,hang,shu;for(i=0;i<4;i++){P1=choose[i];//扫描行,给定列temp=P1;temp=temp&0xf0;if(temp!=0xf0)//通过检测低电平来确定列{hang=i;if(temp==0xe0)lie=1;elseif(temp==0xd0)lie=2;elseif(temp==0xb0)lie=3;elseif(temp==0x70)lie=4;break;}}shu=hang*4+lie;//数为对应的按键voidkeyscan(){uchartemp;P仁OxfO;temp=P1;temp=temp&0xf0;if(temp!=OxfO){delay(5);//消除抖动P仁0xf0;temp=P1;temp=temp&0xf0;if(temp!=0xf0)key();}}相关流程图开始开始定时中断流程图计时中断流程图开始是否有按键按下N键盘扫描模块流程图六、结束语这次微机原理课程设计学到很多很多的的东西不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识深入细致的了解了80x86CPU勺使用,以及以80x86CPl和80c51单片机为基础的小型系统的设计。

特别的,在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错这次课程设计并不是很难,主要的困难来自对程序的理解功夫不负有心人,经过努力,我们最后对课程设计的原理有了清晰的认识虽然刚开始觉得不知如何下手,不过,最后我觉得我做的还是不错的这次课设却让我们对微机原理有了足够的了解,让我们知道了程序上各个模块的用法;而且它还让我们对自己动手写程序来控制系统的运作有了一定的基础我们对有关微机原理与接口技术的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种部分的功能,同时熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。

感谢老师的悉心指导根据CHEC配置信息修改下列符号值*******************INTR_IVADDEQU003CH;INTRINTR_OCW1EQU0A1H;INTR址INTR_OCW2EQU0A0H;INTR址INTR_IMEQU0FBH;INTRPCI_INTCSREQU0CC38H;PCI附件1:.***************IOYOEQU3000HIOY1EQU3040HIOY2EQU3080H对应的中断矢量地址对应PC机内部8259的OCW地对应PC机内部8259的OCW地对应的中断屏蔽字卡中断控制寄存器地址片选IOY0对应的端口始地址片选IOY1对应的端口始地址片选IOY2对应的端口始地址.*****************************************************************MY8255_AEQUMY8255_BEQUMY8255_CEQUMY8255_MODEEQUIOY0+00H*4;8255IOY0+01H*4;8255IOY0+02H*4;8255IOY0+03H*4;8255的A口地址的B口地址的C口地址的控制寄存器地址MYIO_AEQUIOY1+00H*4MYIO_BEQUIOY2+00H*4基本输入输出单元A组端口地址基本输入输出单元B组端口地址PC8254_COUNT0EQU40H;PCPC8254_MODEEQU43H;PC机内8254定时器0端口地址机内8254控制寄存器端口地址;堆栈段STACK1SEGMENTSTACKDW64DUP(?)TOPLABELWORDSTACK1ENDS;数据段DATASEGMENTTABLE1DB'AssumedFanSpeed:(/s)AndCurrentFanSpeed:(/s)',0AH,0DH,'$';字符串变量;TABLE2DB'CurrentFanSpeed:(/s)',0AH,0DH,'$';字符串变量TABLE3DB'','$'ENTDB0AH,0DH,'$';换行,回车CS_BAKDW?;保存INTR原中断处理程序入口段地址的变量IP_BAKDW?;保存INTR原中断处理程序入口偏移地址的变量IM_BAKDB?;保存INTR原中断屏蔽字的变量CS_BAK1DW?;保存定时器0中断处理程序入口段地址的变量IP_BAK1DW?;保存定时器0中断处理程序入口偏移地址的变量IM_BAK1DB?;保存定时器0中断屏蔽字的变量TSDB14H;采样周期SPECDW45;转速给定值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':设置的速度卩':参数KPPT:参数KII'd':参数KDDSHOWTYPEDB0;存放显示类型号,0在数码管处显示实时速度,1在数码管处显示设置速度,2在数码管处显示KPP参数,3在数码管处显示KII参数,4在数码管处显示LEDBITDB3;KEYDB?;1号键则置2TEMP1DW00FFHBUFDB8DUP(?);DATAENDSKDD参数数码的列位,0,1,2,3或2,按下了1号键,则置1,按下了2临时变量缓冲区;代码段CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AX;主程序MAIN:MOVDX,OFFSETTABLE1MOVAH,09HINT21HCALLJINIT开始处理;程序初始化M1:MOVAL,TSJ判断采样周期到否?SUBAL,TCJNCM1;没到则继续等待MOVAX,SPECCALLDECSHOW;输出转速MOVDX,OFFSETTABLE3MOVAH,09HINT21H;输出空格,调整格式MOVTC,00HJ采样周期到,将采样周期变量清0MOVAL,ZVVMOVAH,00HMOVYK,AXCALLPID;调用PID子程序,得到控制量CKMOVAL,CK;SUBAL,80HJCIS0MOVAAAA,ALJMPCOUIS0:MOVAL,10H;MOVAAAA,ALCOU:MOVAL,7FHSUBAL,AAAAMOVBBB,ALMOVAX,YK;MOVDI,OFFSETCSPDMOV[DI],AXCALLDECSHOWMOVDL,0DH;MOVAH,02HINT21HCALLKEYSCANMOVAH,1INT16HJZM1EXIT:CALLDESTROY;MOVAX,4C00HINT21H把控制量转化成PWM输出电机的启动值不能低于10H将反馈值YK送到屏幕显示回车销毁程序,恢复现场,停止电机运转;键盘扫描子程序KEYSCANPROCNEARPUSHPUSHMOVMOVAXDXAX,DATADS,AXBEGIN:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键JNZGETKEY1;有键按下则跳置GETKEY1GETKEY1:CALLDIS;显示刷新CALLDALLY1CALLDALLY1CALLCLEAR;清屏CALLCCSCAN;再次扫描按键JNZGETKEY2;有键按下则跳置GETKEY2LP1:TESTJNZMOVJMPAL,01H;LP2;AL,00H;KCODE是否为第1行不是则继续判断设置第1行第1列的对应的键值LP2:TESTAL,02H;是否为第2行JNZLP3;不是则继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODELP3:TESTAL,04H;是否为第3行JNZLP4;不是则继续判断MOVAL,08H;设置第3行第1列的对应的键值JMPKCODELP4:TESTAL,08H;是否为第4行JNZNEXT;不是则继续判断MOVAL,0CH;设置第4行第1列的对应的键值KCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值CALLINPUTDEAL;保存按键值PUSHAXKON:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键,判断按键是否弹起JNZKON;未弹起则继续循环等待弹起POPAXNEXT:INCCL;当前检测的列数递增MOVAL,CHTESTAL,08H;检测是否扫描到第4列JZENDKEYSCAN;是则跳回到开始处JMPBEGIN否则跳回开始继续循环GETKEY2:MOVCH,0FEHMOVCL,00H;COLUM:MOVAL,CHMOVDX,MYIO_AOUTDX,ALINAL,DX设置当前检测的是第几列选取一列,将X1〜X4中一个置0ROLAL,1;MOVCH,ALJMPCOLUM;KERR:;JMPBEGINENDKEYSCAN:POPDXPOPAXRETKEYSCANENDP按键处理子程序INPUTDEALPROCNEARCMPAL,0JZINPUTZEROCMPAL,1JZINPUTONECMPAL,2JZINPUTTWOJMPENDINPUTINPUTZERO:JMOVDI,OFFSETKEYMOVAL,0MOV[DI],ALMOVSI,OFFSETSHOWTYPEMOVAL,[SI]CMPAL,4JZISFOURADDAL,1MOV[SI],ALJMPENDINPUTISFOUR:MOVMOVJMP没检测到第4列则准备检测下一列按小键盘0,执行功能转换AL,0[SI],ALENDINPUTMOVMOVDI,OFFSETKEYAL,1INPUTONE:;按小键盘1,根据功能键,增加参数的值MOV[DI],ALCALLKDEAL;调用参数处理函数JMPENDINPUTINPUTTWO:;按小键盘2,根据功能刍,减少参数的值MOVDI,OFFSETKEYMOVAL,2MOV[DI],ALCALLKDEAL;调用参数处理函数JMPENDINPUTENDINPUT:RETINPUTDEALENDP;ASPD,KPP,KII,KDD参数修改子程序KDEALPROCNEAR;修改ASPD设置速度)DEALASPD:;MOVSI,OFFSETKEYMOVAL,[SI]CMPAL,1;根据按键修改SPEC如果按了小键盘1,速度就增加1MOVSI,OFFSETSHOWTYPEMOVAL,[SI]CMPAL,1;功能1,更改速度JZDEALASPDCMPAL,2;功能2,更改KPPJZDEALKPPCMPAL,3;功能3,更改KIIJZDEALKIICMPAL,4;功能4,更改KDDJZDEALKDDJMPENDKDEALJZINCSPECCMPAL,2;修改KPPDEALKPP:MOVMOVCMP处,KPP力卩5JZCMP处,KPP减5JZJMPINCKPP:MOVMOVMOVADDMOVJMPDECKPP:MOVMOVMOVSUBMOVJMPSI,OFFSETKEYAL,[SI]AL,1;INCKPPAL,2;DECKPPENDKDEALSI,OFFSETKPPDX,[SI]AX,5HDX,AX;KPP[SI],DXENDKDEALSI,OFFSETKPPDX,[SI]AX,5HDX,AX;KPP[SI],DXENDKDEALJZDECSPEC;如果按了小键盘2,速度就减少1JMPENDKDEALINCSPEC:MOVSI,OFFSETSPECMOVDX,[SI]INCDX;速度加1MOV[SI],DXJMPENDKDEALDECSPEC:MOVSI,OFFSETSPECMOVDX,[SI]DECDX;速度减1MOV[SI],DXJMPENDKDEAL如果按的是一号键,则跳转到INCKPP如果按的是二号键,则跳转到DECKPP加5减5;修改KIIDEALKII:MOVSI,OFFSETKEYMOVAL,[SI]CMPAL,1;号处,KII加1JZINCKIICMPAL,2;号处,KII减1JZDECKIIJMPENDKDEALINCKII:MOVSI,OFFSETKIIMOVDX,[SI]INCDX;KIIMOV[SI],DXJMPENDKDEALDECKII:MOVSI,OFFSETKIIMOVDX,[SI]DECDX;KIIMOV[SI],DXJMPENDKDEAL;修改KDDDEALKDD:;MOVSI,OFFSETKEYMOVAL,[SI]CMPAL,1JZINCKDD;号处,KDD力卩1CMPAL,2JZDECKDD;号处,KDD减1JMPENDKDEALINCKDD:MOVSI,OFFSETKDDMOVDX,[SI]INCDX;KDDMOV[SI],DXJMPENDKDEALDECKDD:MOVSI,OFFSETKDDMOVDX,[SI]DECDX;KDDMOV[SI],DX如果按了1号键,则跳转到INCKII标如果按了2号键,则中转到DECKII标加1减1根据按键修改KDD如果按了1号键,则跳转到INCKDD标如果按了2号键,则跳转到DECKD标加1减1ENDKDEAL:CALLCLEARKEYSRETKDEALENDP;清除显示管屏幕子程序CLEARKEYSPROCNEARMOVSI,OFFSETKEYMOVAL,0MOV[SI],ALRETCLEARKEYSENDP计算机屏幕显示子程序DECSHOWPROCNEAR;完成两位十进制数显示子程序计算AX/10MOVMOVDIVDX,0BX,10;BXADDAL,30H;商+30H,即为十位数ASCII码MOVAH,0EHINT10HADDDL,30H;余+30H,即为个位数ASCII码MOVAH,2INT21HRETDECSHOWENDP;系统总线INTR中断处理程序MYISRPROCNEARPUSHAXPUSHCXPUSHDXMOVAX,DATAMOVDS,AXMOVAL,MARKCMPAL,01HJZIN1MOVMARK,01H小型直流电机闭环调速系统PID控制器设计JMPIN2IN1:MOV速VV:MOVMOVMOVCMPJZMARK,00HDX,0000HAX,03E8HCX,VADDCX,0000HMM1;计算转DIVCXMM:MOVZV,ALMOVVADD,0000HMM1:MOVAL,ZVMOVZVV,ALIN2:MOVDX,PCI_INTCSR志位SUBDX,19HINAL,DXMOVDX,PCI_INTCSRADDDX,2MOVAX,003FHOUTDX,AX清PCI卡控制寄存器标MOV中断结束命令MOVOUTMOVOUTPOPPOPPOPDX,INTR_OCW2AL,20HDX,ALAL,20H20H,ALDXCXAX向PC机内部8259发送IRETMYISRENDPPUSHPUSHPUSHMOVMOVAXCXDXAX,DATADS,AX;PC机定时器0中断处理程序TIMERISRPROCNEARINCTC;CALLKJCLCCMPMARK,01HJCTT1INCVADDCMPVADD,0700HJCTT1MOVVADD,0700HMOVMARK,00H采样周期变量加1转速值溢出,赋极值TT1:MOVAL,20HOUT20H,ALPOPDXPOPCXPOPAXIRETTIMERISRENDP中断结束,发EOI命令;PWM子程序KJPROCNEARPUSHAX为1产生PWM勺高电平CMPFPWM,01H;PWMJNZTEST2CMPVAA,00HJNZANOT0MOVFPWM,02HMOVAL,BBBCLCRCRAL,01HMOVVBB,ALJMPTEST2电机转动ANOT0:DECVAAMOVAL,01H;PB0=1MOVDX,MY8255_BOUTDX,ALTEST2:CMPFPWM,02H;PWM为2,产生PWM勺低电平JNZOUTTCMPVBB,00HJNZBNOT0MOVFPWM,01HMOVAL,AAAACLCRCRAL,01HMOVVAA,ALJMPOUTTBNOT0:DECVBBMOVMOVOUTAL,00H;PB0=0DX,MY8255_BDX,AL电机停止OUTT:POPAXRETKJENDP;PID子程序PIDPROCNEARMOVAX,SPECSUBAX,YK;求偏差EKMOVR0,AXMOVR1,AXSUBAX,EK_1MOVR2,AXSUBAX,AEK_1;求BEKMOVBEK,AXMOVR8,AXMOVAX,R1;求偏差变化量AEKMOVEK_1,AXMOVAX,R2MOVAEK_1,AXTESTR1,8000HJZEK1;若偏差EK为正数,则不需要求补码NEGR1;若偏差EK为负数,则求偏差EK的补码EK1:MOVAX,R1;判断偏差EK是否在积分分离值的范围内SUBAX,IBANDJCII;在积分分离值范围内,则跳转到I。

下载提示
相关文档
正为您匹配相似的精品文档