基于PID的直流电机速度控制系统设计实验报告
PID仿真实验报告

PID仿真实验报告PID控制算法是一种重要的控制算法,被广泛应用于工业控制系统中。
本文通过仿真实验的方式,对PID控制算法进行了验证和分析。
一、实验目的1.了解PID控制算法的基本原理和调节方法;2. 掌握MATLAB/Simulink软件的使用,进行PID控制实验仿真;3.验证PID控制算法的稳定性和性能。
二、实验内容本次实验选择一个常见的控制系统模型,以电感驱动的直流电机控制系统为例。
通过PID控制算法对该系统进行控制,观察系统的响应特性。
三、实验步骤1.搭建电感驱动的直流电机控制系统模型,包括电感、直流电机、PID控制器等组成部分;2.设置PID控制器的参数,包括比例增益Kp、积分时间Ti、微分时间Td等;3.进行仿真实验,输入适当的控制信号,观察系统的响应曲线;4.调节PID控制器的参数,尝试不同的调节方法,观察响应曲线的变化,寻找合适的参数。
四、实验结果与分析1.首先,设置PID控制器的参数为Kp=1,Ti=1,Td=0,进行仿真实验。
观察到系统的响应曲线,并记录与分析曲线的特点;2.其次,调整PID控制器的参数,如增大比例增益Kp,观察系统的响应曲线的变化;3.最后,调整积分时间Ti和微分时间Td,观察系统的响应曲线的变化。
通过实验结果与分析,可以得到以下结论:1.PID控制算法能够有效地控制系统,并实现稳定的控制;2.比例增益Kp对系统的超调量有较大的影响,增大Kp可以减小超调量,但也会增加系统的稳定时间;3.积分时间Ti对系统的稳态误差有较大的影响,增大Ti可以减小稳态误差,但也会增加系统的超调量;4.微分时间Td对系统的响应速度有较大的影响,增大Td可以增加系统的响应速度,但可能会引起系统的振荡。
五、实验总结通过本次实验,我深入理解了PID控制算法的原理和调节方法。
同时,通过对实验结果的分析,我也了解了PID控制算法的稳定性和性能。
在实际工程应用中,需要根据具体的控制对象,合理选择PID控制器的参数,并进行调节优化,以获得理想的控制效果。
基于单神经元PID的直流电动机速度控制算法研究

LU N n c ag L u n WA G H n , H N a I a — hn , I Q a , N o g Z A G N n (c o l f n r ai nier g Wu i nvri ,in m n5 9 2 , hn) S h o o f m t nE g ei , y U ies y J g e 2 0 0 C ia Io o n n t a
第2 5卷 第 3 期
2 1 年 01
五邑大学学报 ( 自然科学版 )
J UR O NAL OF WUY U I R I Y (Naua c n e dt n) I N VE ST trl i c E io S e i
、 1 5 No3 r. 02 . Au . g 2 1 01
1 1 ・m、额定 功 率 1 ,起 动 转 矩 8 0gc 1 c g 6w 4 ・ m、起 动 电流 2 . A.传 递 函数 为 : 1 6
1
=
・
( ) 67、 B=01 [ _由 于 电动 机 驱 动 系 统 具 有 非 线 性 、时 变 性 以及 驱动 响 应 的 滞 . 0 . 4 0】 后 复 杂 性 ,并 且 易受 到各 种 干扰 ,故 电机 参 数 、 不 稳 定 . 测速 模 块 采 用 分 辨 率 为 2 0脉 冲/ 的增 量 式 旋转 编 码 器 .用 单 片 机 的外 部 中 断来 记 录 编码 器 输 0 转 出的脉 冲数 n 驱 动 轮 转 动 的 圈数 ,根 据 . 2 On ( 中 t 速 度 采 集 时 间 , d驱 动轮 直 径 ) 和 1 , O td 其 =n 为 ,得 到 电动 机 驱 动 轮速 度 ,将 v 反馈 给单 片机 计 算 ,实 现 闭环 控 制 .
pid控制实验报告[最新版]
![pid控制实验报告[最新版]](https://img.taocdn.com/s3/m/ab6b0408640e52ea551810a6f524ccbff121ca13.png)
pid控制实验报告pid控制实验报告篇一:PID控制实验报告实验二数字PID控制计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。
因此连续PID控制算法不能直接使用,需要采用离散化方法。
在计算机PID控制中,使用的是数字PID控制器。
一、位置式PID控制算法按模拟PID控制算法,以一系列的采样时刻点kT代表连续时间t,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分,可得离散PID位置式表达式:Tu T ?kpeu=para; J=0.0067;B=0.1; dy=zeros= y= -+ = k*ts; %time中存放着各采样时刻rineu_1=uerror_1=error;%误差信号更新图2-1 Simulink仿真程序其程序运行结果如表2所示。
Matlab输出结果errori = error_1 = 表2 例4程序运行结果三、离散系统的数字PID控制仿真1.Ex5 设被控对象为G?num 仿真程序:ex5.m%PID Controller clear all; close all;篇二:自动控制实验报告六-数字PID控制实验六数字PID控制一、实验目的1.研究PID控制器的参数对系统稳定性及过渡过程的影响。
2.研究采样周期T对系统特性的影响。
3.研究I型系统及系统的稳定误差。
二、实验仪器1.EL-AT-III型自动控制系统实验箱一台 2.计算机一台三、实验内容1.系统结构图如6-1图。
图6-1 系统结构图图中 Gc(s)=Kp(1+Ki/s+Kds) Gh(s)=(1-e)/s Gp1(s)=5/((0.5s+1)(0.1s+1)) Gp2(s)=1/(s(0.1s+1))-TS 2.开环系统(被控制对象)的模拟电路图如图6-2和图6-3,其中图6-2对应GP1(s),图6-3对应Gp2(s)。
图6-2 开环系统结构图1 图6-3开环系统结构图2 3.被控对象GP1(s)为“0型”系统,采用PI控制或PID控制,可使系统变为“I型”系统,被控对象Gp2(s)为“I型”系统,采用PI控制或PID控制可使系统变成“II型”系统。
实验四 PID校正

微分 — 积分
图 6.1 模拟 PID 控制系统原理框图
PI 控制器 —
被控对象
D 控制器
图 6.2 微分先行 PID 控制原理图
I 控制器 —
被控对象
PD 控制器
图 6.3 伪 PID 控制原理图
PID 控制器是一种线性控制器,它根据给定值 r (t ) 与实际输出值 y (t ) 构成控制偏差 e(t ) :
6)
点击“
”编译程序,编译成功后在 MATLAB 命令窗口中有提示信息(如果没有修改控制界面结
构,在编译一次后,不需再进行此步骤) :
7) 8) 9)
点击“ ”连接程序,此时可听到电控箱中继电器接通时发出一声轻响。 点击“ ”运行程序, 电机开始转动,任其运行 10 秒钟左右,然后点击 停止程序, 双击打开示波器“Scope”,观察加入 2000rpm 的阶跃信号时直流伺服电机转速响应曲线,测量并 记录超调量 ,峰值时间
打开”Scope”,点击窗口左上角的 name”,“Format”选为 Array。
,勾选“Save data to workspace”,并可自定义输出的“Variable
10) 从“Simulink\ Commonly Used Blocks”中拉一个“Sum”到“untitled”窗口中:
11) 双击“Sum”模块,打开如下窗口,反馈设置如下图:
统的性能指标达到:ts≤1.5 秒,δp≤4.3%,稳态误差为 0。
三、实验设备
1. 2. GSMT2014 型直流伺服系统控制平台; PC、MATLAB 平台。
四、实验原理
1. PID 简介 PID 的控制算法有很多,不同的算法各有其针对性。图 6.1,图 6.2,图 6.3 给出了三种不同的算法。 在模拟控制系统中, 控制器最常用的控制规律是 PID 控制。 模拟 PID 控制系统原理框图如图 6.1 所示。 系统由模拟 PID 控制器和被控对象组成。 比例 被控对象
基于MATLAB的数字PID直流电机调速系统

基于MATLAB的数字PID直流电机调速系统本文主要研究基于MATLAB的数字PID直流电机调速系统。
直流电机是工业生产中常用的电机,其调速系统对于保证生产效率和质量至关重要。
因此,研究直流电机调速系统的控制方法和参数设计具有重要意义。
本文将首先介绍直流电机的数学模型和调速系统的工作原理,然后探讨常规PID控制器的设计方法和参数控制原理,最后通过MATLAB仿真实验来研究数字PID控制器的设计和应用。
2 直流电机调速系统的数学模型直流电机是一种常见的电动机,其数学模型可以用电路方程和动力学方程来描述。
电路方程描述了电机的电气特性,动力学方程描述了电机的机械特性。
通过这两个方程可以得到直流电机的数学模型,为后续的控制器设计提供基础。
3 直流电机调速系统的工作原理直流电机调速系统是通过控制电机的电压和电流来改变电机的转速。
其中,电压和电流的控制可以通过PWM技术实现。
此外,还可以通过变换电机的电极连接方式来改变电机的转速。
直流电机调速系统的工作原理是控制电机的电压和电流,从而控制电机的转速。
4 常规PID控制器的设计方法和参数控制原理常规PID控制器是一种常见的控制器,其控制原理是通过比较实际输出值和期望输出值来调整控制器的参数,从而实现控制目标。
常规PID控制器的参数包括比例系数、积分系数和微分系数,这些参数的选取对于控制器的性能有重要影响。
常规PID控制器的设计方法是通过试错法和经验公式来确定参数值。
5 数字PID控制器的设计和应用数字PID控制器是一种数字化的PID控制器,其优点是精度高、可靠性强、适应性好。
数字PID控制器的设计方法是通过MATLAB仿真实验来确定控制器的参数值。
数字PID控制器在直流电机调速系统中的应用可以提高系统的控制精度和稳定性。
6 结论本文主要研究了基于MATLAB的数字PID直流电机调速系统,介绍了直流电机的数学模型和调速系统的工作原理,探讨了常规PID控制器的设计方法和参数控制原理,最后研究了数字PID控制器的设计和应用。
51单片机PID控制直流电机实验报告

iError = sptr->SetPoint - NextPoint; //计算增加量
iIncpid = sptr->Proportion * iError //E[k]项
- sptr->Integral * sptr->LastError //E[k-1]项
+ sptr->Derivative * sptr->PrevError; //E[k-2]项
static PID *sptr = &sPID;
void IncPIDInit()
{
sptr->SumError = 0;
sptr->LastError =0; //Error[-1]
sptr->PrevError =0; //Error[-2]
sptr->Proportion =0.5; //比例系数
sptr->Integral =0.3; //积分系数
sptr->Derivative = 0.3; //微分系数
sptr->SetPoint =sudu_lilun; Nhomakorabea}
基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计一、引言直流电机调速系统是现代工业自动化系统中最常用的电机调速方式之一、它具有调速范围广、响应快、控制精度高等优点,被广泛应用于电力、机械、石化、轻工等领域。
本文将介绍基于STM32单片机的直流电机PID调速系统的设计。
二、系统设计直流电机PID调速系统主要由STM32单片机、直流电机、编码器、输入和输出接口电路等组成。
系统的设计流程如下:1.采集反馈信号设计中应通过编码器等方式采集到反馈信号,反应电机的转速。
采集到的脉冲信号经过处理后输入给STM32单片机。
2.设计PID算法PID调节器是一种经典的控制算法,由比例(P)、积分(I)和微分(D)三个部分组成,可以根据实际情况调整各个参数的大小。
PID算法的目标是根据反馈信号使电机达到期望的转速。
3.控制电机速度根据PID算法计算出的偏差值,通过调节电机的占空比,实现对电机速度的控制。
当偏差较大时,增大占空比以加速电机;当偏差较小时,减小占空比以减速电机。
4.界面设计与控制设计一个人机交互界面,通过该界面可以设置电机的期望转速以及其他参数。
通过输入接口电路将相应的信号输入给STM32单片机,实现对电机的远程控制。
5.系统保护在电机工作过程中,需要保护电机,防止出现过流、超速等问题。
设计一个保护系统,能够监测电机的工作状态,在出现异常情况时及时停止电机工作,避免损坏。
6.调试与优化对系统进行调试,通过实验和测试优化PID参数,以获得更好的控制效果。
三、系统实现系统实现时,首先需要进行硬件设计,包括STM32单片机的选型与外围电路设计,以及输入输出接口电路的设计。
根据实际情况选择合适的编码器和直流电机。
接着,编写相应的软件代码。
根据系统设计流程中所述,编写STM32单片机的控制程序,包括采集反馈信号、PID算法实现、控制电机速度等。
最后,进行系统调试与优化。
根据系统的实际情况,调试PID参数,通过实验和测试验证系统的性能,并进行优化,以实现较好的控制效果。
基于STM32的直流电机PID调速系统设计

《计算机控制技术课程设计》题目:基于STM32的直流电机PID调速学院:计算机与电子信息学院专业:电气工程及其自动化班级:电气12-5 学号:姓名:任课教师:完成时间:——基于STM32的直流电机PID调速摘要电机转速控制在运动控制系统中占有至关重要的地位,本设计将电机转速控制作为研究对象;以PID为基本控制算法,STM32F103单片机为控制核心,产生受PID算法控制的PWM脉冲实现对直流电机转速的控制。
同时利用光电传感器将电机速度转换成脉冲频率反馈到单片机中,实现转速闭环控制,达到转速无静差调节的目的。
在系统中采320×240TFTLCD显示器作为显示部件,通过4个按键通过界面切换方式设置P、I、D、V四个参数和正反转控制,启动后可以通过显示部件了解电机当前的运行状态和系统的CPU温度。
该系统控制精度高,具有很强的抗干扰能力。
关键词:PID 直流电机反馈调节Based on the STM32 PID speed control of dc motorAbstractMotor speed control occupies a crucial position in the motion control system, the design of the motor speed control for the study; in the basic PID control algorithm, STM32F103 microcontroller core, by the PID control algorithm generates a PWM pulse to achieve DC speed control. At the same time the use of photoelectric sensors to convert the motor speed to pulse frequency feedback to the microcontroller to achieve closed-loop speed control, to speed static error adjustment purposes. Mining 320 × 240TFTLCD monitor as a display unit in the system, through four key settings P, I, D, V four parameters and reversing control through the interface switching mode, start to understand the current state of the motor and the system through the display unit CPU temperature. The system control and high precision, has a strong anti-jamming capability.Keywords: PID DC motor feedback regulation目录1. 绪论 (1)研究背景与意义 (1)本文主要研究方法 (1)2. 设计方案与论证 (2)系统设计方案 (2)控制器模块设计方案 (2)3. 系统硬件电路设计 (3)整体电路设计 (3)整体理论 (3)整体简单结构图和资源分配图 (3)最小单片机系统设计 (4)STM32F103复位电路 (6)电源电路 (6)电机驱动电路设计 (7)光电码盘编码器电路设计 (7)显示电路设计 (8)按键电路设计 (10)4. 系统软件设计 (10)PID算法 (10)PID参数整定方法 (11)电机速度采集算法 (12)程序流程图 (12)5. 系统调试 (13)软件调试 (13)系统测试与分析 (14)6. 总结与展望 (15)参考文献 (16)附录一部分程序源程序 (17)附录二系统界面实物图和PCB图 (20)1.绪论1.1研究背景与意义电动机在现代的工业中,是主要的驱动设备,尤其是直流电动机,由于它的平滑调速性和结构上的简单,使其成为许多电器,如洗衣机,电梯等的驱动。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于PID的直流电机速度控制系统设计实验报告班级:姓名:学号:指导老师:***中南大学机电工程学院基于PID的直流电机速度控制系统设计实验报告一、实验目的1.熟练并掌握89C51、ADC0809等芯片的原理、硬件以及接线;2.熟练89C51单片机的指令系统,完全掌握中断,子程序,查表程序等特殊语句的应用;3.学习并掌握浮点数的原理及应用;4.回顾《机械工程控制基础》的学习内容并掌握PID控制器的原理及用法;5.锻炼自己发现并解决问题的能力,同时将课本知识应用于实践以得到更好的理解。
二、实验原理1.闭环控制/开环控制对直流电机转速的控制有一般有两种方式,一种是开环控制,一种是闭环控制。
开环控制的优点是简单、稳定、可靠。
若组成系统的元件特性和参数值比较稳定,且外界干扰较小,开环控制能够保持一定的精度。
缺点是精度通常较低,无自动纠偏能力;闭环控制的优点是控制的精度可以达到很高,而且对外界的干扰和系统的参数变化有很好的抑制作用,且可以通过输出反馈控制系统的控制过程。
缺点是存在稳定性,振荡,超调等一系列问题,对系统的性能分析和设计远比开环控制麻烦。
经过利弊的取舍,本次试验选择的是闭环控制,因为准备应用PID算法控制电机的转速,故而需要有实际转速进行反馈与给定的转速形成对比,进而通过算法输出PWM波形来控制直流电机。
2. 调速方式本实验采用脉冲宽度(PWM)调速,PWM调速具有以下几种优点:(1)系统的响应速度以及稳定精度好;(2)电流的脉动量小,容易连续,运行平稳;(3)调速范围宽,抗噪性好;(4) 元件使用数少,线路简单。
PWM 的实现方式:将电机电压的通断转换为周期控制,用两个定时器T0,T1分别控制周期的时间和电压通的时间,从而调节电机的平均电压,以达到对电机电压大小的控制。
3.测速方式测速的传感器用的是光电编码器,它的原理是电动机的转动带动码盘的转动,码盘上有很多缝隙,缝隙每经过红外管一次就会产生一个脉冲,进而通过专门的芯片得到转动的频率。
4. PID 控制方法模拟PID 控制算法表达式: u (t )=K P {e (t )+1T I∫e(t)dt t 0+T Dde(t)dt}数字PID 控制算法表达式(位置式):u(k)=u(k−1)+K P(1+TT I+T DT)e(k)−K P(1+2T DT)e(k−1)+K PT DTe(k−2)=u(k−1)+a0e(k)−a1e(k−1)+a2e(k−2)其中:u(t),u(k),u(k−1)为控制器的输出信号;e(k),e(k−1),e(k−2)为偏差信号;K P为比例系数;T I为积分时间常数;T D为微分时间常数。
三、实验内容1.系统结构(1)系统方框图(2)流程图2.硬件部分及接线 (1)ADC0809接线单片机最小应用系统的 P0口JD4F 接A/D 转换的D0~D7口JD10H ,单片机最小应用系统的Q0~Q7口JD7F 接0809的A0~A7口JD11H ,单片机最小应用系统的WR 、RD 、P2.0、ALE 、INT1分别接A/D 转换的WR 、RD 、CS-0809、CLK 、EOC 。
A/D 转换的+Vref 接+5V 电源,AIN0接可调电源模块A2区的输出端(AIN0也可在程序运行之后接),单片机最小应用系统的RXD 、TXD 分别接串行静态显示的DIN 、CLK 。
(2)电机接线单片机的P1.0接电机的control 口。
3.软件部分(1)A/D 转换值显示部分见后面附录程序中的A/D 转换及显示子程序(XS )。
注意:该程序采用的是用RLC A 等语句实现的串行通信,若使用MOV SBUF ,A 等语句实现串行通信,则需要改动表格中数据。
这是因为RLC A 等语句实现的串行通信是数据的高位在前,低位在后;而MOV SBUF ,A 等语句实现的串行通信正好与之相反,低位在前,高位在后。
CS_0809RDA I N 0-7(2)PID运算程序见后面附录程序中的PID调节子程序(PID)。
注意:此处采用位置式方程,并且使用双字节浮点数计算,以提高精度。
(3)PWM输出程序见后面附录程序中的PWM的参数求解子程序(PWM)以及主程序中T0,T1中断语句。
注意:此处采用双字节浮点数计算,以提高精度。
(4)加减乘除子程序见后面附录程序中的浮点数运算子程序部分。
注意:此处都是有符号双字节浮点数。
四、实验结果及感想经过两星期的编程和调试后,虽然中途出现了很多障碍,但是最终还是实现了直流电机的速度控制,使其可以调到速度范围内任意想要的速度,完成了实验任务。
这次试验,不仅加深了我对单片机的硬件结构和指令系统的认识,巩固了过去所学的《机械工程控制基础》方面的知识,更重要的是让我学到了从课本上学不到的东西。
我大学里的知识大部分都来源于课堂和书本,基本上都是一知半解,根本没有学会灵活的应用知识。
而通过这次试验,在将知识应用于实践的过程中,我发现问题并解决问题,不断的加深对知识的认识,从而真正的掌握了解决问题的能力。
附录:程序源代码;主程序;单片机最小应用系统1的P0口接0809的JD15口,;单片机最小应用系统1的Q0口接0809的JD16,;单片机最小应用系统1的ALE、P2.0、P3.3、P3.6、P3.7分别;接0809的clk0809、cs-0809、EOC、WR、RD,;0809的模拟信号输入口AIN0接入0~5V可调电压,+VREF接+5V ;P3.0,P3.1连接到串行静态显示实验模块的DIN、CLK。
DBUF0EQU30H ;显示第一位的缓冲地址TEMP EQU40HMAX EQU 6CH ;电动机最大的工作频率UA EQU 6DH ;给定的A/D转换值UB EQU 6EH ;实际的A/D转换值A0 EQU 60H ;比例系数A0A1 EQU 63H ;积分系数A1A2 EQU 66H ;微分系数A2TH11 EQU 5EH ;TH1的值TL11 EQU 5FH ;TL1的值ORG 0000HLJMP STARTORG 000BHLJMP INT0_PORG001BHLJMP INT1_PORG 0100HSTART: MOV A0, #22H ;给A0赋值MOV 61H,#10H ;4MOV 62H,#7FHMOV A1,#00H ;给A1赋值MOV 64H,#10H ;0MOV 65H,#7FHMOV A2, #00H ;给A2赋值MOV 66H,#00H ;0MOV 67H,#00HMOV UA,#10H ;给定期望值`MOV 6FH,#20 ;扫描周期为20msMOV 50H,#05H ;给U(K-1)赋值MOV 51H,#00H ;5MOV 52H,#00HMOV R1,#6LOOP1: MOV @R0,#01HINC R0DJNZ R1,LOOP1 ;给e(k-1)和e(k-2)赋零MOV UA,#022H ;给定电动机的频率MOV TMOD,#11HMOV TH0,#0FCHMOV TL0,#18HMOV TH1,#0MOV TL1,#0MOV TH11,#0FFH ;控制高电平时间ton,即占空比MOV TL11,#29HSETB TR0SETB TR1SETB EASETB ET0SETB ET1LOOP2: MOV A,6FHJNZ DSQMOV 35H,#11H;灭不需要的显示位MOV 36H,#11HMOV 37H,#11HMOV R0,#DBUF0MOV@R0,#0AHINC R0MOV@R0,#0DHINC R0MOV @R0,#11HINC R0MOV DPTR,#0FEF0H;A/DMOV A,#0MOVX@DPTR,AWAIT: JB P3.3,WAITMOVX A,@DPTR ;读入结果MOV P1,AMOV B,AMOV UB,A ;将实际频率存入UB中SWAP AANL A,#0FHXCH A,@R0INC R0MOV A,BXCH A,@R0LCALL D ISP1; ACALL DELAYLCALL PID ;调用PID程序LCALL PWM ;调用PWM程序MOV 6FH,#20DSQ: AJMP L OOP2 ;20ms进行一次调速DISP1:MOV R0,#DBUF0MOV R1,#TEMPMOV R2,#8DP10:MOV DPTR,#SEGTABMOV A,@R0MOVC A,@A+DPTRMOV@R1,AINC R0INC R1DJNZ R2,DP10MOV R0,#TEMPMOV R1,#8DP12:MOV R2,#8MOV A,@R0DP13:RLC AMOV0B0H,CCLR0B1HSETB0B1HDJNZ R2,DP13INC R0DJNZ R1,DP12RETSEGTAB: DB3FH,6,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB7DH,7,7FH,6FH,77H,7CH ;6,7,8,9,A,BDB58H,5EH,79H,71H,0,00H ;C,D,E,F,-DELAY: MOV R4,#0FFH ;延时程序AA1: MOV R5,#0FFHAA: NOPNOPDJNZ R5,AADJNZ R4,AA1RET;PWM T0中断INT0_P: MOV TH0,#0FCHMOV TL0,#18HMOV TH1,TH11MOV TL1,TL11SETB P1.0SETB P1.2SETB TR1MOV A,6FHJZ LOOP11DEC 6FH ;20ms计时LOOP11:NOPRETI;PWM T1中断INT1_P: CLR P1.0CLR P1.2CLR TR1NOPRETI;PID调节PID:MOV UA,#66HMOV UB,#44HCLR CMOV A,UASUBB A,UB ;计算e(k)MOV R2,A ;将e(k)转换成浮点数MOV R3,#00HACALL SFF2MOV 53H,R2MOV 54H,R3MOV 55H,R6MOV @R1,73HMOV R4,63H ;求u(k)并覆盖u(k-1)MOV R5,64HMOV R7,65HMOV R2,56HMOV R3,57HMOV R6,58HACALL SFDUMMOV R4,75HMOV 2DH,R4MOV 2EH,R5MOV 2FH,R7MOV @R1,73HMOV R4,60HMOV R5,61HMOV R7,62HMOV R2,53HMOV R3,54HMOV R6,55HACALL SFDUMMOV R4,75HMOV R5,76HMOV R2,2DHMOV R3,2EHMOV R6,2FHACALL SFDUSMOV 2DH,R4MOV 2EH,R5MOV 2FH,R7MOV @R1,73HMOV R4,66HMOV R5,67HMOV R7,68HMOV R2,59HMOV R3,5AHMOV R6,5BHACALL SFDUMMOV R4,75HMOV R5,76HMOV R2,2DHMOV R3,2EHMOV R6,2FHACALL SFDUAMOV R2,50HMOV R3,51HMOV R6,52HACALL SFDUAMOV 50H,R4MOV 51H,R5MOV 52H,R7MOV 59H,56H ;用e(k-1)覆盖e(k-2) MOV 5AH,57HMOV 56H,53H ;用e(k)覆盖e(k-1)MOV 57H,54HMOV 58H,55HRET;PWM的参数求解PWM: MOV A,51H ;判断U(K)的正负JB ACC.7,LOOP9MOV A,52HJB ACC.7,LOOP9MOV A,#16SUBB A,R7MOV R7,ALOOP7: CLR CMOV A,R5RRC AMOV R5,AMOV A,R4RRC AMOV R4,ADJNZ R7,LOOP7CLR CMOV A,#0FFH ;计算T1初值SUBB A,R5MOV TH11,AMOV A,#0FFHSUBB A,R4MOV TL11,AAJMP LOOP10LOOP9: MOV TH11,#0FCHMOV TL11,#29HLOOP10: RET;P14 1.9.2 双字节二进制定点数到浮点数的转换;入口R3R2SFF2: MOV R6,#10HMOV 20H,R3JB 07H,SEGLP0: JB 06H,LP1LCALL LSTMOV 20H,R3AJMP LP0SEG: JNB 06H,LP1;负LCALL LSTAJMP SEGLP1: RETLST: CLR CXCH A,R2RLC AXCH A,R2XCH A,R3RLC AXCH A,R3DEC R6RET;出口R6 R3R2;P51 4.1.3 双字节二进制浮点数加法,R7R5R4+R6R3R2=R7R5R4 SFDUA: ACALL SJJ;参见2.6.3(对阶)ACALL AD5432;参见程序一(尾数相加)JNB OV,SONACALL RST77;参见程序一(右规)RETSON: ACALL SLST2;参见2.5.3RET;P49 4.1.1 双字节无符号数加法-子程序AD5432: MOV A,R4;尾数相加ADD A,R2MOV R4,AMOV A,R5ADDC A,R3MOV R5,ARET;P55 4.2.3 双字节有符号数减法,R7R5R4-R6R3R2=R7R5R4 SFDUS: LCALL SJJ;参见2.6.3(对阶)LCALL SU5432;参见程序一(尾数相减)JB OV,LPSLCALL SLST2;参见2.5.3(左规)RETLPS: MOV A,R5JNB 0E7H,LEKCLR CAJMP LPELEK: SETB CLPE: LCALL RST77;参见4.1.1(右规)RET;P27 2.6.3 二进制浮点数对阶SJJ: MOV A,R6XRL A,R7JZ RET1CLR CMOV A,R7SUBB A,R6JB 0E7H,SRSH7LCALL SRST6AJMP SJJSRSH7: LCALL SRST7AJMP SJJRET1: RETSRST6: MOV A,R3JB 0E7H,LPS0;右规CLR CAJMP LPS1LPS0: SETB CLPS1: RRC AMOV R3,AMOV A,R2RRC AMOV R2,AINC R6RETSRST7: MOV A,R5JB 0E7H,LPS00CLR CAJMP LPS11LPS00: SETB CLPS11: RRC AMOV R5,AMOV A,R4RRC AMOV R4,AINC R7RET;P53 4.2.1 双字节无符号数减法-子程序SU5432: CLR CMOV A,R4SUBB A,R2MOV R4,ASUBB A,R3MOV R5,ARET;P23 2.5.3双字节有符号数左规SLST2: MOV 20H,R5JB 07H,SEGALPSS0: JB 06H,LPSS1;正LCALL LSTBMOV 20H,R5AJMP LPSS0SEGA: JNB 06H,LPSS1LCALL LSTBMOV 20H,R5AJMP SEGALPSS1: RETLSTB: CLR CXCH A,R4RLC AXCH A,R4XCH A,R5RLC AXCH A,R5DEC R7RET;P49 4.1.1 二进制浮点数加法-子程序-右规RST77: MOV A,R5RRC AMOV R5,AMOV A,R4RRC AMOV R4,AINC R7RET;P59 4.3.3 双字节浮点数有符号数乘法,R7R5R4 X R6R3R2 =R7 @R1四位SFDUM: ACALL SLST2;参见2.5.3(左规)ACALL SLST32;左规MOV A,R7ADD A,R6MOV 21H,AACALL SDUMUL;参见3.3.4MOV A,R1;积左规ADD A,#04HMOV R0,AMOV 7AH,AMOV A,R7MOV @R0,APOP 0E0HMOV R2,#04HACALL SMLST;参见2.5.4(左规)PUSH 0E0HMOV A,@R0MOV R7,AMOV A,7AHRETSLST32: MOV 20H,R3;左规JB 07H,SAEGLCP0: JB 06H,LCP1ACALL LSTMOV 20H,R3SJMP LCP0SAEG: JNB 06H,LCP1ACALL LASTMOV 20H,R3SJMP SAEGLCP1: RETLAST: CLR CMOV A,R2RLC AMOV R2,AMOV A,R3RLC AMOV R3,ADEC R6RET;P37 3.3.4 双字节有符号二进制定点数乘法SDUMUL: MOV A,R5;求被乘数符号ANL A,#80HMOV R6,AJZ NEG32NEG54: MOV A,R4CPL AADD A,#01HMOV A,R5CPL AADDC A,#00HMOV R5,ANEG32: MOV A,R3;求乘数符号ANL A,#80HMOV R7,AJZ DDUMULMOV A,R2;乘数求补CPL AADD A,#01HMOV R2,AMOV A,R3CPL AADDC A,#00HMOV R3,ADDUMUL: MOV A,R6;求积的符号XRL A,R7MOV 20H,AACALL DUMUL;参见程序一JNB 07H,RETURNNEG4: MOV R7,#04H;积求补SETB CLDP: MOV A,@R1CPL AADDC A,#00HMOV @R1,AINC R1DJNZ R7,LDPMOV A,R6MOV R1,ARETURN: RET;P33 3.3.1 二进制定点数双字节无符号数乘法DUMUL: MOV A,R1MOV R6,AMOV R7,#04HCLEAR: MOV @R1,#00HINC R1DJNZ R7,CLEARMOV A,R6MOV R1,AMM: MOV A,R2MUL ABACALL ADDMMOV A,R2MOV B,R5MUL ABACALL ADDMMOV A,R3MOV B,R4MUL ABDEC R1ACALL ADDMMOV A,R3MOV B,R5MUL ABACALL ADDMMOV A,R6MOV R1,ARETADDM: ADD A,@R1MOV @R1,AMOV A,BINC R1ADDC A,@R1MOV @R1,AINC R1MOV A,@R1ADDC A,#00HMOV @R1,ADEC R1RET;P24 2.5.4 多字节有符号浮点数左规SMLST: MOV A,R0MOV R1,AMOV A,R2;求尾数位数MOV B,#08HMUL ABDEC AMOV R3,ADEC R1MOV 20H,@R1JB 07H,SEEGLEP0: JB 06H,LEP2;正ACALL LADACALL LESTDJNZ R3,LEP0AJMP LEP2SEEG: JNB 06H,LEP2;负ACALL LADACALL LESTDJNZ R3,SEEGLEP2: RETLAD: INC R1;求尾数低位字节地址指针MOV A,R1CLR CSUBB A,R2MOV R1,ARETLEST: MOV A,R2;左规MOV R4,ACLR CLEP1: MOV A,@R1RLC AMOV @R1,AINC R1DJNZ R4,LEP1DEC @R0DEC R1MOV 20H,@R1RETEND。