版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理及接口技术课程设计报告微机原理及接口技术课程设计报告小型直流电机闭环调速系统PID控制器设计目录一、课程设计的目的及意义…………1二、课程设计的题目与要求…………1三、基本原理…………11.PID算法…………12.霍尔元件测速原理………………43.转速调节原理……………………5四、基于80x86芯片微机接口控制电路的设计……61.实现功能 ………………………62.设计思想 ………………………73.模块介绍(附流程图)……………7(1)电机控制模块………………71)测速模块…………………92)PWN波产生模块…………103)PID计算模块 ……………11(2)键盘扫描与显示单元………141)键盘扫描模块……………14五、基于80c51单片机控制电路的仿真设计………181.实现功能………………………182.设计思想………………………183.模块介绍………………………19(1)测速反馈模块……………19(2)PID模块…………………19(3)键盘扫描模块……………204.相关流程图……………………21结束语 …………23附件:程序代码一、课程设计的目的及意义通过本次课程设计要掌握80x86、8255、8251等芯片及基本输入输出电路的使用方法,灵活运用课本知识,加深对所学的知识理解,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解,学会利用课本知识联系实际应用及编程。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后设计时逻辑更加清晰。二、课程设计的题目与要求1.题目小型直流电机闭环调速系统PID控制器设计2.设计要求(1)设计基于80x86微机接口控制电路;(2)分别用C语言或汇编语言或VC++编程完成硬件接口功能设计;(3)程序功能要求:电机速度由按键分段给定或电位器连续给定,计算机屏幕和数码管同步跟踪显示当前给定速度和电机实际运行速度,实现PID参数在线显示和修改。(4)具备本地及远程(串行方式)监控功能。三、基本原理1.PID算法及相关内容在DDC系统中,用计算机取代了模拟器件,控制规律的实现是由计算机软件来完成的。因此,系统中数字控制的设计,实际上是计算机算法的设计。由于计算机只能识别数字量,不能对连续的控制算式直接进行运算,故在计算机控制系统中,首先必须对控制规律进行离散化的算法设计。为将模拟PID控制规律按式(1.2)离散化,我们把图1.1中、、、在第n次采样的数据分别用、、、表示,于是式(1.1)变为:=-(1.4)当采样周期T很小时可以用T近似代替,可用近似代替,“积分”用“求和”近似代替,即可作如下近似(1.5)(1.6)这样,式(1.2)便可离散化以下差分方程(1.7)上式中是偏差为零时的初值,上式中的第一项起比例控制作用,称为比例(P)项,即(1.8)第二项起积分控制作用,称为积分(I)项即(1.9)第三项起微分控制作用,称为微分(D)项即(1.10)这三种作用可单独使用(微分作用一般不单独使用)或合并使用,常用的组合有:P控制:(1.11)PI控制:(1.12)PD控制:(1.13)PID控制:(1.14)式(1.7)的输出量为全量输出,它对于被控对象的执行机构每次采样时刻应达到的位置。因此,式(1.7)又称为位置型PID算式。由(1.7)可看出,位置型控制算式不够方便,这是因为要累加偏差,不仅要占用较多的存储单元,而且不便于编写程序,为此对式(1.7)进行改进。根据式(1.7)不难看出u(n-1)的表达式,即(1.15)将式(1.7)和式(1.15)相减,即得数字PID增量型控制算式为(1.16)从上式可得数字PID位置型控制算式为(1.17)式中:称为比例增益;称为积分系数;称为微分系数[1]。数字PID位置型示意图和数字PID增量型示意图分别如图所示:数字PID位置型控制示意图数字PID增量型控制示意图2.霍尔元件测速原理霍尔传感器是对磁敏感的传感元件,由磁钢、霍耳元件等组成。测量系统的转速传感器选用SiKO的NJK-8002D的霍尔传感器,其响应频率为100KHz,额定电压为5-30(V)、检测距离为10(mm)。其在大电流磁场或磁钢磁场的作用下,能测量高频、工频、直流等各种波形电流。该传感器具有测量精度高、电压范围宽、功耗小、输出功率大等优点,广泛应用在高速计数、测频率、测转速等领域。输出电压4~25V,直流电源要有足够的滤波电容,测量极性为N极。安装时将一非磁性圆盘固定在电动机的转轴上,将磁钢粘贴在圆盘边缘,磁钢采用永久磁铁,其磁力较强,霍尔元件固定在距圆盘1-10mm处。当磁钢与霍尔元件相对位置发生变化时,通过霍尔元件感磁面的磁场强度就会发生变化。圆盘转动,磁钢靠近霍尔元件,穿过霍尔元件的磁场较强,霍尔元件输出低电平;当磁场减弱时,输出高电平,从而使得在圆盘转动过程中,霍尔元件输出连续脉冲信号。这种传感器不怕灰尘、油污,在工业现场应用广泛。霍尔器件是由半导体材料制成的一种薄片,器件的长、宽、高分别为l、b、d。若在垂直于薄片平面(沿厚度d)方向施加外磁场B,在沿l方向的两个端面加一外电场,则有一定的电流流过。由于电子在磁场中运动,所以将受到一个洛仑磁力,其大小为:式中:f—洛仑磁力,q—载流子电荷,V—载流子运动速度,B—磁感应强度。这样使电子的运动轨迹发生偏移,在霍尔元器件薄片的两个侧面分别产生电子积聚或电荷过剩,形成霍尔电场,霍尔元器件两个侧面间的电位差称为霍尔电压。霍尔电压大小为:(mV)式中:—霍尔常数,d—元件厚度,B—磁感应强度,I—控制电流设,则=(mV) 为霍尔器件的灵敏系数(mV/mA/T),它表示该霍尔元件在单位磁感应强度和单位控制电流下输出霍尔电动势的大小。应注意,当电磁感应强度B反向时,霍尔电动势也反向。图2.3为霍耳元件的原理结构图。若控制电流保持不变,则霍尔感应电压将随外界磁场强度而变化,根据这一原理, 可以将两块永久磁钢固定在电动机转轴上转盘的边沿,转盘随被测轴旋转,磁钢也将跟着同步旋转,在转盘附近安装一个霍尔元件,转盘随轴旋转时,霍尔元件受到磁钢所产生的磁场影响,输出脉冲信号。传感器内置电路对该信号进行放大、整形,输出良好的矩形脉冲信号,测量频率范围更宽,输出信号更精确稳定,已在工业,汽车,航空等测速领域中得到广泛的应用。其频率和转速成正比,测出脉冲的周期或频率即可计算出转速。 图2.3霍耳元件的原理结构图3.转速调节原理PWM的占空比决定输出到直流电机的平均电压.PWM不是调节电流的.PWM的意思是脉宽调节,也就是调节方波高电平和低电平的时间比,一个20%占空比波形,会有20%的高电平时间和80%的低电平时间,而一个60%占空比的波形则具有60%的高电平时间和40%的低电平时间,占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.如果占空比为0%,那么高电平时间为0,则没有电压输出.如果占空比为100%,那么输出全部电压.
所以通过调节占空比,可以实现调节输出电压的目的,而且输出电压可以无级连续调节.在使用PWM控制的直流无刷电动机中,PWM控制有两种方式:使用PWM信号,控制三极管的导通时间,导通的时间越长,那么做功的时间越长,电机的转速就越高。
(2)使用PWM控制信号控制三极管导通时间,改变控制电压高低来实现直流电机单元由DC12V、1.1W的直流电机,小磁钢,霍尔元件及输出电路构成。PWM示意图如图1-1-3所示。通过调节T1的脉冲宽度,改变T1的占空比,从而改变输出,达到改变直流电机转速的目的。图1-1-3PWM示意图利用8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。霍尔测速元件输出的脉冲信号记录电机转速构成反馈量。在参数给定的情况下,经PID运算,电机可在控制量的作用下,按PC机累加器给定的转速运转。通过PC的0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加,系统总线上INTR中断用于测量电机转速。四、基于80x86芯片微机接口控制电路的设计1.实现功能1)实现小型直流电机闭环PID控制调速;2)使用汇编语言完成硬件接口功能的设计;3)使用小键盘实现现场设置设定速度v、比例参数p、积分参数i、微分数d;4)使用4位数码管实现现场显示实时速度s、设定速度v、比例参数p、积分参数i、微分参数d;5)实现控制台屏幕显示设置速度v与实时速度s2.设计思想整个系统可以的划分为两部分,一部分是直流电机闭环PID调速单元,一部分是键盘扫描和数码管显示单元。直流电机闭环PID调速单元运用PID算法通过对P、I、D、S、V参数的运算得出PID控制量,并将PID控制量转化为PWM通过8255单元输出给直流电机从而实现对直流电机的控制。键盘扫描单元通过对键盘的重复扫描读取用户的输入数据P、I、D、V并进行相应的存储,数码管显示单元分析当前选择状态、读取P、I、D、S、V参数并通过基本输入输出单元进行相应的显示。具体实施过程:将电机闭环调速的PWM波产生模块、PID控制量产生模块、测速生成模块、初始化模块和键盘扫描和数码管显示实验中的键盘扫描模块、数码管显示模块分别编写为子过程;将以上模块进行适当的组合即可完成指定功能,具体可见代码。3.模块介绍(1)电机控制模块这是一个主要的模块,完成PID反馈控制调速小型直流电机。用8255单元来产生正弦波控制直流电机。通过控制高电平的时间就可以控制电机转速了。其中驱动电路由达林顿管组成。测速元件是霍尔传感器,具体的测度原理见《先行知识》,模块原理图如下:电机控制模块原理图利用实验平台上8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。霍尔测速元件输出的脉冲信号记录电机转速构成反馈量。在参数给定情况下,经PID运算,电机可在控制量作用下,按给定转速运转。实验利用PC机定时器0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加。系统总线上INTR中断用于测量电机转速。程序流程如图所示:测速中断流程图定时采样中断流程图直流电机闭环调速流程图1)测速模块基本原理霍尔传感器产生一系列反应电机转速的矩形波,矩形波是中断定时器的中断控制信号。通过中断频率就可以知道电机的速度了。程序代码MYISRPROCNEARPUSHAXPUSHCXPUSHDXMOVAX,DATAMOVDS,AXMOVAL,MARKCMPAL,01HJZIN1MOVMARK,01HJMPIN2IN1:MOVMARK,00H ;计算转速VV:MOVDX,0000HMOVAX,03E8HMOVCX,VADDCMPCX,0000HJZMM1DIVCXMM:MOVZV,ALMOVVADD,0000HMM1:MOVAL,ZVMOVZVV,ALIN2:MOVDX,PCI_INTCSR;清PCI卡控制寄存器标志位SUBDX,19HINAL,DXMOVDX,PCI_INTCSRADDDX,2MOVAX,003FHOUTDX,AXMOVDX,INTR_OCW2;向PC机内部8259发送中断结束命令MOVAL,20HOUTDX,ALMOVAL,20HOUT20H,ALPOPDXPOPCXPOPAXIRETMYISRENDP2)PWM波产生模块基本原理PWM波的输出高电平的时间点一个周期的比例越大,则输出的平均电压就越大,通过速度反馈及PID计算,然后输出相应占空比的PWM波,占空比越大,则电机两端获得的电压也越大,这里PWM波的信号是通过8255芯的PB0端输出到驱动电路的A端口的程序代码KJPROCNEARPUSHAXCMPFPWM,01H;PWM为1,产生PWM的高电平JNZTEST2CMPVAA,00HJNZANOT0MOVFPWM,02HMOVAL,BBBCLCRCRAL,01HMOVVBB,ALJMPTEST2ANOT0:DECVAAMOVAL,01H;PB0=1电机转动MOVDX,MY8255_BOUTDX,ALTEST2:CMPFPWM,02H;PWM为2,产生PWM的低电平JNZOUTTCMPVBB,00HJNZBNOT0MOVFPWM,01HMOVAL,AAAACLCRCRAL,01HMOVVAA,ALJMPOUTTBNOT0:DECVBBMOVAL,00H;PB0=0电机停止MOVDX,MY8255_BOUTDX,ALOUTT:POPAXRETKJENDP3)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的正负由EK决定MOVCX,R1MULCXMOVCX,KIIDIVCXMOVR3,AXTESTR0,8000H;判断积分项的正负JZDDD;为正数,则跳转去计算微分项NEGR3;为负数,则将积分项的结果求补码DDD:TESTBEK,8000H;判断BEK的正负JZDDD1;为正数,则BEK不变NEGBEK;为负数,则求BEK的补码DDD1:MOVAX,BEK;计算微分项(R4=KDD*BEK/8TS)MOVCX,KDDMULCXPUSHAXPUSHDXMOVAL,TSMOVAH,00H;将微分项缩小8倍,防止溢出MOVCX,0008HMULCXMOVCX,AXPOPDXPOPAXDIVCXMOVR4,AXTESTR8,8000H;判断微分项的正负JZDD1;为正数,则结果不需要求补码NEGR4;为负数,则微分项结果R4求补码DD1:MOVAX,R3;积分项和微分项相加,结果放在R5变量中ADDAX,R4MOVR5,AXJOL9;判断溢出L2:MOVAX,R5ADDAX,R2MOVR6,AX;R6=R5+R2=积分项+微分项+AEKJOL3L5:MOVAX,R6;计算KPP*R6MOVCX,KPPIMULCXMOVCX,1000HIDIVCXMOVCX,AXRCLAH,01H;判断溢出,溢出赋极值PUSHFRCRAL,01HPOPFJCLLL1CMPCH,00HJZLLL2MOVAL,7FHJMPLLL2LLL1:CMPCH,0FFHJZLLL2MOVAL,80HLLL2:MOVR7,AL;CK=CK_1+CKADDAL,CK_1JOL8L18:MOVCK_1,ALADDAL,80HMOVCK,ALRETL8:TESTR7,80H;CK溢出处理程序JNZL17MOVAL,7FH;若为正溢出,则赋给正极值7FHJMPL18L17:MOVAL,80H;若为负溢出,则赋给赋极值80HJMPL18L9:TESTR3,8000HJNZL1MOVR5,7FFFH;若为正溢出,则赋给正极值7FFFHJMPL2L1:MOVR5,8000H;若为负溢出,则赋给负极值8000HJMPL2L3:TESTR2,8000HJNZL4MOVR6,7FFFHJMPL5L4:MOVR6,8000HJMPL5RETPIDENDP2.键盘扫描与显示单元键盘及数码管显示单元通过基本输入输出单元与80x86CPU总线连接,选通信号CS_A、CS_B分别与IOY1、IOY2连接,地址分别为3040H、3080H。通过OA0-OA3与X1-X3相连选通指定行,IA0-IA3与Y1-Y3连接读取当前闭合列,从而确定当前闭合按键。A-G、DP与0B0-OB7连接,根据按键使数码管选通显示相应的数据。键盘扫描与显示原理图如下图所示:键盘扫描与显示原理图键盘扫描模块基本原理键盘扫描模块,实现了判断是否有按键,并且如果有按键获取按键码的功能,4×4键盘的编码,从左到右,从上到下,依次编码为0~F,如果有按键,则转入到按键处理子程序模块执行,如果没有,则返回主程序循环。程序代码KEYSCANPROCNEARPUSHAXPUSHDXMOVAX,DATAMOVDS,AX BEGIN:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键JNZGETKEY1;有键按下则跳置GETKEY1 GETKEY1:CALLDIS;显示刷新CALLDALLY1CALLDALLY1CALLCLEAR;清屏CALLCCSCAN;再次扫描按键JNZGETKEY2;有键按下则跳置GETKEY2JMPENDKEYSCAN;否则跳回开始继续循环 GETKEY2:MOVCH,0FEHMOVCL,00H;设置当前检测的是第几列COLUM:MOVAL,CH;选取一列,将X1~X4中一个置0MOVDX,MYIO_AOUTDX,ALINAL,DX LP1:TESTAL,01H;是否为第1行JNZLP2;不是则继续判断MOVAL,00H;设置第1行第1列的对应的键值JMPKCODE LP2:TESTAL,02H;是否为第2行JNZLP3;不是则继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODE LP3:TESTAL,04H;是否为第3行JNZLP4;不是则继续判断MOVAL,08H;设置第3行第1列的对应的键值JMPKCODE LP4:TESTAL,08H;是否为第4行JNZNEXT;不是则继续判断MOVAL,0CH;设置第4行第1列的对应的键值 KCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值 ; CALLCALLINPUTDEAL;保存按键值,进入相应的按键处理程序 PUSHAXKON:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键,判断按键是否弹起JNZKON;未弹起则继续循环等待弹起POPAX NEXT:INCCL;当前检测的列数递增MOVAL,CHTESTAL,08H;检测是否扫描到第4列JZKERR;是则跳回到开始处 ROLAL,1;没检测到第4列则准备检测下一列MOVCH,ALJMPCOLUMKERR:;JMPBEGIN ENDKEYSCAN:POPDXPOPAXRETKEYSCANENDP键盘扫描程序流程图五、基于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、D、S、V参数的运算得出PID控制量,并将PID控制量转化为PWM通过8255单元输出给直流电机从而实现对直流电机的控制。键盘扫描单元通过对键盘的重复扫描读取用户的输入数据P、I、D、V并进行相应的存储,数码管显示单元分析当前选择状态、读取P、I、D、S、V参数并通过基本输入输出单元进行相应的显示。与80x86芯片微机接口控制电路系统不同之处在于,通过设置15号按键,通过对驱动芯片L298输入端IN1、IN2的控制实现直流电机的快速停车与正反转控制。具体实施过程:将电机闭环调速的PWM波产生模块、PID控制量产生模块、测速生成模块、初始化模块和键盘扫描和数码管显示实验中的键盘扫描模块、数码管显示模块分别编写为子过程;将以上模块进行适当的组合即可完成指定功能,具体可见代码。3.模块介绍(1)测速反馈模块基本原理测速反馈是通过一个定时器和一个计数器来完成的给定时中断一定的时间(计算得来),当定时器还未溢出时,计数器通过接受motorencoderd的正弦波来产生与速度相关的计数量,当定时中断到达时,将其赋给实时速度变量就行。程序代码oidt0(void)interrupt1using0//定时T0中断服务函数{ tcnt++;//每过250usttcnt加一 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中断服务函数{ count=count+1; }(2)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)uk=5;//限定输出下限}(3)键盘扫描程序基本原理选通相应的行,逐次读取各列判断是否闭合,若没有按键闭合则确定按键,若没有按键闭合则选通下一行重复上述操作,知道找到闭合按键为止。程序代码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; P1=0xf0; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(5); //消除抖动 P1=0xf0; temp=P1; temp=temp&0xf0; if(temp!=0xf0) key(); } }相关流程图定时中断流程图计时中断流程图键盘扫描模块流程图结束语这次微机原理课程设计学到很多很多的的东西。不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。深入细致的了解了80x86CPU的使用,以及以80x86CPU和80c51单片机为基础的小型系统的设计。特别的,在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。这次课程设计并不是很难,主要的困难来自对程序的理解。功夫不负有心人,经过努力,我们最后对课程设计的原理有了清晰的认识。虽然刚开始觉得不知如何下手,不过,最后我觉得我做的还是不错的。
这次课设却让我们对微机原理有了足够的了解,让我们知道了程序上各个模块的用法;而且它还让我们对自己动手写程序来控制系统的运作有了一定的基础。我们对有关微机原理与接口技术的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种部分的功能,同时熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。感谢老师的悉心指导。附件1:;***************根据CHECK配置信息修改下列符号值*******************INTR_IVADDEQU003CH;INTR对应的中断矢量地址INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址INTR_IMEQU0FBH;INTR对应的中断屏蔽字PCI_INTCSREQU0CC38H;PCI卡中断控制寄存器地址IOY0EQU3000H;片选IOY0对应的端口始地址IOY1EQU3040H;片选IOY1对应的端口始地址IOY2EQU3080H;片选IOY2对应的端口始地址;*****************************************************************MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址MYIO_AEQUIOY1+00H*4;基本输入输出单元A组端口地址MYIO_BEQUIOY2+00H*4;基本输入输出单元B组端口地址PC8254_COUNT0EQU40H;PC机内8254定时器0端口地址PC8254_MODEEQU43H;PC机内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':设置的速度'P':参数KPP'I':参数KII'd':参数KDDSHOWTYPEDB0;存放显示类型号,0在数码管处显示实时速度,1在数码管处显示设置速度,2在数码管处显示KPP参数,3在数码管处显示KII参数,4在数码管处显示KDD参数LEDBITDB3;数码的列位,0,1,2,3KEYDB?;1或2,按下了1号键,则置1,按下了2号键则置2TEMP1DW00FFH;临时变量BUFDB8DUP(?);缓冲区DATAENDS;代码段CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AX;主程序MAIN:MOVDX,OFFSETTABLE1MOVAH,09HINT21HCALLINIT ;程序初始化;开始处理M1:MOVAL,TS;判断采样周期到否?SUBAL,TCJNCM1;没到则继续等待MOV AX,SPEC CALL DECSHOW ;输出转速MOV DX,OFFSETTABLE3MOV AH,09HINT 21H ;输出空格,调整格式MOVTC,00H;采样周期到,将采样周期变量清0MOVAL,ZVVMOVAH,00HMOVYK,AXCALLPID;调用PID子程序,得到控制量CKMOVAL,CK;把控制量转化成PWM输出SUBAL,80HJCIS0MOVAAAA,ALJMPCOUIS0:MOVAL,10H;电机的启动值不能低于10HMOVAAAA,ALCOU:MOVAL,7FHSUBAL,AAAAMOVBBB,ALMOVAX,YK;将反馈值YK送到屏幕显示MOVDI,OFFSETCSPDMOV[DI],AXCALLDECSHOWMOVDL,0DH;回车MOVAH,02HINT21HCALLKEYSCANMOVAH,1INT16HJZM1EXIT:CALLDESTROY;销毁程序,恢复现场,停止电机运转MOVAX,4C00HINT21H;键盘扫描子程序KEYSCANPROCNEARPUSHAXPUSHDXMOVAX,DATAMOVDS,AX BEGIN:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键JNZGETKEY1;有键按下则跳置GETKEY1 GETKEY1:CALLDIS;显示刷新CALLDALLY1CALLDALLY1CALLCLEAR;清屏CALLCCSCAN;再次扫描按键JNZGETKEY2;有键按下则跳置GETKEY2JMPBEGIN;否则跳回开始继续循环GETKEY2:MOVCH,0FEHMOVCL,00H;设置当前检测的是第几列COLUM:MOVAL,CH;选取一列,将X1~X4中一个置0MOVDX,MYIO_AOUTDX,ALINAL,DX LP1:TESTAL,01H;是否为第1行JNZLP2;不是则继续判断MOVAL,00H;设置第1行第1列的对应的键值JMPKCODE LP2:TESTAL,02H;是否为第2行JNZLP3;不是则继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODE LP3:TESTAL,04H;是否为第3行JNZLP4;不是则继续判断MOVAL,08H;设置第3行第1列的对应的键值JMPKCODE LP4:TESTAL,08H;是否为第4行JNZNEXT;不是则继续判断MOVAL,0CH;设置第4行第1列的对应的键值 KCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值CALLINPUTDEAL;保存按键值 PUSHAXKON:CALLDIS;显示刷新CALLCLEAR;清屏CALLCCSCAN;扫描按键,判断按键是否弹起JNZKON;未弹起则继续循环等待弹起POPAX NEXT:INCCL;当前检测的列数递增MOVAL,CHTESTAL,08H;检测是否扫描到第4列JZENDKEYSCAN;是则跳回到开始处 ROLAL,1;没检测到第4列则准备检测下一列MOVCH,ALJMPCOLUM;KERR:;JMPBEGIN ENDKEYSCAN:POPDXPOPAXRETKEYSCANENDP;按键处理子程序INPUTDEALPROCNEAR CMPAL,0JZINPUTZEROCMPAL,1JZINPUTONECMPAL,2JZINPUTTWOJMPENDINPUTINPUTZERO:;按小键盘0,执行功能转换MOVDI,OFFSETKEYMOVAL,0MOV[DI],ALMOVSI,OFFSETSHOWTYPEMOVAL,[SI]CMPAL,4JZISFOURADDAL,1MOV[SI],ALJMPENDINPUTISFOUR:MOVAL,0MOV[SI],ALJMPENDINPUTINPUTONE:;按小键盘1,根据功能键,增加参数的值MOVDI,OFFSETKEYMOVAL,1MOV[DI],ALCALLKDEAL;调用参数处理函数JMPENDINPUT INPUTTWO:;按小键盘2,根据功能刍,减少参数的值MOVDI,OFFSETKEYMOVAL,2MOV[DI],ALCALLKDEAL;调用参数处理函数JMPENDINPUTENDINPUT:RETINPUTDEALENDP;ASPD,KPP,KII,KDD参数修改子程序KDEALPROCNEARMOVSI,OFFSETSHOWTYPEMOVAL,[SI]CMPAL,1;功能1,更改速度JZDEALASPDCMPAL,2;功能2,更改KPPJZDEALKPPCMPAL,3;功能3,更改KIIJZDEALKIICMPAL,4;功能4,更改KDDJZDEALKDDJMPENDKDEAL ;修改ASPD(设置速度)DEALASPD:;根据按键修改SPECMOVSI,OFFSETKEYMOVAL,[SI]CMPAL,1;如果按了小键盘1,速度就增加1JZINCSPECCMPAL,2JZDECSPEC;如果按了小键盘2,速度就减少1JMPENDKDEALINCSPEC:MOVSI,OFFSETSPECMOVDX,[SI]INCDX;速度加1MOV[SI],DXJMPENDKDEALDECSPEC:MOVSI,OFFSETSPECMOVDX,[SI]DECDX;速度减1MOV[SI],DXJMPENDKDEAL ;修改KPPDEALKPP:MOVSI,OFFSETKEYMOVAL,[SI]CMPAL,1;如果按的是一号键,则跳转到INCKPP处,KPP加5JZINCKPPCMPAL,2;如果按的是二号键,则跳转到DECKPP处,KPP减5JZDECKPPJMPENDKDEALINCKPP:MOVSI,OFFSETKPPMOVDX,[SI]MOVAX,5HADDDX,AX;KPP加5MOV[SI],DXJMPENDKDEALDECKPP:MOVSI,OFFSETKPPMOVDX,[SI]MOVAX,5HSUBDX,AX;KPP减5MOV[SI],DXJMPENDKDEAL ;修改KIIDEALKII:MOVSI,OFFSETKEYMOVAL,[SI]CMPAL,1;如果按了1号键,则跳转到INCKII标号处,KII加1JZ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024高考地理一轮复习第五章第1讲自然地理环境的整体性教案含解析新人教版
- 校长在寒假散学典礼上讲话:拥抱寒假开启多元成长之旅
- 小学一年级美术教学计划
- 《在细雨中呼喊》
- 施工防火安全控制措施
- 2024年湄洲湾职业技术学院高职单招语文历年参考题库含答案解析
- 二零二五年度施工单位与监理人员劳动合同范本3篇
- 二零二五版二手汽车买卖合同附带保险及保养服务样本3篇
- 《科幻小说赏析与写作》 课件 第5、6章 “反乌托邦”的警示与预言-《一九八四》;“外星文明”的善意与恶行-《安德的游戏》
- 二零二五年度船员劳动合同与船舶航行安全应急演练服务合同3篇
- 企业反恐安全经费使用制度
- 痛风课件教学
- 学校食堂从业人员培训制度
- 中国邮票JT目录
- 脑疝观察及护理
- 【学易金卷】2023-2024学年四年级数学上册期末全真模拟提高卷(三)(答题卡)(北师大版)
- 部编 2024版历史七年级上册期末(全册)复习卷(后附答案及解析)
- 科研平台设施建设方案
- 四川省成都市2024年初中学业水平考试生物学试卷
- 山东省济南市历城区历城第二中学2025届高一数学第一学期期末监测模拟试题含解析
- 供应链安全培训教材课件
评论
0/150
提交评论