DSP的PID控制算法的实现

合集下载

基于DSP的直流电机模糊PID控制系统的研究与仿真

基于DSP的直流电机模糊PID控制系统的研究与仿真

红 等人 采 用 AR M9作 为 直流 电机 的控 制 器『 2 1 陈 桂 等
人设 计 了基 于 F P G A的直 流 电机 速度 控制 器[ 3 1 。 杨隆梓
ቤተ መጻሕፍቲ ባይዱ
等 人设 计 了一 种 由上 位 机 和 A T 8 9 C 5 2相互 通 信控 制
直流 电机 。 以上学 者尽 管采 用 了不 同的处 理器 ,但是
高 、超 调 量 小 等 特 点 ,较好 地满 足变 量 喷 雾 的 控 制 要 求 。
关 键 词 :直 流 电机 ,D S P ,模 糊 P I D 控 制 ,M A T L A B仿 真 ,变 量 喷雾
中 图分 类号 :T P 2 7 3
文 献 标 识 码 :A
文章 编 号 :2 0 9 5 — 5 5 5 3 ( 2 0 1 3 )0 6 — 0 2 7 3 — 0 6
m o t o r b a s e d o n D S P f J 1 . J o u r n a l o f C h i n e s e A g r i c u l t u r l a M e c h a n i z a t i o n , 2 0 1 3 , 3 4 ( 6 ) : 2 7 3  ̄ 2 7 8
理 . 阐述 该 控 制 系 统 的 硬件 结 构 、软 件 流 程 和 控 制 算 法 ,并 使 用 Ma t l a b / S i mu l i n k搭 建控 制 系统 的原 理 图 ,对 控 制 系 统 进 行 仿 真 试 验 。结 果 分 析表 明 : 以 D S P为 控 制 器 并 结 合参 数 自适 应 模 糊 P I D 控 制 的 控 制 系统 ,具 有 响 应 速 度 快 、稳 定 性

pid算法的原理和算法

pid算法的原理和算法

pid算法的原理和算法一、pid算法简介PID(Proportional-Integral-Derivative,比例-积分-微分)算法是一种广泛应用于工业控制领域的调节算法。

它通过计算系统误差与期望值的比值(比例控制)、误差积分和误差变化率(微分控制)来调节控制器的输出,从而使被控对象达到期望状态。

二、pid算法原理1.比例(P)控制:比例控制是根据系统误差与期望值的比值来调节控制器输出。

当误差较大时,比例控制输出较大,有利于快速消除误差;当误差较小时,比例控制输出较小,有利于提高系统的稳定性。

2.积分(I)控制:积分控制是根据系统误差的积分来调节控制器输出。

当误差持续存在时,积分控制输出逐渐增大,有助于消除误差。

但过大的积分控制会导致系统响应过慢,甚至产生振荡。

3.微分(D)控制:微分控制是根据系统误差的变化速度来调节控制器输出。

它能预测系统的变化趋势,从而减小超调量和调整时间,提高系统稳定性。

三、pid算法应用1.控制器设计:PID算法可以用于设计各类控制器,如PID控制器、模糊PID控制器、自适应PID控制器等。

2.参数调节:PID算法的三个参数(Kp、Ki、Kd)需要根据被控对象的特性进行调节。

合理的参数设置可以使系统在稳定性和响应速度之间达到平衡。

四、pid算法优化与改进1.抗积分饱和:当系统误差持续存在时,积分控制输出可能超过控制器最大输出,导致积分饱和。

通过引入抗积分饱和算法,可以限制积分控制的输出,提高系统稳定性。

2.抗积分粘滞:为避免积分控制输出在零附近震荡,可以采用抗积分粘滞算法,使积分控制输出在零附近呈现出非线性特性。

3.抗积分震荡:在积分控制中引入微分项,可以减小积分震荡,提高系统稳定性。

五、pid算法在实际工程中的应用案例PID算法在我国工业控制领域得到了广泛应用,如电力系统、温度控制系统、流量控制系统等。

通过合理设计PID控制器及其参数,可以实现对被控对象的稳定控制。

基于DSP的PID温度控制系统

基于DSP的PID温度控制系统

uKi ip+ =[ e
+( e1+ 5 Ki -]。( Te i)u ) d-
一ห้องสมุดไป่ตู้
图 3 系统 硬 件 组 成 框 图
PD控制 中的 比例 增益 、 分 增 益 和微 分 增 益 I 积
T 2 2+ P0 中图分类 号
等原因 , 仅使用传统算法寻找一组合适的 PD参数 I
1 引言
PD控制是发展最早 、 I 应用最广 的一种控制策 略,由于其算法 简单 、 鲁棒性较好 、 可靠性高 , 被 制器参数直接影响着控制效果 的好坏 , 一般用于温 控系统 的 PD算法大多在经验和实验基础上试凑 I 得到 , 开发周期长 , 系统响应时间慢 , 超调量大。 本文着重研究 PD控制器参数 的整定与最优 I 化问题 , 充分利用数字信号处理器能够快速进行数
器 为 P S , 中参 数 K 、 iK ( )其 p K 、 d待定 。
J mnIt mn t t = i d = i(f 0 — )

3 PD算 法 I
3 1 PD算 法 . I 由于本 系统 复杂性 , 量 间 的关 联性 和 非线性 变
( 约束条件 : it I I () ≤1) u 要 求最 优 控制是 :u() =1 i ,, ) Iit I ( =12 …
核 心控 制 部 分 。T 30 5 X是 T 公 司 T 30 MS2 C 4 I MS2
标准的 PD控制器数学模型为 : I
u)K(+i (d K (=pt Kf下下 t e) )+ e
积 分 、 分 三项之 和给 出 。 微
( 4 )
对于本系统而言都是显著的提高 J 。 系统硬件结构如 图所示. 向通道 为温度 采 前 集 , 向通道为功率控制 , 后 键盘 和数码显示构成人 机交互 通 道 。

基于DSP的PID控制算法的实现

基于DSP的PID控制算法的实现

《数字信号处理与DSP应用》课程论文题目:基于DSP的PID控制算法的实现学号:***********名:***班级:6班专业:电路与系统课程老师:黄乡生二零一二年二月二十日摘要:按偏差的比例、积分和微分进行控制的调节器称为PID调节器,PID 调节器是连续系统中技术成熟、应用最为广泛的一种调节器。

它构简单,参数易于调整,在长期的应用中已积累了丰富的经验。

特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识,但往往不能得到预期的效果,所以人们常采用数字PID调节器,并根据经验进行在线整定。

这次课程设计将综合用数字信号处理DSP以及自动控制方面的知识,使用CCS集成开发环境进行代码的编译,仿真,才能完成了本次设计。

关键词:PID控制;DSP;仿真;CCSAbstrat: According to the proportion of deviation, integral and differential controls the regulator called the PID regulator, PID regulator is continuous system mature technology, the most widely used a regulator. Its simple structure, easy to adjust the parameters, in the long-term of the application has accumulated a wealth of experience. Especially in the industrial process, because the controlled objects, accurate mathematical model is hard to develop, the parameters of the system and often changes, the use of modern control theory of comprehensive analysis to take a lot of cost model identification, but often can't get the desired effect, so people often uses the digital PID regulator, and according to the experience of online setting. The courses are designed to be integrated with the digital signal processing DSP as well as the automatic control the knowledge of therespect, use CCS integrated development environment for the compilation of the code, simulation, to complete the design.Keywords: PID Control;DSP;simulation ;CCS前言在数字PID算法是目前一般控制领域中经常使用的自动控制算法,它依据给定的设定值,反馈值,以及比例系数,积分和微分时间,计算出一定的控制量,使被控对象能保持在设定的工作范围,并且可以自动的消除外部扰动。

基于DSP的模糊自适应PID控制SRD设计及实现

基于DSP的模糊自适应PID控制SRD设计及实现

文章 编 号 :1 0 4 1 ( 0 8 0 0 6 0 0 1- 2 7 2 0 )4— 0 0— 6
基于 D P的模糊 自适应 PD控制 S D S I R 设计及 实现
吴 江潦 , 易灵 芝 ,彭寒梅 ,钟 坤 炎
( 湘潭 大 学 信 息 工程 学 院 ,湖 南
湘潭 4 10 ) 1 15
关键 词 :S D;D P 自适 应 PD;模 糊 控 制 R S; I
中 图分 类 号 :T 5 M 32 文献 标 识 码 :A
0 引 言
作 为新一 代 交流 无 级调 速 系统 ,开关 磁 阻 电机 调速 系统 ( R 具有 结 构 简单 、启 S D) 动性 能好 和调 速范 围宽 等优点 ,被 广 泛应用 于电动 车驱动 系统 、家用 电器 ( 衣机和食 洗
对值 和偏差变化率绝对值 l l e ,输出语言变量为( ) K ,K, .输入 、输 出变量的
模 糊子 集 均为 4档 ,即{ ,小 ,中 ,大 ) 零 ,令 Z=零 ,S=小 ,M =中 ,B=大 .其论 域 均 为 {,l ,3 ,5 l 0 ,2 ,4 ,6 ,可 以取 语 言 变 量 值 4档 如下 :零 ( ) — 取 在 0附近 , z—
品加工 机 械等 ) 、通 用工业 ( 风机 、泵 和压缩 机等 ) 、伺服 与调速 系统 、牵 引 电机和 高转 速 电机 ( 织机 、航 空 发 动机 、电动 工具 和离 心机 传 动等 ) 纺 等工程 控 制领 域【 但 是 , 卜. 由于开关 磁 阻 电动机 (R 具 有 严重 的非线 性 、变 结构 和变 参数 特 点 ,难 以为其 建 立 S M) 精确 的数学模 型.如果 采用 传统 的 固定参 数 PD控 制 ,则控 制性 能较 差.本 文 采用 的 I

控制系统中PID控制算法的详解

控制系统中PID控制算法的详解

控制系统中PID控制算法的详解在控制系统中,PID控制算法是最常见和经典的控制算法之一。

PID控制算法可以通过对反馈信号进行处理,使得控制系统能够实现稳定、精确的控制输出。

本文将详细介绍PID控制算法的原理、参数调节方法和优化方式。

一、PID控制算法的原理PID控制算法是由三个基本部分组成的:比例控制器、积分控制器和微分控制器。

这三个部分的输入都是反馈信号,并根据不同的算法进行处理,最终输出控制信号,使得系统的输出能够与期望的控制量保持一致。

A. 比例控制器比例控制器是PID控制算法的第一部分,其输入是反馈信号和期望控制量之间的差值,也就是误差信号e。

比例控制器将误差信号与一个比例系数Kp相乘,得到一个控制信号u1,公式如下:u1=Kp*e其中,Kp是比例系数,通过调节Kp的大小,可以改变反馈信号对控制输出的影响程度。

当Kp增大时,控制输出也会随之增大,反之亦然。

B. 积分控制器积分控制器是PID控制算法的第二部分,其输入是误差信号的累积量,也就是控制系统过去一定时间内的误差总和。

积分控制器将误差信号的累积量与一个积分系数Ki相乘,得到一个控制信号u2,公式如下:u2=Ki*∫e dt其中,Ki是积分系数,通过调节Ki的大小,可以改变误差信号积分对控制输出的影响程度。

当Ki增大时,误差信号积分的影响也会增强,控制输出也会随之增大,反之亦然。

C. 微分控制器微分控制器是PID控制算法的第三部分,其输入是误差信号的变化率,也就是控制系统当前误差与上一个采样时间的误差之差,用微分运算符表示为de/dt。

微分控制器将de/dt与一个微分系数Kd相乘,得到一个控制信号u3,公式如下:u3=Kd*de/dt其中,Kd是微分系数,通过调节Kd的大小,可以改变误差信号变化率对控制输出的影响程度。

当Kd增大时,误差信号的变化率的影响也会增强,控制输出也会随之增大,反之亦然。

综合上述三个控制部分可以得到一个PID控制输出信号u,公式如下:u=u1+u2+u3二、PID控制算法的参数调节PID控制算法的实际应用中,需要对其参数进行调节,以达到控制系统稳定、精确的控制输出。

基于DSP 的逆变电源模糊 PID 控制

基于DSP 的逆变电源模糊 PID 控制

2.2 模糊PID的实现 DC/AC逆变电源控制的主要是输出电压及频率
的准确性。频率的准确性由SPWM发生器决定(它是一个 存贮在存储器内的一个正弦输出表格),只要触发计算 准确就能达到设计要求。负载的变化使输出电流产生 变化,对于一定脉宽输出的DC/AC电源来说,势必 导致输出电压的变化。因此采用模糊控制规则根据不
存储、滤波
计算kp、ki、kd
2.3 DSP 软件算法实现 为了保证模糊 PID 控制的时实性和准确性,DSP
在 A/D 采样的中断子程序中就调用模糊 PID 控制算法 程序,立即计算出输出控制量并送到被控对象,根据 TMSLF2407 的性能,机器时钟周期和中断延时可以计 算出本系统从采样当前实际输出值到输出控制量大约 需要 6.67μ ,这对于 1ms 一次的采样来说是足够的, 完全满足时实性要求。程序流程图如图 3 所示。下面 是部分程序
同的 e 和 ec ,对PID控制器的参数kp、ki、kd进行在线
μ
Z
S
M
L
0
1
2
3
E/EC
4
5 KP/KI/KD
图 2 语言变量 E、EC、KP、KI、KD
自整定来调节输出电压。模糊控制器的输入变量是偏 差绝对值 E 、偏差变化率绝对值 EC ,模糊控制器
在本文中,利用 CRI 法推理时控制过程是用查控 制表来产生控制量的,在控制表中,模糊偏差量 E 、
(3) 采用 DSP 控制系统在满足逆变电源控制的要 求下,具有成本低、控制灵活、可靠性高的特点。
e(k)=r(k)-u(k) ec(k)=e(k)-e(k-1)
增量式PID算法
e(k)、ec(k)取绝 对值并模糊化
SPWM发生器 返回

基于DSP温度PID—NN控制系统设计

基于DSP温度PID—NN控制系统设计

型是 动 态 变 化 的 、 有 非 线性 时 , 规 P D 控 制 具 常 I 很难 达 到理想 的控 制效 果 。人工 神经 网络 具有 很 强 的信 息综合 能力 、 习 和记忆 能力 、 学 自适 应 的能 力 以及逼 近 任意 非 线 性 函数 的能 力 , 用 于 难 以 适 用模 型 和规 则描 述 的对 象 , 其 适 用 于不 确 定 系 尤
W a g Hal n H u n i Z n n i g o a gJn i Bi
Ab t a t A e e a u e c n r l rs r c u e u i g PI —NN o o n ie b o k ( sr c : t mp r t r o to l tu t r sn D e f r lw o s l c LNB)mo u e i s u id d l t d e s
s r t s t a h ic i i sm pe a d d p n a l ,t e p ro ma c ft e c n r l r i u e i r t h t o h t a e h t t e cr u t s i l n e e d b e h e f r n e o h o t o l s s p ro O t a f t e e c n e t n l o t o lr Fu t e mo e h s k n fc n r l ri u h mo e r b s h n c n e t n l o t o lr o v n i a n r l . o c e r h r r ,t i i d o o t o l Sm c r o u tt a o v n i a n r l e o c e
i h s p pe . A n t m plm e a i ih DSP M S n t i a r d is i e nt ton w t T LF2 07A s a s a . The e e i e t lr s t e on 4 i lo g ve xp rm n a e uls d m —

采用DSP实现模糊PID舵机控制算法

采用DSP实现模糊PID舵机控制算法
在加载台上模拟导弹舵机大负载情况下( 扭矩 为 65 N·m) ,分别采用经典 PID 控制器、模糊 PID
图 4 模糊 PID 控制器方波响应曲线
表 2 两种控制器对于方波信号控制效果对比
性能 上升时间 / ms 最大超调量 /% 稳态误差 /( °) 稳态输出值 /( °)
经典 PID 250 0 1. 5 ± 18. 5
模糊 PID 350 0 0 ± 20
在加载台上模拟导弹舵机大负载情况下( 扭矩 为 55 N·m) ,经典 PID 控制系统的正弦信号( ± 2°, 1 Hz) 响应如图 5 所示。模糊 PID 控制系统的正弦 信号( ± 2°,1 Hz) 响应如图 6 所示。表 3 为两种控 制器的正弦信号特性比较。
Abstract: This paper studies the design of fully-digital fuzzy-PID actuator control system based on the DSP 2812 at the high accuracy request. It also describes the structure of actuator control system,the hardware constitution and the software design. Experimental results show that this fuzzy-PID control system has the characteristics of simple structure,high dependability. This system also has some better robust and better dynamic / static characteristics.

基于DSP的无刷直流电机P-模糊自适应PID控制系统

基于DSP的无刷直流电机P-模糊自适应PID控制系统
2 留
现代驱动与控制
基于DS 的无刷直流电机P模糊 自适应P D控制系统 P _ I
刘兴艳 董 洋洋
河南理工大学 ( 5 0 3 440 )
P f z e fa a tv D n r lS s e f rBL CM s d o S - uz y S l- d p i e PI Co t o y t m o D Ba e n D P
制硬件, 从而为模糊算法 的应用和形成B DC L M 全数字式 的模糊控制系统奠定了基础。
图1 p模糊PD控制系统 图 - I
P 模糊 自适应 P D控制选择 一个 阈值E , . I P
《 机技 术》2 1 年第 3 ・ 3 电 01 期 2・
提 出一种新 型的P 模糊 自适应 P D控制方 法且 采用T S . I M 30 F47 2 L 2 0 ADS 作为处 理器。 P 实验 结果 表 明: 模糊控 该 制 系 统 运 行 平稳 , 有 较 高 的控 制 精度 和 较 好 的 鲁棒 具 性 , 现了P模 糊 自适应 PD控制 系统的数 字化 。 实 . I 关键词 : 刷直流 电机 无
1 P 模糊P D控 制系统 . I
要提高基 本模 糊控制系统的精度和跟踪性
能, 就必须对 语言变量取较多的语言值, 但是分
级越细规 则数和系统 的计算量也越大 , 调试会很
困难或者不能满足实 时控制的要求 。 要解决这个
矛盾就 是在论域 内用不 同的控制方式 分段实行 控制。 . P模糊 自 适应PD I 控制系统分为P 控制和模 糊自 适应 P D控制两个模 态分段 控制 , I 控制系统
复 杂和 模型不 清楚 的系统 进行简单而 有效 的控 制 , 挥模 糊控制鲁棒 性强 、 发 动态 响应 好、 上升 时间快和超调小 的特点, 又具有P D I 控制器的动

PID算法原理及调整规律

PID算法原理及调整规律

PID算法原理及调整规律PID(比例-积分-微分)算法是一种常用的控制算法,用于调节和稳定系统的运行。

它可以根据系统的反馈信息,通过计算出一个控制量,使系统的输出值与期望值尽可能接近。

PID算法由比例控制器、积分控制器和微分控制器三个部分组成,各部分的输出经过加权后作为最终的控制量。

比例控制器是PID算法的第一个部分,根据系统当前的误差信息,计算出一个与误差成正比的控制量。

比例控制器的输出主要用来调节系统的响应速度,即使得系统能够快速地接近期望值。

比例控制器的输出与误差之间的关系可以表达为:控制量=Kp×误差,其中,Kp为比例增益系数。

积分控制器是PID算法的第二个部分,它根据系统历史上累积的误差信息,计算出一个与误差累积量成正比的控制量。

积分控制器的作用是消除系统的静态误差和周期性误差,使系统的输出与期望值保持精确度。

积分控制器的输出与误差累积量之间的关系可以表达为:控制量 = K i ×∫误差 dt,其中,Ki为积分增益系数,∫误差 dt为误差的累积值。

微分控制器是PID算法的第三个部分,它根据系统当前的变化速率,计算出一个与变化速率成正比的控制量。

微分控制器的作用是预测系统的未来状态,使系统的输出能够更加平稳地接近期望值。

微分控制器的输出与误差变化速率之间的关系可以表达为:控制量= Kd × d(误差)/dt,其中,Kd为微分增益系数,d(误差)/dt为误差的变化速率。

1.比例增益Kp的调整:比例增益越大,系统的响应速度越快,但可能引起系统的超调和震荡;比例增益越小,系统的响应速度越慢,但可以减小系统的震荡。

因此,根据系统的特性和需求,适当调整比例增益来平衡系统的响应速度和稳定性。

2.积分增益Ki的调整:积分增益主要用来消除系统的静态误差和周期性误差。

当系统的静态误差较大时,增大积分增益可以加速误差的消除;当系统的静态误差较小或不存在时,减小积分增益可以避免过度补偿引起的系统不稳定。

PID控制算法的C语言实现完整版

PID控制算法的C语言实现完整版

PID控制算法(de)C语言实现一 PID算法原理最近两天在考虑一般控制算法(de)C语言实现问题,发现网络上尚没有一套完整(de)比较体系(de)讲解.于是总结了几天,整理一套思路分享给大家.在工业应用中PID及其衍生算法是应用最广泛(de)算法之一,是当之无愧(de)万能算法,如果能够熟练掌握PID算法(de)设计与实现过程,对于一般(de)研发人员来讲,应该是足够应对一般研发问题了,而难能可贵(de)是,在我所接触(de)控制算法当中,PID控制算法又是最简单,最能体现反馈思想(de)控制算法,可谓经典中(de)经典.经典(de)未必是复杂(de),经典(de)东西常常是简单(de),而且是最简单(de),想想牛顿(de)力学三大定律吧,想想爱因斯坦(de)质能方程吧,何等(de)简单简单(de)不是原始(de),简单(de)也不是落后(de),简单到了美(de)程度.先看看PID算法(de)一般形式:PID(de)流程简单到了不能再简单(de)程度,通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节(de)加和.这里我们规定(在t时刻):1.输入量为rin(t);2.输出量为rout(t);3.偏差量为err(t)=rin(t)-rout(t);pid(de)控制规律为理解一下这个公式,主要从下面几个问题着手,为了便于理解,把控制环境具体一下:1.规定这个流程是用来为直流电机调速(de);2.输入量rin(t)为电机转速预定值;3.输出量rout(t)为电机转速实际值;4.执行器为直流电机;5.传感器为光电码盘,假设码盘为10线;6.直流电机采用PWM调速转速用单位转/min表示;不难看出以下结论:1.输入量rin(t)为电机转速预定值(转/min);2. 输出量rout(t)为电机转速实际值(转/min);3.偏差量为预定值和实际值之差(转/min);那么以下几个问题需要弄清楚:1.通过PID环节之后(de)U(t)是什么值呢2.控制执行器(直流电机)转动转速应该为电压值(也就是PWM占空比).3.那么U(t)与PWM之间存在怎样(de)联系呢(见附录1)这篇文章上给出了一种方法,即,每个电压对应一个转速,电压和转速之间呈现线性关系.但是我考虑这种方法(de)前提是把直流电机(de)特性理解为线性了,而实际情况下,直流电机(de)特性绝对不是线性(de),或者说在局部上是趋于线性(de),这就是为什么说PID调速有个范围(de)问题.具体看一下(见附录2)这篇文章就可以了解了.所以在正式进行调速设计之前,需要现有开环系统,测试电机和转速之间(de)特性曲线(或者查阅电机(de)资料说明),然后再进行闭环参数整定.这篇先写到这,下一篇说明连续系统(de)离散化问题.并根据离散化后(de)特点讲述位置型PID和增量型PID(de)用法和C语言实现过程.PID控制算法(de)C语言实现二 PID算法(de)离散化上一节中,我论述了PID算法(de)基本形式,并对其控制过程(de)实现有了一个简要(de)说明,通过上一节(de)总结,基本已经可以明白PID控制(de)过程.这一节中先继续上一节内容补充说明一下.1.说明一下反馈控制(de)原理,通过上一节(de)框图不难看出,PID控制其实是对偏差(de)控制过程;2.如果偏差为0,则比例环节不起作用,只有存在偏差时,比例环节才起作用.3.积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间(de)差值,积分环节实际上就是偏差累计(de)过程,把累计(de)误差加到原有系统上以抵消系统造成(de)静差.4.而微分信号则反应了偏差信号(de)变化规律,或者说是变化趋势,根据偏差信号(de)变化趋势来进行超前调节,从而增加了系统(de)快速性.好了,关于PID(de)基本说明就补充到这里,下面将对PID连续系统离散化,从而方便在处理器上实现.下面把连续状态(de)公式再贴一下:假设采样间隔为T,则在第K T时刻:偏差err(K)=rin(K)-rout(K);积分环节用加和(de)形式表示,即err(K)+err(K+1)+……;微分环节用斜率(de)形式表示,即[err(K)-err(K-1)]/T;从而形成如下PID离散表示形式:则u(K)可表示成为:至于说Kp、Ki、Kd三个参数(de)具体表达式,我想可以轻松(de)推出了,这里节省时间,不再详细表示了.其实到这里为止,PID(de)基本离散表示形式已经出来了.目前(de)这种表述形式属于位置型PID,另外一种表述方式为增量式PID,由U上述表达式可以轻易得到:那么:这就是离散化PID(de)增量式表示方式,由公式可以看出,增量式(de)表达结果和最近三次(de)偏差有关,这样就大大提高了系统(de)稳定性.需要注意(de)是最终(de)输出结果应该为u(K)+增量调节值;PID(de)离散化过程基本思路就是这样,下面是将离散化(de)公式转换成为C语言,从而实现微控制器(de)控制作用.PID控制算法(de)C语言实现三位置型PID(de)C语言实现上一节中已经抽象出了位置性PID和增量型PID(de)数学表达式,这一节,重点讲解C语言代码(de)实现过程,算法(de)C语言实现过程具有一般性,通过PID算法(de)C语言实现,可以以此类推,设计其它算法(de)C语言实现.第一步:定义PID变量结构体,代码如下:struct _pid{float SetSpeed;例系数Kp(de)作用是加快系统(de)响应速度,提高系统(de)调节精度.Kp越大,系统(de)响应速度越快,系统(de)调节精度越高,但是容易产生超调,甚至会使系统不稳定.Kp取值过小,则会降低调节精度,使响应速度缓慢,从而延长调节时间,是系统静态、动态特性变差;2.积分作用系数Ki(de)作用是消除系统(de)稳态误差.Ki越大,系统(de)静态误差消除(de)越快,但是Ki过大,在响应过程(de)初期会产生积分饱和(de)现象,从而引起响应过程(de)较大超调.若Ki过小,将使系统静态误差难以消除,影响系统(de)调节精度;3.微分系数Kd(de)作用是改善系统(de)动态特性,其作用主要是在响应过程中抑制偏差向任何方向(de)变化,对偏差变化进行提前预报.但是kd过大,会使响应过程提前制动,从而延长调节时间,而且会降低系统(de)抗干扰性.反应系统性能(de)两个参数是系统误差e和误差变化律ec,这点还是好理解(de):首先我们规定一个误差(de)极限值,假设为Mmax;规定一个误差(de)比较大(de)值,假设为Mmid;规定一个误差(de)较小值,假设为Mmin;当abs(e)>Mmax时,说明误差(de)绝对值已经很大了,不论误差变化趋势如何,都应该考虑控制器(de)输入应按最大(或最小)输出,以达到迅速调整误差(de)效果,使误差绝对值以最大(de)速度减小.此时,相当于实施开环控制.当eec>0时,说明误差在朝向误差绝对值增大(de)方向变化,此时,如果abs(e)>Mmid,说明误差也较大,可考虑由控制器实施较强(de)控制作用,以达到扭转误差绝对值向减小(de)方向变化,并迅速减小误差(de)绝对值.此时如果abs(e)<Mmid,说明尽管误差是向绝对值增大(de)方向变化,但是误差绝对值本身并不是很大,可以考虑控制器实施一般(de)控制作用,只需要扭转误差(de)变化趋势,使其向误差绝对值减小(de)方向变化即可.当eerr<0且eerr(k-1)>0或者e=0时,说明误差(de)绝对值向减小(de)方向变化,或者已经达到平衡状态,此时保持控制器输出不变即可.当eerr<0且eerr(k-1)<0时,说明误差处于极限状态.如果此时误差(de)绝对值较大,大于Mmin,可以考虑实施较强控制作用.如果此时误差绝对值较小,可以考虑实施较弱控制作用.当abs(e)<Mmin时,说明误差绝对值很小,此时加入积分,减小静态误差.上面(de)逻辑判断过程,实际上就是对于控制系统(de)一个专家判断过程.(未完待续)PID控制算法(de)C语言实现十模糊算法简介在PID控制算法(de)C语言实现九中,文章已经对模糊PID(de)实质做了一个简要说明.本来打算等到完成毕业设计,工作稳定了再着力完成剩下(de)部分.鉴于网友(de)要求和信任,抽出时间来,对模糊PID做一个较为详细(de)论述,这里我不打算做出仿真程序了,但就基本概念和思路进行一下说明,相信有C语言基础(de)朋友可以通过这些介绍性(de)文字自行实现.这篇文章主要说明一下模糊算法(de)含义和原理.实际上模糊算法属于智能算法,智能算法也可以叫非模型算法,也就是说,当我们对于系统(de)模型认识不是很深刻,或者说客观(de)原因导致我们无法对系统(de)控制模型进行深入研究(de)时候,智能算法常常能够起到不小(de)作用.这点是方便理解(de),如果一个系统(de)模型可以轻易(de)获得,那么就可以根据系统(de)模型进行模型分析,设计出适合系统模型(de)控制器.但是现实世界中,可以说所有(de)系统都是非线性(de),是不可预测(de).但这并不是说我们就无从建立控制器,因为,大部分(de)系统在一定(de)条件和范围内是可以抽象成为线性系统(de).问题(de)关键是,当我们系统设计(de)范围超出了线性(de)范围,我们又该如何处理.显然,智能算法是一条很不错(de)途径.智能算法包含了专家系统、模糊算法、遗传算法、神经网络算法等.其实这其中(de)任何一种算法都可以跟PID去做结合,而选择(de)关键在于,处理(de)实时性能不能得到满足.当我们处理器(de)速度足够快速时,我们可以选择更为复杂(de)、精度更加高(de)算法.但是,控制器(de)处理速度限制了我们算法(de)选择.当然,成本是限制处理器速度最根本(de)原因.这个道理很简单,51单片机和DSP(de)成本肯定大不相同.专家PID和模糊PID是常用(de)两种PID选择方式.其实,模糊PID适应一般(de)控制系统是没有问题.文章接下来将说明模糊算法(de)一些基本常识.模糊算法其实并不模糊.模糊算法其实也是逐次求精(de)过程.这里举个例子说明.我们设计一个倒立摆系统,假如摆针偏差<5°,我们说它(de)偏差比较“小”;摆针偏差在5°和10°之间,我们说它(de)偏差处于“中”(de)状态;当摆针偏差>10°(de)时候,我们说它(de)偏差有点儿“大”了.对于“小”、“中”、“大”这样(de)词汇来讲,他们是精确(de)表述,可问题是如果摆针偏差是3°呢,那么这是一种什么样(de)状态呢.我们可以用“很小”来表述它.如果是7°呢,可以说它是“中”偏“小”.那么如果到了80°呢,它(de)偏差可以说“非常大”.而我们调节(de)过程实际上就是让系统(de)偏差由非常“大”逐渐向非常“小”过度(de)过程.当然,我们系统这个调节过程是快速稳定(de).通过上面(de)说明,可以认识到,其实对于每一种状态都可以划分到大、中、小三个状态当中去,只不过他们隶属(de)程度不太一样,比如6°隶属于小(de)程度可能是,隶属于中(de)程度是,隶属于大(de)程度是0.这里实际上是有一个问题(de),就是这个隶属(de)程度怎么确定这就要求我们去设计一个隶属函数.详细内容可以查阅相关(de)资料,这里没有办法那么详细(de)说明了.(见附录3)这里面有些说明.那么,知道了隶属度(de)问题,就可以根据目前隶属(de)程度来控制电机以多大(de)速度和方向转动了,当然,最终(de)控制量肯定要落实在控制电压上.这点可以很容易(de)想想,我们控制(de)目(de)就是让倒立摆从隶属“大”(de)程度为1(de)状态,调节到隶属“小”(de)程度为1(de)状态.当隶属大多一些(de)时候,我们就加快调节(de)速度,当隶属小多一些(de)时候,我们就减慢调节(de)速度,进行微调.可问题是,大、中、小(de)状态是汉字,怎么用数字表示,进而用程序代码表示呢其实我们可以给大、中、小三个状态设定三个数字来表示,比如大表示用3表示,中用2表示,小用1表示.那么我们完全可以用1+2+3=来表示它,当然这个公式也不一定是这样(de),这个公式(de)设计是系统模糊化和精确化(de)一个过程,读者也可参见相关文献理解.但就这个数字而言,可以说明,目前6°(de)角度偏差处于小和中之间,但是更偏向于中.我们就可以根据这个数字来调节电机(de)转动速度和时间了.当然,这个数字与电机转速(de)对应关系,也需要根据实际情况进行设计和调节.前面一个例子已经基本上说明了模糊算法(de)基本原理了.可是实际上,一个系统(de)限制因素常常不是一个.上面(de)例子中,只有偏差角度成为了系统调节(de)参考因素.而实际系统中,比如PID系统,我们需要调节(de)是比例、积分、微分三个环节,那么这三个环节(de)作用就需要我们认清,也就是说,我们需要根据超调量、调节时间、震荡情况等信息来考虑对这三个环节调节(de)比重,输入量和输出量都不是单一(de),可是其中必然有某种内在(de)逻辑联系.所以这种逻辑联系就成为我们设计工作(de)重点了.下一篇文章将详细分析PID三个变量和系统性能参数之间(de)联系.PID控制算法(de)c语言实现十一(PID系列完结篇)模糊PID(de)参数整定这几天一直在考虑如何能够把这一节(de)内容说清楚,对于PID而言应用并没有多大难度,按照基本(de)算法设计思路和成熟(de)参数整定方法,就算是没有经过特殊训练和培训(de)人,也能够在较短(de)时间内容学会使用PID算法.可问题是,如何能够透彻(de)理解PID算法,从而能够根据实际(de)情况设计出优秀(de)算法呢.通过讲述公式和基本原理肯定是最能说明问题(de),可是这样(de)话怕是犯了“专家”(de)错误了.对于门槛比较低(de)技术人员来讲,依然不能透彻理解.可是说(de)入耳了,能不能透彻说明也是一个问题,所以斟酌了几天,整理了一下思路才开始完成PID系列文章(de)最后一篇.我所说(de)最后一篇不代表PID(de)功能和发展就止步与此,仅仅是说明,透过这一些列(de)文章,基本上已经可以涵盖PID设计(de)要点,至于更深入(de)研究,就交给有需要(de)读者去做.上一节中大致讲述了一下模糊算法.实际上模糊算法(de)很多概念在上一节中并没有深入(de)解释.举(de)例子也只是为了说明模糊算法(de)基本含义,真正(de)模糊算法是不能这么设计(de),当然也不会这么简单.模糊算法(de)核心是模糊规则,如果模糊规则制定(de)出色,那么模糊算法(de)控制效率就高.其实这是智能算法(de)一般特性,规则是系统判断和处理(de)前提.那么就说说PID(de)规则该怎么制定.我们知道,模糊算法(de)本质是对PID(de)三个参数进行智能调节.那么首先要提出(de)问题是如何对PID(de)参数进行调节这个问题其实是参数整定(de)问题,现实当中有很多整定方法.可是我们需要从根本上了解为什么这么整定,才能知道该如何建立数学模型进行分析.那么要回答如何整定参数(de)问题,就需要先明白PID参数(de)作用都是什么对系统有什么影响我们从作用和副作用两个方面说明参数对系统(de)影响.1.比例环节Kp,作用是加快系统(de)响应速度,提高系统(de)调节精度,副作用是会导致超调;2.积分环节Ki,作用是消除稳态误差,副作用是导致积分饱和现象;3.微分环节Kd,作用是改善系统(de)动态性能,副作用是延长系统(de)调节时间.理解了上述问题,那么就可以“辩证施治,对症下药”了.比如说,如果系统响应速度慢,我们就加大Kp(de)取值,如果超调量过大我们就减小Kp(de)取值等等.可是问题这些语言(de)描述该如何用数学形式表达出来呢.我们所知道(de),反馈系统(de)实质就是系统(de)输出量作为反馈量与系统(de)输入量进行作差,从而得到系统(de)误差e,那么这个误差e就能够反应目前系统所处(de)状态.误差e可以表明目前系统(de)输出状态到底偏离要求多少.而误差e(de)变化律ec,表示误差变化(de)速度.这样,我们可以根据这两个量(de)状态来分析三个参数此时应该如何取值,假如e为负方向比较大,ec也为负方向增大状态,此时比例环节要大一些,从而加快调节速度,而积分环节要小一些,甚至不加积分环节,从而防止负方向上出现饱和积分(de)现象.微分环节可以稍加一些,在不影响调节时间(de)情况下,起到改善系统动态性能(de)作用.附录1看到有不少人问到底如何让UK值与PWM占空比值对应,进而实现占空比输出和输出控制电压对应.(注意,我这里讨论(de)前提是输出控制(de)是电压,不是PWM方波.PWM输出后要经过滤波整形再输出控制.)前提条件:输出电压控制电压范围是0-10V.给定、反馈、输出电压采样输入电压范围是0-5V(经过运放).使用单片机AD为10位AD芯片.那么10位AD芯片电压采集得到(de)数据范围就是0-1024.PWM为 8位可调占空比方波,0对应输出占空比为0(de)方波,255对应输出占空比100%(de)方波,127对应输出50%(de)方波.比如当前给定是,反馈电压是1V.(KP,KI,KD等系数略,关于PID算法(de)整数实现我在前文中有论述如何实现).那么经过AD采样1、给定对应为 5122、反馈1V对应为 205假定经过PID计算得到(de)UK为400也就意味着输出电压应当为(400(UPWM峰值电压))/1024那么UK对应(de)PWM占空比是多少呢我们知道,UK=1024对应占空比为100,也就是PWM(de)占空比系数为255.可知,PWM系数 = UK/4;那么400就应当对应系数 400/4=100.也就是输出电压=40010/1024=同时,由于采样精度以及PWM输出占空比精度控制(de)问题,将导致输出电压和期望值不是那么线性,所以,我在项目内加入了输出电压采样(de)控制.采样AD输入为0-5V,所以,对于输出0-10V有一个缩小(de)比例.输出10V则采样值对应为255输出5V则采样之对应127可知,对应AD结果为97采样输出电压值,可以针对性(de)调整一下占空比输出,从而得到误差允许范围内(de)一个控制输出电压.同时,经过一些加速控制(de)手段.可以比较迅速(de)达到控制(de)目(de).下文中(de)UK控制方法是针对增量式PID控制而来做(de).//void PWMProcess(void){uint16 idata temp;uint16 idata UKTemp;temp = 0;UKTemp = 0;if( = 0 ) //判断是否需要改变占空比{ //是否需要改变占空比和你(de)被控系统特性有关= 0;UKTemp = + ;//计算UK控制量//控制量和计算值以及一个开关量有关,我这里(de)开关量是系统需要(de)时候叠加在控制量上(de)一个变量.if(UKTemp>999){UKTemp = 999;}//这里只所以是999封顶而不是1024是因为我(de)系统PWM(de)峰值电压是12V导致.while(1) //如果输出电压和期望电压相差 Delta,则继续调整占空比,直到在误差以内{ADChPro(UPWMADCH); //测量输出电压if( [UPWMADCH] == UKTemp){return;}if( [UPWMADCH] > UKTemp) //如果当前电压大于输出电压,减小占空比{if( ( [UPWMADCH] - UKTemp ) > UDELTA ){temp = [UPWMADCH] - UKTemp; //temp = temp / 2; //下降可以加速下降,所以下降参数加倍if( > temp ){= - temp;else{= 0;}}else{return;}}else //如果当前电压小于输出电压{if( ( UKTemp - [UPWMADCH] ) > UDELTA ){temp = UKTemp - [UPWMADCH];temp = temp / 4; //上升处理不要超调,所以每次只+一半 if( > temp ){+= (temp/2);}else{= 255;}}elsereturn;}}DisPlayVoltage();PWMChangeDuty; //改变占空比Delay(10,10);}}}//附录2直流电机PWM调速系统中控制电压非线性研究引言由于线性放大驱动方式效率和散热问题严重,目前绝大多数直流电动机采用开关驱动方式.开关驱动方式是半导体功率器件工作在开关状态,通过脉宽调制PWM控制电动机电枢电压,实现调速.目前已有许多文献介绍直流电机调速,宋卫国等用89C51单片机实现了直流电机闭环调速;张立勋等用AVR单片机实现了直流电机PWM调速;郭崇军等用C8051实现了无刷直流电机控制;张红娟等用PIC单片机实现了直流电机PWM调速;王晨阳等用DSP实现了无刷直流电机控制.上述文献对实现调速(de)硬件电路和软件流程(de)设计有较详细(de)描述,但没有说明具体(de)调压调速方法,也没有提及占空比与电机端电压平均值之间(de)关系.在李维军等基于单片机用软件实现直流电机PWM调速系统中提到平均速度与占空比并不是严格(de)线性关系,在一般(de)应用中,可以将其近似地看作线性关系.但没有做深入(de)研究.本文通过实验验证,在不带电机情况下,PWM波占空比与控制输出端电压平均值之间呈线性关系;在带电机情况下,占空比与电机端电压平均值满足抛物线方程,能取得精确(de)控制.本文(de)电机闭环调速是运用Matlab拟合(de)关系式通过PID控制算法实现.1 系统硬件设计本系统是基于TX-1C实验板上(de)AT89C52单片机,调速系统(de)硬件原理图如图1所示,主要由AT89C52单片机、555振荡电路、L298驱动电路、光电隔离、霍尔元件测速电路、MAX 232电平转换电路等组成.图1 闭环控制系统示意图2 系统软件设计系统采用模块化设计,软件由1个主程序,3个中断子程序,即外部中断0、外部中断1,定时器0子程序,PID算法子程序,测速子程序及发送数据到串口显示子程序组成,主程序流程图如图2所示.外部中断0通过比较直流电平与锯齿波信号产生PWM波,外部中断1用于对传感器(de)脉冲计数.定时器0用于对计数脉冲定时.测得(de)转速通过串口发送到上位机显示,通过PID模块调整转速到设定值.本实验采用M/T法测速,它是同时测量检测时间和在此检测时间内霍尔传感器所产生(de)转速脉冲信号(de)个数来确定转速.由外部中断1对霍尔传感器脉冲计数,同时起动定时器0,当计数个数到预定值2 000后,关定时器0,可得到计2 000个脉冲(de)计数时间,由式计算出转速:n=60f/K=60N/(KT) (1)式中:n为直流电机(de)转速;K为霍尔传感器转盘上磁钢数;f为脉冲频率;N为脉冲个数;T为采样周期.图2 主程序流程图3 实验结果及原因分析3.1 端电压平均值与转速关系3.1.1 实验结果实验用(de)是永磁稳速直流电机,型号是EG-530YD-2BH,额定转速2 000~4 000 r/min,额定电压12 V.电机在空载(de)情况下,测得(de)数据用Matlab做一次线性拟合,拟合(de)端电压平均值与转速关系曲线如图3(a)所示.相关系数R-square:0.952 1.拟合曲线方程为:y=0.001 852x+0.296 3 (2)由式(2)可知,端电压平均值与转速可近似为线性关系,根椐此关系式,在已测得(de)转速(de)情况下可以计算出当前电压.为了比较分析,同样用Matlab做二次线性拟合,拟合(de)端电压平均值与转速关系曲线如图3(b)所示.相关系数R-square:0.986 7.图3 端电压平均值与转速关系曲线图3.1.2 原因分析比较图3(a)可知,当转速在0~1 500 r/min和4 000~5 000 r/min,端电压平均值与转速间存在(de)非线性,用二次曲拟合如图3(b)所示,拟合相关系数较高.由图3(a)可见,当电机转速为0时电机两端电压平均值约为1.3 V.这是因为电机处于静止状态时,摩擦力为静摩擦力,静摩擦力是非线性(de).随着外力(de)增加而增加,最大值发生在运动前(de)瞬间.电磁转矩为负载制动转矩和空载制动转矩之和,由于本系统不带负载,因此电磁转矩为空载制动转矩.空载制动转矩与转速之间此时是非线性(de).。

基于DSP的PID控制算法的实现

基于DSP的PID控制算法的实现

《数字信号处理与DSP应用》课程论文题目:基于DSP的PID控制算法的实现学号:***********名:***班级:6班专业:电路与系统课程老师:黄乡生二零一二年二月二十日摘要:按偏差的比例、积分和微分进行控制的调节器称为PID调节器,PID 调节器是连续系统中技术成熟、应用最为广泛的一种调节器。

它构简单,参数易于调整,在长期的应用中已积累了丰富的经验。

特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识,但往往不能得到预期的效果,所以人们常采用数字PID调节器,并根据经验进行在线整定。

这次课程设计将综合用数字信号处理DSP以及自动控制方面的知识,使用CCS集成开发环境进行代码的编译,仿真,才能完成了本次设计。

关键词:PID控制;DSP;仿真;CCSAbstrat: According to the proportion of deviation, integral and differential controls the regulator called the PID regulator, PID regulator is continuous system mature technology, the most widely used a regulator. Its simple structure, easy to adjust the parameters, in the long-term of the application has accumulated a wealth of experience. Especially in the industrial process, because the controlled objects, accurate mathematical model is hard to develop, the parameters of the system and often changes, the use of modern control theory of comprehensive analysis to take a lot of cost model identification, but often can't get the desired effect, so people often uses the digital PID regulator, and according to the experience of online setting. The courses are designed to be integrated with the digital signal processing DSP as well as the automatic control the knowledge of therespect, use CCS integrated development environment for the compilation of the code, simulation, to complete the design.Keywords: PID Control;DSP;simulation ;CCS前言在数字PID算法是目前一般控制领域中经常使用的自动控制算法,它依据给定的设定值,反馈值,以及比例系数,积分和微分时间,计算出一定的控制量,使被控对象能保持在设定的工作范围,并且可以自动的消除外部扰动。

数字信号处理技术_03PID算法(PID算法的DSP实现)

数字信号处理技术_03PID算法(PID算法的DSP实现)

第5章PID算法的DSP实现5.1 PID控制系统5.1.1PID控制系统硬件电路的组成图5.1 PID控制系统的硬件电路5.1.2 PID控制过程图5.2 基于LF2407的PID控制器的实现框图5.2 AD8041 5.2.1 AD8041简介5.2.2 AD8041的引脚与引脚功能5.3 AD7237 5.3.1 AD7237简介5.3.2 AD7237的工作原理5.4 PID 控制5.4.1 PID 控制方法简介 5.4.2 PID 控制方法的实现下面介绍一个典型的数字PID 控制器。

图5.5是数字PID 控制器的原理框图。

图5.5 PID 控制器的原理框图PID 控制的离散形式,如式(5.2)所示。

sdP kisP P T k e k e T K i e T TK k e K k u )1()()()(0--++=∑)( (5.2)增量式PID 控制算式如式(5.4)所示。

)1(-)()(-=∆k u k u k u[][])2()1(21-+--++--k e k e k e K k e K k e k e K d i P )()()()(= (5.4)令)(A d i P K K K +=+,)2(B -d P K K +-=,d K =C ,则⎩⎨⎧∆+-=-+--=∆u(k))1()()2(.)1(.)(A.e u(k)k u k u k e C k e B k(5.5)5.4 定点运算基础5.4.1定标的概念1.数的定标2.溢出及处理方法3.舍入与截尾5.4.2定点运算1.加法/减法定点运算的C语言模拟2.乘法定点运算的C语言模拟3.除法定点运算的C语言模拟4.程序变量的Q值确定5.4.3 TMS320LF2407的定点运算1.定点乘法2.定点加法5.5 PID算法程序实现5.5.1 PID控制算法汇编主程序公式中变量和程序中变量的对应关系及意义表公式中的变量意义描述程序中的对应变量公式中的变量意义描述程序中的对应变量r(k) PID控制器的参考输入量PID_input Ki 积分增益系数高位字Ki_high c(k) PID控制器的实际输入量PID_reference Ki 积分增益系数低位字Ki_low u(k) PID控制器的当前控制量PID_output Kd 微分增益系数Kd u(k-1) PID控制器的上次控制量PID_output1 A A系数高位=Kp+Ki+Kd A_coeff_high e(k) 当前偏差量PID_e0 A A系数低位=Kp+Ki+Kd A_coeff_low e(k-1) 上次偏差量PID_e1 B B系数=Kp+2*Kd B_coeff e(k-2) 上上次偏差量PID_e2 C C系数=Kd 用Kd代替Kp 比例增益系数Kp1.所需的复位和中断向量定义文件“vectors. asm”// 该文件利用汇编语言代码定义了复位和中断向量.title “vectors .asm”;此文件名为vectors .asm.sect “.vectors”;定义主向量段reset: b _c_int0 ;复位向量int1: b GISR1 ;高优先级ADC中断属于INT1int2: b PHANTOMint3: b PHANTOMint4: b PHANTOMint5: b PHANTOMint6: b PHANTOMreserved b PHANTOMsw_int8 b PHANTOM…sw_int31 b PHANTOM.sect “. pvectors”;定义子向量段PVECTORS b PHANTOM ;保留向量地址偏移量0000Hb PHANTOM ;保留向量地址偏移量0001Hb PHANTOM ;保留向量地址偏移量0002Hb PHANTOM ;保留向量地址偏移量0003Hb ADCINT_ISR ;向量地址偏移量0004H为ADC中断b PHANTOM ;保留向量地址偏移量0005H…b PHANTOM ;保留向量地址偏移量00041H2.主程序Digital_PID.asm;实用数字PID控制程序.title "Digital_PID.asm" ;汇编伪指令,定义程序的文件名.include "register.h" ;引用头部文件.include "vectors.asm" ;引用中断向量表.def _cy_begin ;定义程序的入口地址Kp_init .set 100H ;比例增益系数Kp的初始值Ki_high _init .set 00H ;积分增益系数Ki的高位初始值Kp_low_init .set 1000H ;积分增益系数Ki的低位初始值Kd_init .set 05H ;微分增益系数Kd的初始值PID_ref_init .set 500 ;数字PID控制器的参考输入初始值;本程序实现电机速度PID控制,设置参考输入是500转/分钟PID_output_MAX .set 07FFFH ;数字PID控制器输出控制量最大值限幅PID_output_MIN .set 0H ;数字PID控制器输出控制量最小值限幅.dataADRESULT .word 00H ;存储当前A/D转换的结果PID_input .word 00H ;存储变量ADRESULT,也即当前实际输入量c(k) PID_output .word 00H ;存储数字PID控制器的当前控制量u(k)PID_output1 .word 00H ;存储数字PID控制器的上次控制量u(k-1)PID_reference .word 00H ;存储数字PID控制器的当前参考输入量r(k)PID_e0 .word 00H ;存储数字PID控制器的当前偏差量e(k),e(k)=r(k)-c(k)PID_e1 .word 00H ;存储数字PID控制器的上次偏差量e(k-1)PID_e2 .word 00H ;存储数字PID控制器的上上次偏差量e(k-2)Kp .word 00H ;存储比例增益系数KpKi_high .word 00H ;存储积分增益系数Ki的高位字Ki_low .word 00H ;存储积分增益系数Ki的低位字Kd .word 00H ;存储微分增益系数KdA_coeff_high .word 00H ;存储A系数高位A_coeff_low .word 00H ;存储A系数低位B_coeff .word 00H ;存储B系数tmp1_high .word 00H ;暂存单元1的高位字tmp1_low .word 00H ;暂存单元1的低位字tmp2_high .word 00H ;暂存单元2的高位字tmp2_low .word 00H ;暂存单元2的低位字tmp3 .word 00H ;暂存单元3e0_sign .word 00H ;用来存储当前偏差量e(k)的符号abs_e0 .word 00H ;用来存储当前偏差量e(k)的绝对值.text_cy_begin:NOPCALL system_init ;调用系统初始化子程序CALL PID_init ;调用数字PID控制的初始化子程序CALL cy_AD_init ;调用DSP A/D转换器的初始化子程序cy_LOOP: ;主程序进入循环,在高优先级的ADCINT控制下进行;ADCINT一次采样一个实际值,并进行一次PID控制NOPNOPB cy_LOOPsystem_init: ;系统初始化子程序SETC INTM ;关闭系统的全局中断CLRC OVM ;累加器正常溢出CLR SXM ;抑制符号扩展CLRC CNF ;DARAM被映射到数据存储空间B0区LDP #DP_PF1 ;指向7000H~707FH外设寄存器区SPLK #81FEH,SCSR1 ;CLKIN=6M Hz,CLKOUT=4*CLKIN=24M Hz SPLK #00E8H,WDCR ;禁止看门狗LDP #0 ;指向数据页的第0区SPLK #0001H,IMR ;使能INT1SPLK #0FFFFH,IFR ;清除中断标志RETcy_AD_init:LDP #DP_EVB ;A/D转换模块初始化子程序SPLK #0000H,T4CNT ;定时器4的计数器清0SPLK #0176H,T4PR ;定时器的周期寄存器设置为374,周期计数1ms SPLK #0400H,GPTCONB ;位10~9=10,通用定时器的周期中断启动模数转换;位6=0,禁止所有定时器的比较输出SPLK #0160CH,T4CON ;位12~11=10,连续增计数模式;位10~8=110,输入时钟预定标系数为64;位=6,禁止定时器操作;位5~4=00,使用内部CPU时钟SPLK #0FFFFH,EVBIFRASPLK #0FFFFH,EVBIFRBSPLK #0FFFFH,EVBIFRCSPLK #0000H,EVBIMRASPLK #0001H,EVBIMRB ;仅使能EVB的定时器4的周期中断T4PINT SPLK #0000H,EVBIMRCLDP #DP_PF2 ;指向7080H~70FFH外设寄存器区SPLK #0000H,ADCCTRL1 ;配置ADC控制寄存器1;位11~8=0000,ADC的采样时间=2*CPU时钟周期;位7=0,时钟预定标系数CPS=0,ADC输入时钟频率=CPU时钟频率;位6=0,采用启动/停止模式;位5=0,ADC的中断请求为高优先级;位4=0,ADC转换器采用双排序器工作模式;位0=0,禁止自测试使能模式SPLK #8404H,ADCCTRL2 ;配置ADC控制寄存器2;位15=1,不使能ADC转换器的级连模式;位11~10=01,ADC的排序器1在中断标志位1置1时立即申请中断;位9=0,目前ADC的排序器1无中断事件发生;位3~2=01,ADC的排序器2在中断标志位2置1时立即申请中断;位0=0,ADC的排序器2不能被EVB触发源启动SPLK #0001,MAXCONV ;只有一路A/D采样,所以最大转换通道设为1 SPLK #0000H,CHSELSEQ1 ;配置输入通道选择排序控制寄存器SPLK #0000H,CHSELSEQ2 ;使用通道号0SPLK #0000H,CHSELSEQ3SPLK #0000H,CHSELSEQ4CALL AD_ Start ;配置完所有寄存器后,启动A/D转换LDP #4 ;指向200H~27FH数据存储器的B0区SPLK #0000H,ADRESULT ;初始化用户变量ADRESULT,存转换结果RETAD_Start: ;启动A/D转换信号LDP #DP_EVBLACL T4CON ;把定时器4的控制寄存器位6(TENABLE)置1 OR #0040H ;使能定时器4的操作SACL T4CONRETPID_Control: ;根据输入值进行PID算法的计算SETC SXM ;进行符号扩展SETC OVM ;置符号扩展模式为1,溢出时将使用最大正值或负值SPM #0 ;表示乘法器不移位直接装入CALULDP #4 ;指向用户变量区200H~27FHLACL ADRESULT ;把本次A/D转换的结果存储到变量PID_input中SACL PID_inputLACC Ki_high,16 ;把积分增益系数Ki的高位字左移16位加到ACC ADDS Ki_low ;把Ki的高位字和低位字拼接起来加载到ACC ADD Kp,16 ;ACC=Kp+KiADD Kd,16 ;ACC=Kp+Ki+KdSACH A_coeff_high ;系数A高位字=高位(Kp+Ki+Kd)SACL A_coeff_low ;系数A低位字=低位(Kp+Ki+Kd)LACC Kd,16SFL ;此时,ACC=2*KdADD Kp,16 ;ACC=2*Kd+KpSACH B_coeff ;系数B=2*Kd+KpLACC PID_reference ;加载输入参考值SUB PID_input ;ACC=PID_reference-PID_inputSACL PID_e0 ;本次输入的偏差量,e(k)=r(k)-c(k)LT KdMPY PID_e2 ;Kd*e(k-2)PAC ;把乘积寄存器移位后加载到累加器,此处移位值是0 LT B_coeff ;把B系数加载到TREG寄存器中MPY PID_e1 ;B*e(k-1)=(2*Kd+Kp)*e(k-1)SPAC ;此时ACC=Kd*e(k-2)-(2*Kd+Kp)*e(k-1)SACH tmp1_high,1 ;把ACC的高位字放到暂存字tmp1_high中SACH tmp1_low,1 ;把ACC的低位字放到暂存字tmp1_low中;此处开始求最后一项增量,也即当前增量LACC PID_e0 ;加载当前偏差量e(k)到累加器ACC中SACL e0_sign ;把e(k)存储到变量e0_sign,便于后面进行符号判断ABS ;对e(k)取绝对值,为无符号乘法做准备SACL abs_e0LT abs_e0 ;把|e(k)|加载到TREG寄存器中MPYU A_coeff_low ;无符号乘法,A低位字*|e(k)|SPH tmp2_low ;把乘积寄存器PREG的高16位存储到变量tmp2_lowMPYU A_coeff_high ;无符号乘法,A高位字*|e(k)|PAC ;把A高位字*|e(k)|的乘积加载到累加器ADDS tmp2_low ;ACC=A高位字*|e(k)|+A低位字*|e(k)|SACH tmp2_high,1 ;把该结果存储到暂存器变量tmp2_high和tmp2_low SACH tmp2_low,1LACC e0_sigh ;判断当前偏差量e(k)的符号BCND cy_DONE,GT ;当e(k)>0时,不必再进行处理,跳转LACC tmp2_high,16 ;当e(k)<=0时ADDS tmp2_low ;使ACC=系数A高位字*|e(k)|+系数A低位字*|e(k)| NEG ;因为e(k)<=0时,所以使ACC取负值SACH tmp2_high ;把ACC存储到暂存量变量tmp2_high和tmp2_low SACL tmp2_lowcy_DONE: ;对当前偏差量e(k)的符号判断处理结束LACC tmp1_high,16 ;加载[Kd*e(k-2)-(2*Kd+Kp)*e(k-1)]的高位字ADDS tmp1_low ;ACC=Kd*e(k-2)-(2*Kd+Kp)*e(k-1)ADDS tmp2_lowADD tmp2_high,16 ;ACC存放数字PID控制器的控制量△u(k)=u(k)-u(k-1) SACH tmp3 ;tmp3=△u(k)=A*e(k)-(2*Kd+Kp)*e(k-1)+Kd*e(k-2) LACC PID_outputl,16 ;加载上次控制量u(k-1)到ACC,并左移16位ADD tmp3,16 ;得到本次控制量,存放在ACC中,字长是32位SACH PID_output ;取ACC的高16位存放到本次控制量的变量中,;16位已经能满足精度;u(k)=u(k-1)+A*e(k)-(2*Kd+Kp)*e(k-1)+Kd*e(k-2) LACC PID_output ;变量PID_output中存放送到D/A的控制量SUB #PID_output_MAX ;对输出控制量进行限幅控制BCND greater_MAX,GT ;进行上限幅LACC PID_outputSUB #PID_output_MINBCND less_MIN,LT ;进行下限幅B PID_endgreater_MAX:SPLK #PID_output_MAX,PID_outputB PID_endless_MIN:SPLK #PID_output_MIN,PID_outputPID_end: ;为下一次PID控制做准备LDP #4 ;指向用户变量区200H~27FHLACC PID_e1SACL PID_e2 ;使得e(k-2)=e(k-1)LACC PID_e0SACL PID_e1 ;使得e(k-1)=e(k)LACC PID_outputSACL PID_output1 ;使得PID_output1=PID_outputCLRC SXM ;SXM=0,抑制符号位扩展RETPID_init: ;数字PID控制器输入值和参数初始化LDP #4 ;指向用户变量区,数据存储器B0区的200H~27FH SPLK #Kp_init,Kp ;初始化比例增益系数KpSPLK #Ki_high_init,Ki_high ;初始化积分增益系数高位字Ki_highSPLK #Ki_low_init,Ki_low ;初始化积分增益系数高位字Ki_lowSPLK #Kd_init,Kd ;初始化微分增益系数KdSPLK #PID_ref_init,PID_reference ;初始化系统参考输入值PID_reference=r(t)SPLK #0,PID_e2 ;初始化上次的偏差量e(k-2)SPLK #0,PID_e1 ;初始化上次的偏差量e(k-1)SPLK #0,PID_e0 ;初始化当前的偏差量e(k)SPLK #0,PID_output1 ;初始化上次的控制量u(k-1)SPLK #0,PID_output ;初始化当前的控制量u(k)RETGISR1: ;优先级INT1中断入口LDP #DP_PF1 ;DP指针指向7000H~707FH外设数据区LACC PIVR,1 ;读取外设中断向量寄存器(RIVR),并左移一位ADD # PVECTORS ;再加上外设中断子向量的入口地址BACC ;根据累加器的值,跳到相应的中断服务子程序中ADCINT_ISR: ;高优先级模式的ADC中断子程序CLRC SXM ;抑制符号位扩展LDP #4 ;指向用户变量区LAR AR2,#RESULT0 ;把当前A/D转换的结果存储到AR2中MAR *,AR2 ;把AR2设置为当前辅助寄存器LACC *,10SACH ADRESULT ;变量ADRESULT存储当前A/D转换的结果CALL PID_Control ;调用数字PID控制子程序CLRC INTM ;开总中断,因为一进中断就自动关闭总中断RET ;中断返回PHANTOM: ;假中断向量子程序LDP #DP_PF1 ;DP指针指向7000H~707FH外设数据区SPLK #05555H,WDKEY ;复位看门狗SPLK #0AAAH,WDKEYRET.end ;程序结束5.5.2 PID控制算法汇编主程序分析5.5.3 PID控制算法的命令文件-stack 40MEMORY{PAGE 0: /*程序空间*/VECS: origin=0000H,length=0040H /*中断向量存储空间*/PVECS: origin=0044H,length=0100H /*外围中断向量*/PM: origin=0150H,length=7EB0H /*片内Flash存储空间*/ PAGE 1: /*数据空间*/BLOCK_B2: origin=0060H,length=0020H /*块B2*/BLOCK_B0: origin=0200H,length=0100H/*块B0,若CNF=0,则分配为片内DARAM*/ BLOCK_B1: origin=0300H,length=0100H /*块B1*/}SECTIONS{.text: > PM PAGE 0.vectors: > VECS PAGE 0.pvectors: > PVECS PAGE 0.data: > BLOCK_B0 PAGE 1}5.5.4 PID控制算法的命令文件分析(1)伪指令“MEMORY”定义了程序存储器(PAGE 0)、数据存储器(PAGE 1)。

PID控制算法介绍与实现

PID控制算法介绍与实现

PID控制算法介绍与实现一、PID的数学模型在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵的是,在很多控制算法当中,PID控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典。

经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的。

PID算法的一般形式:PID算法通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节的加和。

这里我们规定(在t时刻):1.输入量为2。

输出量为3.偏差量为二、PID算法的数字离散化假设采样间隔为T,则在第K个T时刻:偏差=—积分环节用加和的形式表示,即 + + …微分环节用斜率的形式表示,即[—]/T;PID算法离散化后的式子:则可表示成为:其中式中:比例参数:控制器的输出与输入偏差值成比例关系.系统一旦出现偏差,比例调节立即产生调节作用以减少偏差。

特点:过程简单快速、比例作用大,可以加快调节,减小误差;但是使系统稳定性下降,造成不稳定,有余差.积分参数:积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差.微分参数:微分信号则反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的快速性。

PID的基本离散表示形式如上。

目前的这种表述形式属于位置型PID,另外一种表述方式为增量式PID,由上述表达式可以轻易得到:那么:上式就是离散化PID的增量式表示方式,由公式可以看出,增量式的表达结果和最近三次的偏差有关,这样就大大提高了系统的稳定性。

需要注意的是最终的输出结果应该为:输出量 = + 增量调节值三、PID的C语言实现1。

位置式PID的C语言实现上边已经抽象出了位置性PID和增量型PID的数学表达式,这里重点讲解C语言代码的实现过程.第一步:定义PID变量结构体,代码如下:struct t_pid{float SetSpeed;//定义设定值float ActualSpeed; //定义实际值float err; //定义偏差值float err_last; //定义上一个偏差值float Kp,Ki,Kd; //定义比例、积分、微分系数float voltage;//定义电压值(控制执行器的变量)float integral; //定义积分值}pid;第二部:初始化变量,代码如下:void PID_init(){pid。

DSP的PID控制算法实现例程(精)

DSP的PID控制算法实现例程(精)

一个例程PID 程序,请教高手,怎么样设置Q 格式?一下是我附上的一个pid 控制程序例程(2407的,请教高手,这里边ki 是Q31格式的,如果我的ki 是个大于1的整数,该怎么设置?还有在寄存器里写个16进制数,怎么样写识别它的格式?比如设置成Q0,Q8,Q15该怎么操作?谢谢了; File name: pig.asm; .ref PID_REG1, PID_REG1_INIT; .ref pid_fb_reg1, pid_ref_reg1; .ref pid_out_reg1; .def PID_REG1, PID_REG1_INIT.def pid_fb_reg1, pid_ref_reg1.def pid_out_reg1;DP_USER .set 5 ;DP 指向280h-300h 单元Kp_REG1_ .set 1000h ;for Kp_reg1Ki_HI_REG1_ .set 0005h ;for Ki_low_reg1(Ki=0 for PDKi_LO_REG1_ .set 0DEADh ;for Ki_high_reg1 (Ki=0 for PDKd_REG1_ .set 0000h ;for Kd_reg1(Kd=0 for PIPID_REF_REG1_ .set 0000h ;for pid_ref_reg1PID_OUT_MAX_ .set 0666h ;for pid_out_maxPID_OUT_MIN_ .set 0000h ;for pid_out_min.include "F2407REGS.H" ;Peripheral Registers ;Definition in "F2407REGS.H";Variable Definitions for PID_REG1 module Kp_reg1 .usect "pid_reg1",1Ki_low_reg1 .usect "pid_reg1",1Ki_high_reg1 .usect "pid_reg1",1Kd_reg1 .usect "pid_reg1",1K0_low_reg1 .usect "pid_reg1",1K0_high_reg1 .usect "pid_reg1",1K1_reg1 .usect "pid_reg1",1pid_fb_reg1 .usect "pid_reg1",1pid_ref_reg1 .usect "pid_reg1",1pid_out_reg1 .usect "pid_reg1",1pid_out1_reg1 .usect "pid_reg1",1pid_e0_reg1 .usect "pid_reg1",1pid_e1_reg1 .usect "pid_reg1",1pid_e2_reg1 .usect "pid_reg1",1tmp1_low_reg1 .usect "pid_reg1",1tmp1_high_reg1 .usect "pid_reg1",1tmp2_low_reg1 .usect "pid_reg1",1 tmp2_high_reg1 .usect "pid_reg1",1 tmp3_reg1 .usect "pid_reg1",1abs_e0_reg1 .usect "pid_reg1",1sign_reg1 .usect "pid_reg1",1.def _c_int0;PID_REG1_INIT:.text_c_int0: ;相当于主程序的入口LDP #Kp_reg1SPLK #Kp_REG1_,Kp_reg1SPLK #Ki_LO_REG1_,Ki_low_reg1 SPLK #Ki_HI_REG1_,Ki_high_reg1 SPLK #Kd_REG1_,Kd_reg1SPLK #0,pid_e1_reg1SPLK #0,pid_e2_reg1SPLK #0,pid_out1_reg1SPLK #PID_REF_REG1_,pid_ref_reg1 RET;PID_REG1:SETC SXM ;Sign extension modeSETC OVM ;Overflow modeSPM 0 ;Reset SPM;Converting from Kp, Ki, Kd to K0, K1 (Note: K2 = KdLDP #Kp_reg1LACC Ki_high_reg1,16 ;ACC = Ki (Q31 ADDS Ki_low_reg1 ;ACC = Ki (Q31 ADD Kp_reg1,16 ;ACC = Kp + Ki (Q31 ADD Kd_reg1,16 ;ACC = Kp + Ki + Kd (Q31 SACH K0_high_reg1 ;K0 = Kp + Ki + Kd (Q31SACL K0_low_reg1 ;K0 = Kp + Ki + Kd (Q31 LACC Kd_reg1,16 ;ACC = Kd (Q15 SFL ;ADD = 2*Kd (Q15 ADD Kp_reg1,16 ;ACC = 2*Kd+Kp (Q15 SACHK1_reg1 ;K1 = 2*Kd+Kp (Q15 ;e(k = ref(k-fb(k => Q15 = Q15 - Q15LACC pid_ref_reg1 ;ACC = pid_ref_reg1 (Q15 SUB pid_fb_reg1 ;ACC =pid_ref_reg1-pid_fb_reg1; (Q15SACL pid_e0_reg1 ;e(k = pid_ref_reg1 - pid_fb_reg1; (Q15;tmp1 = -K1*e(k-1+K2*e(k-2 => Q31 = -Q15*Q15 + Q15*Q15LT Kd_reg1 ;TREG = K2 (Q15MPY pid_e2_reg1 ;PREG = K2*e(k-2 (Q30 PAC ;ACC = K2*e(k-2 (Q30LT K1_reg1 ;TREG = K1 (Q15 MPY pid_e1_reg1 ;PREG = K1*e(k-1 (Q30 SPAC ;ACC = -K1*e(k-1+K2*e(k-2 (Q30 SACH tmp1_high_reg1,1;tmp1 = -K1*e(k-1+K2*e(k-2 (Q31SACL tmp1_low_reg1,1 ;tmp1 = -K1*e(k-1+K2*e(k-2 (Q31 ;tmp2 = K0*e(k => Q31 = Q31*Q15;check sign for "error" onlyLACC pid_e0_reg1 ;ACC = e(kSACL sign_reg1 ;Sign (0=+,1=- for K0*e(k;take absolute for "pid_e2_reg1" only because "K0" is always positiveABS ;ACC = |e(k|SACL abs_e0_reg1 ;|e(k| = ACC low;now they're positive.LT abs_e0_reg1 ;TREG = |e(k|MPYU K0_low_reg1 ;PREG = K0_low*|e(k|SPH tmp2_low_reg1 ;tmp2_low = PREG highMPYU K0_high_reg1 ;PREG = K0_high*|e(k|PAC ;ACC = K0_high*|e(k|ADDS tmp2_low_reg1 ;ACC = K0_high*|e(k| + tmp2_low SACHtmp2_high_reg1,1;tmp2_high = ACC high (Q31SACL tmp2_low_reg1,1 ;tmp2_low= ACC low (Q31 ;check the sign conditionLACC sign_reg1 ;ACC = signBCND DONE_REG1, GT ;Check sign = positive ?LACC tmp2_high_reg1,16;ACC high = tmp2_highADDS tmp2_low_reg1 ;ACC low= tmp2_lowNEG ;Make the result negativeSACH tmp2_high_reg1 ;tmp2_high= ACC highSACL tmp2_low_reg1 ;tmp2_low= ACC lowDONE_REG1;tmp2 + tmp1 = tmp3 => Q31 + Q31 = Q15LACC tmp1_high_reg1,16;ACC high = tmp1_high (Q31ADDS tmp1_low_reg1 ;ACC low= tmp1_low (Q31ADDS tmp2_low_reg1 ;ACC = tmp1_low+tmp2_low (Q31 ADDHtmp2_high_reg1 ;ACC = tmp1_high+tmp2_high (Q31 SACH tmp3_reg1 ;tmp3 = tmp1_high+tmp1_high (Q15 ;u(k = u(k-1 + tmp3 => Q15 = Q15 + Q15LACC pid_out1_reg1,16 ;ACC = u(k-1 (Q15ADD tmp3_reg1,16 ;ACC = u(k-1+K0*e(k-K1*e(k-1+K2*e(k-2 (Q15 SACHpid_out_reg1 ;u(k = u(k-1+K0*e(k-K1*e(k-1+K2*e(k-2 (Q15 ;If u(k > u_max, u(k =u_max. If u(k < u_min, u(k = u_min.LACC pid_out_reg1 ;ACC = u(k (Q15SUB #PID_OUT_MAX_ ;ACC = u(k-u_max (Q15 BCND SAT_MAX,GT ;Branch if saturated at maxLACC pid_out_reg1 ;ACC = u(k (Q15 SUB #PID_OUT_MIN_ ;ACC = u(k-u_min (Q15 BCND SAT_MIN,LT ;Brnch if saturated at minB REG1_ENDSAT_MINSPLK #PID_OUT_MIN_,pid_out_reg1;u(k = u_min (Q15B REG1_ENDSAT_MAXSPLK #PID_OUT_MAX_,pid_out_reg1;u(k = u_max (Q15REG1_END;Updating the errors e(k-1, e(k-2 and output u(k-1LACC pid_e1_reg1 ;ACC = e(k-1SACL pid_e2_reg1 ;e(k-2 = e(k-1 (Q15LACC pid_e0_reg1 ;ACC = e(k (Q15 SACL pid_e1_reg1 ;e(k-1 = e(k (Q15 LACC pid_out_reg1 ;ACC = u(k SACL pid_out1_reg1 ;u(k-1 = u(k CLRC SXMRET (Q15 (Q15 (Q15。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

式中


由于计算机的输出 u(k)直接控制执行机构(如阀门) , u(k)的值与执行机构的 位置(如阀门开度) ,所以通常称上式为位置式 PID 控制算法。
图 2 位置式 PID 控制器流程图 位置式 PID 控制算法的缺点:当前采样时刻的输出与过去的各个状态有关,计 算时要对 e(k)进行累加,运算量大;而且控制器的输出 u(k)对应的是执行机构的实 际位置,如果计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变 化。 2.2.2 增量型控制 增量型 PID 算法的算式为: u ( n ) u ( n ) u ( n 1)
u ( n ) u P ( n ) u I ( n ) u D ( n) u 0 PID 控制 2.2 PID 算法的两种类型 2.2.1 位置型控制 T T n u ( n) K P e( n) e(i ) D e(n) e( n 1) u 0 TI i 0 T 基本 PID 控制器的理想算式为 1 t de(t ) u (t ) K P e(t ) e(t )dt TD TI 0 dt 式中 e(t ) r (t ) c(t ) u(t)——控制器(也称调节器)的输出; e(t)——控制器的输入(常常是设定值与被控量之差,即 e(t)=r(t)-c(t)) ; Kp——控制器的比例放大系数; Ti ——控制器的积分时间; Td——控制器的微分时间。 设 u(k)为第 k 次采样时刻控制器的输出值,可得离散的 PID 算式
K P e ( n ) e ( n 1) K P T T e ( n ) K P D e ( n ) 2 e ( n 1) e ( n 2 ) TI T
或者写成
u ( n ) a 0 e ( n ) a 1 e ( n 1) a 2 e ( n 2 ) T T a0 K P (1 D ) a1 K P (1 2TD ) a 2 K P TD TI T , T , T 式中
Keywords: PID Control; DSP;simulation ;CCS
前 言 在数字 PID 算法是目前一般控制领域中经常使用的自动控制算法,它
依据给定的设定值,反馈值,以及比例系数,积分和微分时间,计算出一定的控制 量,使被控对象能保持在设定的工作范围,并且可以自动的消除外部扰动。由于软 件系统的灵活性,经计算出的 PID 参数可以在调试过程中随时改变。能更精确的控 制系统。得到较好的控制效果。PID 控制原理简单、实现方便,并且适应面广、鲁棒 性强,其控制品质对被控对象特性的变化不是很敏感。随着计算机技术的发展,在 PID 控制的基础上,出现了很多改进的数字 PID 控制方法 ,如微分先行 PID 控制、 积分分离 PID 控制、带死区的 PID 控制等。对于数字 PID 控制方法,又分为增量 式 PID 控制算式和位置式 PID 控制算式。在绝大多数工业控制中,数字 PID 控制 仍然是一种稳定的、可靠的、实现简单的、使用广泛的控制方法。 本设计以 TI 公司的 TMS320VC5509 和外接 D/ A 芯片,实现数字 PID 控制 器,采用的 PID 控制算法是增量式 PID 控制算法。TMS320VC5509 具有较高的运 行速度和数据处理能力,能保证系统对多路模拟信号的实时采集和处理,提高系统的 整体性能和集成度。 在 DSP 内部设置参考输入量,通过 DSP 片上 10 位 A/ D 转换 器采样,把控制对象的实际输出量采集到 DSP 中,经过 DSP 的数字运算处理后,通 过外部的 D/ A AD7237 进行数/ 模转换,得到实际的模拟控制量去控制被控对象, 使之按照系统的设置运行工作。
《数字信号处理与 DSP 应用》 课程论文
题目:
基于 DSP 的 PID 控制算法的实现
学 号: 姓 名: 班 级: 专 业: 课程老师:
2011080911 蔡志威 6班 电路与系统 黄乡生
二零一二年二月二十日
摘 要:按偏差的比例、积分和微分进行控制的调节器称为 PID 调节器,PID
调节器是连续系统中技术成熟、应用最为广泛的一种调节器。它构简单,参数易于 调整,在长期的应用中已积累了丰富的经验。特别在工业过程中,由于控制对象的 精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合 要耗费很大的代价进行模型辨识,但往往不能得到预期的效果,所以人们常采用数 字 PID 调节器,并根据经验进行在线整定。这次课程设计将综合用数字信号处理 DSP 以及自动控制方面的知识,使用 CCS 集成开发环境进行代码的编译,仿真,才 能完成了本次设计。
增量式 PID 是指数字控制器的输出只是控制量的增量Δu(k)。采用增量式算法 时,计算机输出的控制量Δu(k)对应的是本次执行机构位置的增量,而不是对应执 行机构的实际位置,因此要求执行机构必须具有对控制量增量的累积功能,才能完 成对被控对象的控制操作。执行机构的累积功能可以采用硬件的方法实现;也可以 采用软件来实现,如利用算式 由上式可得增量式 PID 控制算式 程序化来完成。
2、 数字 PID 控制器
2.1 模拟 PID 控制规律的离散化 模拟形式 e(t ) r (t ) c (t ) de(t ) dT 离散化形式 e( n ) r ( n ) c ( n ) e( n) e( n 1) T
n n

t
0
e(t ) dt
e(i)T T e(i)
i 0 i 0
根据上表和模拟 PID 的数学表达式,可以退出数字 PID 控制器的差分方程为:
T T n u ( n) K P e( n) e(i ) D e(n) e( n 1) u 0 TI i 0 T u P ( n) u I ( n) u D (n) u 0
1、模拟 PID 调节器
模拟 PID 控制系统组成如图 1 所示:
图 1 模拟 PID 控制系统原理框图 PID 调节器是一种线性调节器,它将给定值 r(t)与实际输出值 c(t)的偏差 的比例(P)、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进行控制。 根据图 1,可以推导出 PID 调节器的微分方程为:
1 u (t ) K P e(t ) TI
e(t )dt T
0
t
D
de(t ) dt
式中
e(t ) r (t ) c (t )
u(t)——控制器(也称调节器)的输出; e(t)——控制器的输入(常常是设定值与被控量之差,即 e(t)=r(t)-c(t)) ; Kp——控制器的比例放大系数; Ti ——控制器的积分时间; Td —— 控制器的微分时间。 1.1 PID 调节器各校正环节的作用 比例环节:即时成比例地反应控制系统的偏差信号 e(t),偏差一旦产生,调节 器立即产生控制作用以减小偏差。对于大多数调节器而言,都不采用比例增益 kc 作为刻度,而是用比例度来刻度,即δ=1/kc*100%. 也就是说比例度与调节器的 放大倍数的倒数成比例。调节器的比例度越小,它的放大倍数越大,它把偏差放大 的能力越大,反之亦然。 积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积 分时间常数 TI,TI 越大,积分作用越弱,反之则越强。调节器的积分作用就是为了 消除自控系统的余差而设置的。所谓积分,就是随时间进行累积的意思,即当有偏 差输入 e 存在时,积分调节器就要将偏差随时间不断累积起来,也就是积分累积的 快慢与偏差 e 的大小和积分速度成正比。只要有偏差 e 存在,积分调节器的输出就 要改变,也就是说积分作用总是起作用的,只有偏差不存在时,积分才会停止。 微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得 太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减 小调节时间。可见,微分分量对偏差的任何变化都会产生控制作用,以调整系统输 出,阻止偏差变化,预见随后。偏差变化越快,则产生的阻止作用越大。对于一个固 定不变的偏差 e(t),不论其数值多大,根本不会有微分作用输出。
式中
u P (n) K P e(n)
u I ( n)ห้องสมุดไป่ตู้ K P T TI
n
称为比例项 称为积分项 称为微分项
e(i)
i 0
T u D (n) K P D e(n) e(n 1) T
常用的控制方式有 P 控制 PI 控制 PD 控制
u ( n) u P ( n) u 0 u ( n) u P ( n) u I ( n) u 0 u ( n ) u P ( n) u D ( n ) u 0
式中 进一步可以改写成
式中


一般计算机控制系统的采样周期 T 在选定后就不再改变, 所以, 一旦确定了 Kp、 Ti、Td,只要使用前后 3 次测量的偏差值即可求出控制增量。 根据上述分析,其程序流程图如下:
图 3 增量型控制算法路程图 增量式算法优点:①算式中不需要累加。控制增量Δu(k)的确定仅与最近 3 次 的采样值有关,容易通过加权处理获得比较好的控制效果;②DSP 每次只输出控制 增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影 响生产过程。 经过综合比较,最终选择了增量式控制算法。
关键词:PID 控制; DSP;仿真 ;CCS
Abstrat: According to the proportion of deviation, integral and differential
controls the regulator called the PID regulator, PID regulator is continuous system mature technology, the most widely used a regulator. Its simple structure, easy to adjust the parameters, in the long-term of the application has accumulated a wealth of experience. Especially in the industrial process, because the controlled objects, accurate mathematical model is hard to develop, the parameters of the system and often changes, the use of modern control theory of comprehensive analysis to take a lot of cost model identification, but often can't get the desired effect, so people often uses the digital PID regulator, and according to the experience of online setting. The courses are designed to be integrated with the digital signal processing DSP as well as the automatic control the knowledge of the respect, use CCS integrated development environment for the compilation of the code, simulation, to complete the design.
相关文档
最新文档