2017毕业论文-小功率直流电机的测速和控制.doc_第1页
2017毕业论文-小功率直流电机的测速和控制.doc_第2页
2017毕业论文-小功率直流电机的测速和控制.doc_第3页
2017毕业论文-小功率直流电机的测速和控制.doc_第4页
2017毕业论文-小功率直流电机的测速和控制.doc_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

陕西理工学院毕业设计 第 1 页共 49 页 小功率直流电机的测速和控制小功率直流电机的测速和控制 摘要摘要 本设计采用两片 MCU(AT89S52),完成了小型直流电机转速的采集、计算、显示、键盘设定,并将非 均匀采样情况下的增量式积分分离 PID 控制算法应用于直流电机的 PWM 调速,实现了对电机转速的测量和控制,解 决了通常低采样周期时系统的超调以及 PID 算法的积分饱和问题。 关键词关键词 转速 PID 控制 mcu AT89S52 PWM MeasuringMeasuring AndAnd ControllingControlling TheThe RotationalRotational SpeedSpeed OfOf SmallSmall PowerPower DCDC ElectromotorElectromotor ZHANGZHANG Wu-jiangWu-jiang (Grade 02,Class 2,Major Electronic and Information Engineering,Shaanxi University of Technology,Hanzhong 723000,Shaanxi) Tutor,Lu chao AbstractAbstract This design use two set of MCU(AT89S52) , has completed small DC electromotor rotational speed sampling, calculating,displaying, the keyboard setting, And has applied the PID control theoretics to the modulation of PWM rotational speed of DC electromotor, measuring and the controlling the rotational speed of the electromotor, has solved out modulation and PID algorithm integral saturated problem. KeywordsKeywords Rotational Speed;PID control;mcu(AT89S52);PWM 陕西理工学院毕业设计 第 2 页共 49 页 目录 引言 4 1 设计方案论证 .4 1.1 系统结构方案论证4 1.2 转速测量方案论证4 1.3 电机驱动方案论证5 1.4 键盘显示方案论证5 1.5 PWM 软件实现方案论证5 2 系统原理框图设计 .6 3 各模块的分析、计算与硬件电路设计 .6 3.1 速度测量电路的设计6 3.1.1 转速/频率转换电路的设计6 3.1.2 脉冲滤波整形电路的设计6 3.2 电机驱动电路的设计3.7 3.3 LCD 显示电路与单片机的接口设计8 5 系统各部分子功能程序设计 .10 5.1 电机转速测量程序设计10 5.2 键盘程序设计11 5.3 LCD 显示子程序的设计411 6 数字 PID 及其算法的改进 .13 6.1 PID 控制基本原理13 6.2 三个基本参数 Kp,Ti,Td 在实际控制中的作用研究14 陕西理工学院毕业设计 第 3 页共 49 页 6.3 数字 PID 控制算法114 6.4 PID 算法的改进, “饱和”作用的抑制215 6.5 PID 控制算法的单片机程序实现17 7 PWM 信号的单片机程序实现 .17 8 系统的调试过程与测试 17 8.1 转速度测量部分调试.17 8.2 PID 各项系数赋初值 .17 8.3 实验调试和确定 PID 算法各项系数 18 8.3.1 赋初值调试分析。18 8.3.2 修改 PID 各项系数值调试分析 .18 8.3.3 PID 各项系数值的确定 18 9 结束语 .19 注释 1.19 致谢: 19 参考文献 19 附录 1:硬件总图 .20 附录 2:程序清单: .21 陕西理工学院毕业设计 第 4 页共 49 页 引言引言 目前见到的许多关于直流电机的测速与控制类文献中,虽然能实现直流电机的无级调速,但还 存在一些问题,如无法与计算机直接接口,许多较为复杂的控制算法无法在不增加硬件成本的情况 下实现,控制器的人机界面不理想。总的来讲,控制器的智能化程度不高,可移植性差。虽然采用 PWM 芯片来实现电机无级调速的方案成本较低,但当控制器针对不同的应用场合增加多种附加功能 时,其灵活性不够,而且反而增加硬件的成本5。还有一些使用 PLC 控制器或高档处理器芯片 (如 DSP 器件)的文献,它们虽然具有较高的控制性能,但由于这些高档处理器价格过高,需要更 多的外围器件,因此也不具备在通常情况下大规模使用的条件。从发展趋势上看,总体的研究方向 是提出质量更高的算法和调速方案,以及在考虑成本要求的前提下选择适合这种算法的核心控制器。 1 1 设计方案论证设计方案论证 根据设计任务,要求调速采用 PID 控制器,因此需要设计一个闭环直流电机控制系统。该系统 采用脉宽调速,使电机速度等于设定值,并且实时显示电极的转速值。通过对设计功能分解,设计 方案论证可以分为:系统结构方案论证,速度测量方案论证,电机驱动方案论证,键盘显示方案论 证,PWM 软件实现方案论证。 1.11.1 系统结构方案论证系统结构方案论证 方案一:采用一片单片机(AT89S52)完成系统所有测量、控制运算,并输出 PWM 控制信号。 方案二:采用两片单片机(AT89S52),其中一片做成 PID 控制器,专门进行 PID 运算和 PWM 控 制信号输出;另一片则系统主芯片,完成电机速度的键盘设定、测量、显示,并向 PID 控制器提供 设定值和测量值,设定 PID 控制器的控制速度等。 方案一的优点是系统硬件简单,结构紧凑。但是其造成 CPU 资源紧张,程序的多任务处理难度 增大,不利与提高和扩展系统性能,也不利于向其他系统移植。方案二则与方案一相反,虽然硬件 增加,但在程序设计上有充分的自由去改善速度测量精度,缩短测量周期,优化键盘,显示及扩展 其它功能。与此同时,PID 控制算法的实现可以精益求精,对程序算法或参数稍加改动即可移植到 其他 PID 控制系统中。因此通过比较,选择方案二。 1.21.2 转速测量方案论证转速测量方案论证 方案一:采用记数的方法。具体是通过单片机记单位时间 S(秒)内的脉冲数 N,每分钟的转 速:M=N/S60。 方案二:采用定时的方法。是通过定时器记录脉冲的周期 T,这样每分钟的转速:M=60/T。 比较两个方案,方案一的误差主要是1 误差(量化误差) ,设电机的最低设计转速为 120 转/ 陕西理工学院毕业设计 第 5 页共 49 页 分,则记数时间 S=1s,所以其误差得绝对值|=|(N1)/S60-N/S60|=60(转/分) ,误差计 算公式表明,增大记数时间可以提高测量精度,但这样做却增大了速度采样周期,会降低系统控制 灵敏度。而方案二所产生的误差主要是标准误差,并且使采样时间降到最短,误差 =60/(T1)-60/T,设电机速度在 1206000 转/分之间,那么 0.01sT0.5s,代入公式 得:0.00024|0.6(转/分) 。由此明显看出,方案二在测量精度及提高系统控制灵敏度等方 面优于方案一,所以本设计采用方案二。 1.31.3 电机驱动方案论证电机驱动方案论证 方案一:采用专用小型直流电机驱动芯片。这个方案的优点是驱动电路简单,几乎不添加其它 外围元件就可以实现稳定的控制,使得驱动电路功耗相对较小,而且目前市场上此类芯片种类齐全, 价格也比较便宜。 方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对电机的速度进行调整。这 个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性 不高。 方案三:采用由达林顿管组成的 H 型 PWM 电路。用单片机控制达林顿管使之工作在占空比可调 的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H 型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广 泛采用的 PWM 调速技术。 通过比较和对市场因素的考虑,本设计采用方案一,使系统的设计核心在 PID 控制上。 1.41.4 键盘显示方案论证键盘显示方案论证 方案一:采用 44 键盘,可直接输入设定值。显示部分使用 4 位数码管,优点是显示亮度大, 缺点是功耗大,不符合智能化趋势而且不美观。 方案二:使用 4 个按键,进行逐位设置。显示部分是使用支持中文显示的 LCD,优点是美观大 方,有利于人与系统的交互,及显示内容的扩展;缺点是成本高,抗干扰能力教差。 为了系统容易扩展、操作以及美观,本设计完全采用方案二。 1.51.5 PWMPWM 软件实现方案论证软件实现方案论证 脉宽调制的方式有三种:定频调宽、定宽调频和调宽调频。本设计采用了定频调宽方式,采用 这种方式的优点是电动机在运转时比较稳定,并且在采用单片机产生 PWM 脉冲的软件实现上比较方 便。对于实现方式则有两种方案。 方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在 几个 us。 陕西理工学院毕业设计 第 6 页共 49 页 单片机(速度的 测量计算、输入 设定及系统控制) 单片机(PID 运算控制器、 PWM 模拟发生器) 电机 速度采集电路 电机驱动电路 键 盘 显示器 方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定 的误差。但是基于不占用定时器资源,且对于直流电机,采用软件延时所产生的定时误差在允许范 围。由于本设计采用了两片 AT89S52 单片机,MCU 资源充足,因此选择方案一。 2 系统原理框图设计 系统原理框图如图 2.1 所示,是一个带键盘输入和显示的闭环测量控制系统。主体思想是通 过系统设定信息和测量反馈信息计算输出控制信息。 图 2.1 系统原理框图 3 各模块的分析、计算与硬件电路设计 3.13.1 速度测量电路的设计速度测量电路的设计 3.1.13.1.1 转速转速/ /频率转换电路的设计频率转换电路的设计 理论上,是先将转速转化为某一种电量来测量,如电压,电流等。设计中将转速测量转化为电 脉冲频率的测量。基于这一思想,可以采用一对霍尔感应传感器,使输出信号的一只在转轮一侧固 定,另一只则粘在对应位置的转轮上,这样,电机每转一圈,传感器将会输出一个脉冲,然后将脉 冲放大、整形后即可通过单片机测量其频率求出转速。实际实验中,由于市场采购原因,暂用三极 管输出型红外光电耦合器代替霍尔传感器。如图 3.1 所示,在电机转轮一处开孔,这样,每转一圈, 三级管(红外接收头)透光导通一次,OUT 端输出一个上脉冲,即完成了转速频率的转换 3.1.23.1.2 脉冲滤波整形电路的设计脉冲滤波整形电路的设计 由于电机在转动的过程中有很大的晃动,而且本设计中测量装置做工粗糙,因此所获得的脉冲 信号参杂有高频噪声或误动脉冲。为了提高测量的准确,且尽可能地减少错误,设计中如图 3.2 所 示 OUT 输出端加一电容接地。为了既能抑制噪声又不影响测量,电容值 C 的选择很重要。根据实际 测量,设计中所使用的直流电机转速可达 6000 转/分。其所产生的脉冲周期 T=1/(6000/60) S=0.01S,一个周期内,脉冲持续时间约为 1/8T=0.00125S,低电平时间约为 7/8T=0.00875S,由于 接收头感光导通电阻很小,所以电容迅速充电,当低电平到来时开始放电,为保证下一个脉冲的检 陕西理工学院毕业设计 第 7 页共 49 页 M B1 Motor Q1 亮亮亮亮亮 DS1 亮亮亮亮亮 470 R1 510 R2 PWM(亮亮亮亮亮亮亮 CGND OUT VCC 510 R2 P3.2 Q1 亮亮亮亮亮 VCC 0.001uF C1SN7406N SN7406N 测,放电时间 t 应小于低电平持续时间 7/8T,根据电路,t=R2C=(R0) ;入口: R0,R1 指向的字节存储单元, 出口:C SUB3C:INC R0 INC R0 INC R1 INC R1 CLR C MOV A,R1 SUBB A,R0 DEC R1 DEC R0 MOV A,R1 SUBB A,R0 DEC R1 DEC R0 MOV A,R1 SUBB A,R0 RET ;- ;定时器 0 中断服务自程序 ;每MS 中断一次,用于给采集的脉冲周 ;期记时,定时器益处,T_PULSE 加 INTT0: CLR EX0 PUSH ACC MOV TL0,#0B0H MOV TH0,#3CH ;50MS 定时初值 INC T_PULSE CLR C MOV A,T_PULSE SUBB A,#40 ;小于每 2 秒一转,作零计 JNC LOWSPEED MOV SYSTIME,#00H POP ACC SETB EX0 RETI LOWSPEED: CLR EX0 CLR TR0 CLR START_PULSE ;不用检测下一周期下降沿 CLR A ;清零测量数据存储区 MOV SYSTIME,A MOV 54H,A MOV 55H,A MOV 56H,A MOV 57H,A MOV MEAVAL,A MOV MEAVAL+1,A MOV MEAVAL+2,A MOV T_PULSE,A SETB TOPIDM SETB BF NOP CLR TOPIDM JB DF,$ ;是否发送 SETB TOPIDM MOV P2,MEAVAL CLR BF ;发送完毕 JB ACK,$ ;对方是否接收完毕 SETB BF NOP CLR TOPIDM JB DF,$ SETB TOPIDM MOV P2,MEAVAL+1 CLR BF JB ACK,$ SETB BF NOP CLR TOPIDM JB DF,$ SETB TOPIDM MOV P2,MEAVAL+2 CLR BF 陕西理工学院毕业设计 第 28 页共 49 页 JB ACK,$ SETB BF LCALL SD_D SETB EX0 POP ACC RETI LJMP MAIN ;定时器中断:系统定时 INTT1: CLR EX0 PUSH ACC MOV TL1,#0B0H MOV TH1,#3CH ;50MS 定时初值 MOV A,SYSTIME ADD A,#1 CLR C MOV SYSTIME,A CJNE A,#10,NO_OV1 ;系统时间 0.5 秒钟 MOV SYSTIME,#00H NO_OV1: JC NO_OV MOV SYSTIME,#00H CLR TR0 CLR START_PULSE CLR A MOV 54H,A MOV 55H,A MOV 56H,# 06H MOV 57H,#00H MOV MEAVAL,#2H MOV MEAVAL+1,#60H MOV MEAVAL+2,A MOV T_PULSE,A SETB TOPIDM SETB BF NOP CLR TOPIDM JB DF,$ ;是否发送 SETB TOPIDM MOV P2,MEAVAL CLR BF ;发送完毕 JB ACK,$ ;对方是否接收完毕 SETB BF NOP CLR TOPIDM JB DF,$ SETB TOPIDM MOV P2,MEAVAL+1 CLR BF JB ACK,$ SETB BF NOP CLR TOPIDM JB DF,$ SETB TOPIDM MOV P2,MEAVAL+2 CLR BF JB ACK,$ SETB BF LCALL SD_D MOV TL0,#0B0H MOVTH0,#3CH ;50MS 定时初值 NO_OV: POP ACC SETB EX0 RETI LJMP MAIN ;将压缩 BCD 码转换成非压缩 BCD 码, 入口:R4,R5,输出,54H57H ;影响资源:ACC B_NB: MOV A,R5 ANL A,#0FH MOV 57H,A MOV A,R5 ANL A,#0F0H SWAP A MOV 56H,A MOV A,R4 ANL A,#0FH MOV 55H,A MOV A,R4 ANL A,#0F0H SWAP A MOV 54H,A RET LJMP MAIN ;C_CYCLE:入口:R0 指向的字节数据,出 口:R3,R4,R5 ;根据定时值,计算电机转动周期,结果在 R3,R4,R5 中 ;影响资源:ACC,R0,CYCLE,R2R7 ;调用程序:MULD C_CYCLE: MOV CYCLE,R0 INC R0 INC R0 MOV A,R0 CLR C SUBB A,#0B0H MOV CYCLE+2,A DEC R0 MOV A,R0 SUBB A,#3CH MOV CYCLE+1,A CLR A MOV R2,A MOV R3,CYCLE MOV R6,#0C3H ;乘以 50000(微秒) MOV R7,#50H LCALL MULD MOV A,CYCLE+2 CLR C 陕西理工学院毕业设计 第 29 页共 49 页 INC R0 ADD A,R5 MOV R0,A DEC R0 MOV A,R4 ADDC A,CYCLE+1 MOV R0,A DEC R0 MOV A,R3 ADDC A,#0H MOV R0,A ;速度的周期存放在R0(3 字节)中 RET ;CALCULATE_S: 用 60000000 除以周期, ;得 1 分钟内的转速 ;入口:(R0) , 出口:R,R ;影响资源: ACC,R0R7,28H,29H, AH CALCULATE_S: MOV R0,#82H ;除法初始化 MOV A,R0 MOV R5,A DEC R0 MOV A,R0 MOV R4,A DEC R0 MOV A,R0 MOV R3,A MOV R0,#97H MOV A,#00H MOV R0,A DEC R0 MOV A,#87H MOV R0,A DEC R0 MOV A,#93H MOV R0,A DEC R0 MOV A,#3H MOV R0,A ;被除数为:60000000 CLR A DEC R0 MOV R0,A DEC R0 MOV R0,A DEC R0 MOV R0,A DEC R0 MOV R0,A ;清余数存储单元 CLR C MOV R2,#20H ;设置移位次数,32 次 MOV R7,#8H ;设置移位字节数 MOV R0,#97H YIWEI: MOV A,R0 RLC A MOV R0,A DEC R0 DJNZ R7,YIWEI MOV R7,#8H CLR C MOV R0,#93H MOV A,R0 SUBB A,R5 MOV 28H,A DEC R0 MOV A,R0 SUBB A,R4 MOV R6,A DEC R0 MOV A,R0 SUBB A,R3 MOV 2AH,A DEC R0 MOV A,R0 SUBB A,#0H MOV 29H,A JC TO_YIWEI MOV R0,#97H INC R0 ;商加 1 MOV R1,#90H MOV R1,A INC R1 MOV R1,2AH INC R1 MOV A,R6 MOV R1,A INC R1 MOV R1,28H TO_YIWEI: CLR C MOV R0,#97H DJNZ R2,YIWEI CLR C ;四舍五入,余数*2-除数,如果没有借位商加 1 MOV A,28H RLC A MOV 28H,A MOV A,R6 RLC A MOV R6,A MOV A,2AH RLC A MOV 2AH,A MOV A,29H RLC A MOV 29H,A CLR C MOV A,28H SUBB A,R5 MOV A,R6 SUBB A,R4 陕西理工学院毕业设计 第 30 页共 49 页 MOV A,2AH SUBB A,R3 MOV A,29 SUBB A,#0H JC FINISH_SUB MOV R0,#97H INC R0 DEC R0 MOV A,R0 ADDC A,#00H MOV R0,A DEC R0 MOV A,R0 ADDC A,#00H MOV R0,A DEC R0 MOV A,R0 ADDC A,#00H MOV R0,A FINISH_SUB: MOV R0,#97H MOV A,R0 ;保存结果 MOV R7,A DEC R0 MOV A,R0 MOV R6,A RET ;:双字节二进制无符号数乘法 ;入口:被乘数在 R2、R3 中,乘数在 R6、 R7 中。 ;出口:乘积在 R2、R3、R4、R5 中。 ;影响资源:PSW、A、B、R2R7 堆栈需求: 字节 MULD: MOVA,R3;计算 R3 乘 R7 MOVB,R7 MULAB MOVR4,B ;暂存部分积 MOVR5,A MOVA,R3 ;计算 R3 乘 R6 MOVB,R6 MULAB ADDA,R4 ;累加部分积 MOVR4,A CLRA ADDCA,B MOVR3,A MOVA,R2 ;计算 R2 乘 R7 MOVB,R7 MULAB ADDA,R4 ;累加部分积 MOVR4,A MOVA,R3 ADDCA,B MOVR3,A CLRA RLCA XCHA,R2 ;计算 R2 乘 R6 MOVB,R6 MULAB ADDA,R3 ;累加部分积 MOVR3,A MOVA,R2 ADDCA,B MOVR2,A RET LJMP MAIN ;:双字节十六进制整数转换成双字 ;节码整数 ;入口条件:待转换的双字节十六进制整数 ;在 R6、R7 中。 ;出口信息:转换后的三字节码整数 ;在 R3、R4、R5 中。 ;影响资源:PSW、A、R2R7 堆栈需求: 字节 HB2:CLRA ;码初始化 MOVR3,A MOVR4,A MOVR5,A MOVR2,#10H ;转换双字节十六进制整数 HB3:MOVA,R7 ;从高端移出待转换数的一位到 CY 中 RLCA MOVR7,A MOVA,R6 RLCA MOVR6,A MOVA,R5 ;码带进位自身相加,相当于乘 ADDCA,R5 DA A ;十进制调整 MOVR5,A MOVA,R4 ADDCA,R4 DA A MOVR4,A MOVA,R3 ADDCA,R3 MOVR3,A ;双字节十六进制数的万位 数不超过,不用调整 DJNZR2, HB3;处理完 RET NOP LJMP MAIN ; INITIL: LCD 初始化子程序 ;影响资源:ACC ,PSW,R0,R1 INITIL: LCALL DELAY;延时 ;首先选择基本指令集 MOV A, #30H ;30-基本指令操作 LCALL INPUT LCALL DELAY01 陕西理工学院毕业设计 第 31 页共 49 页 MOV A, #01H;指令#01H 为:清除屏幕文字,把地址指针指向 00H 元 LCALL INPUT LCALL DELAY01 MOV A, #06H ;指定在资料写入或读取时,设定游标的移动方 向及指定显示的移位 LCALL INPUT LCALL DELAY01 RET ;SEARCH ADDRESS ;目的是为了转换地址单元为 DDRAM 地址单元, 以方便 ;定义显示位置 ;汉字显示 DDRAM 位置为:第一行:80H- 87H;第二行:90H-97H DEADD: PUSH DPH ;地址转换子程序 PUSHDPL PUSHACC MOVDPTR,#LINE_ADD;LINE- ADD 为地址表指针 MOVA,FIRST_LIN MOVCA,A+DPTR ADDA,FIRST_ADD MOVSTART_ADD,A POPACC POPDPL POPDPH RET LINE_ADD: DB 00H,80H,90H,88H,98H.00H NOP LJMP MAIN ;检测 LCD 是否忙,可写指令或数据 CHK_BUSY: CLR RS ;读忙状态子程序 SETB RW SETB E HEHE1: JB P1.7,HEHE1 CLR E RET ;写数据子程序 DISPL: LCALL CHK_BUSY ;P3-CONTRALI/O NOP ;P3=11111001B RS=1 WRITE DATA SETBRS CLRRW SETB E;E=E(I/O) MOV P1, A;P1=DATA(I/O) LCALL DELAY01 NOP CLR E NOP MOV P1,#0FFH RET ;写指令子程序 INPUT: LCALL CHK_BUSY ;以确保上一指令/数据模块已经接收处理完 ;P3-CONTRALI/O NOP ;P3=11111000BR ;S=0WRITEINSTRUTION CLR RS CLR RW SETB E;E=E(I/O) MOV P1, A;P1=DATA(I/O) LCALL DELAY01 NOP CLR E NOP MOV P1,#0FFH RET ;LCD 显示程序用延迟子程序 DELAY: MOV R5,#03H D_C0: MOV R6, #0FFH D_C1: MOV R7, #0FFH D_C2: DJNZ R7, D_C2 DJNZ R6, D_C1 NOP NOP DJNZ R5, D_C0 RET DS3S: MOV R4,#0AH LOP_DS2S: LCALL DELAY DJNZ R4,LOP_DS2S RET DELAY01: MOV R6, #6 D5: MOV R7, #08H D6: DJNZ R7, D6 DJNZ R6, D5 RET ;- DELAY02: MOV R6, #6 D52: MOV R7, #18H D62: DJNZ R7, D62 DJNZ R6, D52 RET ;清除图形显示 CGRAM NOP LJMP MAIN NOP DIS01:PUSH PSW ;显示问候语 SETB RS0 MOV FIRST_ADD,#00H MOV FIRST_LIN,#01H MOV DPTR, #TAB1 MOV WORD_WID,#04H MOV WORD_LIN,#02H MOV START_ADD,#00H LCALL WORD_DISP LCALL DELAY01 POP PSW 陕西理工学院毕业设计 第 32 页共 49 页 RET SD_D:PUSH PSW ;显示设定值和测量值数据 SETB RS1 SETB RS0 MOV FIRST_ADD,#04H MOV FIRST_LIN,#01H MOV R0,#50H MOV WORD_WID,#04H MOV WORD_LIN,#02H MOV START_ADD,#00H LCALL BYTERAM_DISP LCALL DELAY01 LCALL DELAY01 POP PSW RET DIS02: PUSH PSW SETB RS0 MOV FIRST_ADD,#06H MOV FIRST_LIN,#01H MOV DPTR,#TAB6 MOV WORD_WID,#01 MOV WORD_LIN,#02H LCALL WORD_DISP LCALL DELAY01 POP PSW RET NOP LJMP MAIN D200MS: PUSH PSW PUSH ACC SETB RS0 ;使用第三组寄存器 MOV R5,#15H LOOP1: ACALL DS10MS DJNZ R5,LOOP1 POP ACC POP PSW RET ;汉字显示子程序 WORD_DISP: MOV R1,WORD_WID WORD10: LCALLDEADD ;调用调整地址单元子程序,通过 FIRST_ADD, FIRST_LIN 计算出 START_ADD, MOV A, START_ADD ;设定 DDRAM 地址,显示位置地址 LCALL INPUT WORD11: CLR A ;因为要连续输入机内码高位(区码) 、低位 (位码) MOVC A, A+DPTR ;所以要输入两次数据,如果是字符就是输 ;入两个字符字符代码可以查看说明书 LCALL DISPL ;DATAINPUT INC DPTR ;显示地址会自动加一,如果连续写就不用 ;再输入地址,空白可用某空白汉字或字符 ;代替 CLR A MOVC A, A+DPTR LCALL DISPL ;DATAINPUT LCALL DELAY01 INC DPTR DJNZR1,WORD11 MOVR1,WORD_WID ;调整显示长度 INC FIRST_LIN ;跳到下一行 DJNZWORD_LIN,WORD10 RET ;字符显示自程序 BYTERAM_DISP: ;将 RAM 中的数据写入 LCD。 MOV TEMPR0,R0 ;保存指针 MOV R1,WORD_WID BYTE20: LCALL DEADD MOV A,START_ADD LCALL INPUT LCALL DELAY01 BYTE21: MOV A,R0 ;R0 为全局控制指针 MOV DPTR,#DATAB MOVC A, A+DPTR LCALL DISPL LCALL DELAY01 INC R0 DJNZ R1,BYTE21 MOV R1,WORD_WID INC FIRST_LIN DJNZ WORD_LIN,BYTE20 MOV R0,TEMPR0 ;恢复指针 RET DATAB: DB 0,1,2,3,4,5,6,7,8,9,0 LJMP MAIN TAB6: DB 0D7H,0AAH, 0D7H,0AAH, 0A3H,0AFH, 0B7H,0D6H ;转/分 TAB5:DB0,0,0,0,0,0,0,0,0,0,0,0,0 TAB:DB0BBH,0B6H,0D3H,0ADH,0CAH,0B 9H,0D3H,0C3H,0D6H,0B1H,0C1H,0F7H DB0B5H,0E7H,0BBH,0FAH,0BFH,0D8H,0D 6H,0C6H,0CFH,0B5H,0CDH,0B3H DB 0A3H,0A1H,20H,20H,20H,20H ;欢迎使用直流电机控制系统 DB 47H,6FH,6CH,64H,65H,6EH,20H,50H 61H,6CH,6DH,20H,54H,45H,43H,48H TAB1:DB 0C9H,0E8H,0B6H,0A8H, 0D6H,0B5H ,0A3H,0BAH ;设定值 DB 0CAH,0B5H,0B2H,0E2H, 0D6H,0B5H, 陕西理工学院毕业设计 第 33 页共 49 页 0A3H,0BAH ,00H,00H,0H,0H,0H;实测值 NOP LJMP MAIN END 数字式 PID 控制算法程序 ;T、TD、TI、KP 依次从 30H,33H,36H, ;39H 开始。 ;A,B,C 的值依次存在 BLOCK1, ;BLOCK2,;BLOCK3 的地址里 ;这里 R(K)给的是定值 TIMEH EQU 2AH ;定时初值高位暂存区 TIMEL EQU 2BH ;定时初值低位暂存区 TIMEH1 EQU 28H ;定时初值高位二级暂存区 TIMEL1 EQU 29H ;定时初值低位二级暂存区 BLOCK1 EQU 43H ; A BLOCK2 EQU 46H ; B BLOCK3 EQU 49H ; C FK EQU 90H ;为误差加权值,为 F(K)=A1*E(K) UK EQU 4CH ;存结果 UK RK EQU 50H ;设定值 RK EK EQU 53H ;存放偏差值 E(K)的始址 EK1 EQU 56H ;存放 E(K-1)的始址 EK2 EQU 59H ;存放 E(K-2)的始址 CK EQU 5CH ;采样数据始址 BUFF EQU 60H ;暂存区 BUFF1 EQU 63H ;暂存区 1 BUFF2 EQU 66H ;暂存区 2 REC EQU 69H SUM_EK EQU 86H ;存放累加值 SUB_EK EQU 80H ;存放误差变化量 EE EQU 83H ;为克服饱和积分所设置的积分门限值 UK1 EQU 89H ;PID 输出 U(K-1) FK1 EQU 8CH ;FK1 为上一次误差加权值, 为 F(K-1)=A1*E(K-1) INT_M BIT 10H ;运算状态标志 A1 EQU 93H ;PD 运算在加速时,E(K)的加权值 B1 EQU 96H ;PD 运算在加速时 E(K-1)的加权值 A2 EQU 0A3H ;PD 运算在减速时,E(K)的加权值 B2 EQU 0A6H ;PD 运算在减速时 E(K-1)的加权值 TD1 EQU 9AH ;加速时 PD 运算的微分时间 TD2 EQU 0A0H ;减速是 PD 运算的微分时间 CO_SET_AC EQU 26H ;接收设定值的地址指针暂存单元 CO_MEA_AC EQU 27H ;接收测量值的地址指针暂存单元 PN BIT 11H ;正反控制标志(暂取消使用) PWMA BIT P2.0 ;PWM 输出(正转) PWMB BIT P2.1 ;PWM 输出(反转) ACK BIT P2.7 ;数据接收完毕 DF BIT P3.0 ;已经准备好数据接收标志, (输出) BF BIT P3.1 ;对方数据已发送标志(输入) ORG 0000H LJMP START ORG 03H LJMP INTX0 ORG 0BH LJMP INTT0 ORG 13H LJMP INTX1 ORG 1BH LJMP INTT1 ORG 30H START: MOV SP,#70H MOV CO_SET_AC,#RK MOV CO_MEA_AC,#CK CLR PWMA MOV TMOD,#11H MOV 3CH,#01H ;常数 1 的 BCD 码浮点数 MOV 3DH,#10H MOV 3EH,#00H MOV 40H,#01H ;常数 2 的 BCD 码浮点数 MOV 41H,#20H MOV 42H,#00H MOV 30H,#01H ;T 的 BCD 码浮点数 MOV 31H,#23H ;2.34 MOV 32H,#40H MOV 33H,#01H ;TD 的 BCD 码浮点数 MOV 34H,#21H ;2.16 MOV 35H,#60H MOV R0,#TD1 ;TD1 的 BCD 浮点数 MOV A,#01H MOV R0,A INC R0 MOV A,#38H ;3.84 陕西理工学院毕业设计 第 34 页共 49 页 MOV R0,A INC R0 MOV A,#40H MOV R0,A ;TD2 的 BCD 浮点数,减速运动时的 PD 运算参 数 TD MOV A,#01H MOV R0,A INC R0 MOV A,#11H ;1.11 MOV R0,A INC R0 MOV A,#10H MOV R0,A MOV 36H,#01H ;TI 的 BCD 码浮点数 MOV 37H,#10H ;1.02 MOV 38H,#20H MOV 39H,#01H ;KP 的 BCD 码浮点数 MOV 3AH,#10H ;1.02 MOV 3BH,#40H MOV R0,#EE MOV A,#02H MOV R0,A INC R0 MOV A,#64H MOV R0,A INC R0 MOV A,#00H ;EE 的 BCD 码浮点数 MOV R0,A ;100 MOV R0,#RK ;指向码浮点操作数 RK LCALL FCLR ;将其转换成二进制浮点操作数 MOV R0,#3CH LCALL BTOF MOV R0,#40H LCALL BTOF MOV R0,#39H ;指向 BCD 码浮点数 LCALL BTOF MOV R0,#36H ;指向码浮点操作数 TI LCALL BTOF ;将其转换成二进制浮点操作数 MOV R0,#33H ;指向码浮点操作数 TD LCALL BTOF ;将其转换成二进制浮点操作数 MOV R0,#30H ;指向码浮点操作数 T LCALL BTOF ;将其转换成二进制浮点操作数 MOV R0,#EE ;指向 EE LCALL BTOF MOV R0,#TD1 LCALL BTOF MOV R0,#TD2 LCALL BTOF MOV R1, #BUFF1 ;保存 30H 中的值 即 T 值 LCALL FMOVR0 MOV R1, #36H ;计算 A 值(1+T/TI+TD/T).KP LCALL FDIV MOV R1,#3CH ;常数 1 LCALL FADD MOV R0,#33H ;保存 33H 中的值 MOV R1,#BUFF LCALL FMOVR0 MOV R1,#BUFF1 LCALL FDIV MOV R1,#30H ;30H 里存的是 T/TI+1 LCALL FADD MOV R1,#39H LCALL FMUL MOV R1 ,#BLOCK1 ;将结果保存在 BLOCK1 中 LCALL FMOVR0 MOV R1,#BUFF1 ;30H 恢复原值 MOV R0,#30H LCALL FMOV MOV R1,#BUFF ;33H 恢复原值 MOV R0,#33H LCALL FMO MOV R0,#TD1 ;计算 A值 KP.(1+TD1/T) MOV R1,#BUFF LCALL FMOVR0 MOV R1,#30H LCALL FDIV MOV R1,#3CH LCALL FADD MOV R1,#39H LCALL FMUL MOV R1,#A1 LCALL FMOVR0 ;保存 A MOV R0,#BUFF MOV R1,#TD1 LCALL FMOVR0 MOV R0,#TD1 ;计算 B值 KP.TD1/T) MOV R1,#BUFF LCALL FMOVR0 MOV R1,#30H LCALL FDIV MOV R1,#39H LCALL FMUL MOV R1,#B1 ;保存 B值 MOV R0,#BUFF MOV R1,#TD1 陕西理工学院毕业设计 第 35 页共 49 页 LCALL FMOVR0 MOV R0,#TD2 ;计算 A2 值值 KP.(1+TD2/T) MOV R1,#BUFF LCALL FMOVR0 MOV R1,#30H LCALL FDIV MOV R1,#3CH LCALL FADD MOV R1,#39H LCALL FMUL MOV R1,#A2 LCALL FMOVR0 ;保存 A2 MOV R0,#BUFF MOV R1,#TD2 LCALL FMOVR0 MOV R0,#TD2 ;计算 B2 值 KP.TD2/T) MOV R1,#BUFF LCALL FMOVR0 MOV R1,#30H LCALL FDIV MOV R1,#39H LCALL FMUL MOV R1,#B2 ;保存 B2 值 MOV R0,#BUFF MOV R1,#TD2 LCALL FMOVR0 MOV R0,#40H ;计算 B 的值 KP.(1+2.TD/T) MOV R1,#33H LCALL FMUL MOV R1,#30H LCALL FDIV MOV R1,#3CH LCALL FADD MOV R1,#39H LCALL FMUL MOV R1,#BLOCK2 ;保存 B 值到 BLOCK2 中 LCALL FMOVR0 MOV R0,#39H ;计算 C 的值 KP.TD/T MOV R1,#33H LCALL FMUL MOV R1,#30H LCALL FDIV MOV R1,#BLOCK3 ;保存 C 值到 BLOCK3 中 LCALL FMOVR0 ;- ;参数计算完毕(A B C ) ;- MOV R0,#FK ;初始化将 FK,FK1 设初值为 0 LCALL FCLR MOV R0,#FK1 LCALL FCLR ;- MOV R0,#EK1 ;将 EK1,EK2 设初值 0 LCALL FCLR MOV R0,#EK2 LCALL FCLR MOV R0,#UK LCALL FCLR MOV R0,#CK LCALL FCLR MOV R0,#RK LCALL FCLR ;- MAIN: MOV TH0,#0B1H MOV TL0,#0E0H MOV TH1,#0ECH MOV TL1,#078H MOV TIMEH,#0FFH MOV TIMEL,#0F0H CLR PWMA SETB PT0 SETB PT1 SETB ET0 SETB ET1 SETB EA SETB IT0 SETB IT1 SETB EX0 SETB EX1 SETB TR0 LOP_MAIN: NOP SJMP LOP_MAIN NOP SJMP LOP_MAIN ;PD 运算子程序 P_PD: MOV R0,#EK MOV A,R0 JNB ACC.7,NO_SUBCA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论