1、 PID 调节控制做电机速度控制调节控制做电机速度控制 V1.1 Jan 23,2006 中文版中文版 19,Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C.Tel:886-3-578-6005 Fax:886-3-578-4418 E-mail: http:/ http:/ PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 1 V1.1 Jan 23,2006 版权声明版权声明 凌阳科技股份有限公司保留对此文件修改之权利且不另行通知。凌阳科技股份有限公
2、司所提供之信息相信为正确且可靠之信息,但并不保证本文件中绝无错误。请于向凌阳科技股份有限公司提出订单前,自行确定所使用之相关技术文件及规格为最新之版本。若因贵公司使用本公司之文件或产品,而涉及第三人之专利或著作权等智能财产权之应用及配合时,则应由贵公司负责取得同意及授权,本公司仅单纯贩售产品,上述关于同意及授权,非属本公司应为保证之责任。又未经凌阳科技股份有限公司之正式书面许可,本公司之所有产品不得使用于医疗器材,维持生命系统及飞航等相关设备。PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 2 V1.1 Jan 23,200
3、6 目录目录 页页 1 模拟模拟PID控制控制.1 1.1 模拟PID控制原理.1 2 数字数字PID控制控制.3 2.1 位置式PID算法.3 2.2 增量式PID算法.4 2.3 控制器参数整定.4 2.3.1 凑试法.5 2.3.2 临界比例法.5 2.3.3 经验法.5 2.3.4 采样周期的选择.6 2.4 参数调整规则的探索.6 2.5 自校正PID控制器.7 3 软件说明软件说明.8 3.1 软件说明.8 3.2 档案构成.8 3.3 DMC界面.8 3.4 子程序说明.9 4 程序范例程序范例.16 4.1 DEMO程序.16 4.2 程序流程与说明.19 4.3 中断子流程与
4、说明.20 5 MCU使用资源使用资源.21 5.1 MCU硬件使用资源说明.21 6 实验测试实验测试.22 6.1 响应曲线.22 7 参考文献参考文献.26 PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 3 V1.1 Jan 23,2006 修订记录修订记录 日期日期 版本版本 编写及修订者编写及修订者编写及修订说明编写及修订说明 2004/11/26 1.0 初版 2006/1/23 1.1 错误校正 PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAG
5、E 1 V1.1 Jan 23,20061 模拟模拟 PID 控制控制 将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称 PID 控制器。1.1 模拟模拟 PID 控制原理控制原理 在模拟控制系统中,控制器最常用的控制规律是 PID 控制。为了说明控制器的工作原理,先看一个例子。如图 11 所示是一个小功率直流电机的调速原理图。给定速度与实际转速进行比较,其差值,经过 PID 控制器调整后输出电压控制信号,经过功率放大后,驱动直流电动机改变其转速。)(0tn)(tn)()()(
6、0tntnte=)(tu)(tuPID控制器直流电机)(0tn)(te)(tu)(tn 图 11 小功率直流电机调速系统 常规的模拟 PID 控制系统原理框图如图 12 所示。该系统由模拟 PID 控制器和被控对象组成。图中,是给定值,是系统的实际输出值,给定值与实际输出值构成控制偏差)(r t)(y t)(te)(y)(r)(ttte=(式 11))(te作为 PID 控制的输入,作为 PID 控制器的输出和被控对象的输入。所以模拟 PID 控制器的控制规律为)(tu)()(1)()(u0dttdeTddtteTiteKptt+=(式 12)其中:控制器的比例系数 Kp 控制器的积分时间,也
7、称积分系数 Ti 控制器的微分时间,也称微分系数 Td比例积分微分被控对象)(r t)(tu)(y t)(te 图 12 模拟 PID 控制系统原理图 1、比例部分 PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 2 V1.1 Jan 23,2006比例部分的数学式表示是:)(*teKp在模拟 PID 控制器中,比例环节的作用是对偏差瞬间作出反应。偏差一旦产生控制器立即产生控制作用,使控制量向减少偏差的方向变化。控制作用的强弱取决于比例系数,比例系数越大,控制作用越强,则过渡过程越快,控制过程的静态偏差也就越小;但是越大,也
8、越容易产生振荡,破坏系统的稳定性。故而,比例系数选择必须恰当,才能过渡时间少,静差小而又稳定的效果。KpKpKpKp2、积分部分 积分部分的数学式表示是:tdtteTiKp0)(从积分部分的数学表达式可以知道,只要存在偏差,则它的控制作用就不断的增加;只有在偏差时,它的积分才能是一个常数,控制作用才是一个不会增加的常数。可见,积分部分可以消除系统的偏差。0)(te积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。积分常数越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡;但是增大积分常数会减慢静态误差的消除过程,消除偏差所需的时间也较长,但可以减少超调量,提
9、高系统的稳定性。当Ti较小时,则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定Ti。TiTi3、微分部分 微分部分的数学式表示是:dttdeTdKp)(*实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏差变化的瞬间,不但要对偏差量做出立即响应(比例环节的作用),而且要根据偏差的变化趋势预先给出适当的纠正。为了实现这一作用,可在 PI 控制器的基础上加入微分环节,形成 PID 控制器。微分环节的作用使阻止偏差的变化。它是根据偏差的变化趋势(变化速度)进行控制。偏差变化的越快,微分控制器的输出就越
10、大,并能在偏差值变大之前进行修正。微分作用的引入,将有助于减小超调量,克服振荡,使系统趋于稳定,特别对髙阶系统非常有利,它加快了系统的跟踪速度。但微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分,或在微分起作用之前先对输入信号进行滤波。微分部分的作用由微分时间常数Td决定。Td越大时,则它抑制偏差变化的作用越强;Td越小时,则它反抗偏差变化的作用越弱。微分部分显然对系统稳定有很大的作用。)(te)(te适当地选择微分常数Td,可以使微分作用达到最优。由于计算机的出现,计算机进入了控制领域。人们将模拟 PID 控制规律引入到计算机中来。对(式 12)的 PID 控制规律进行适当
11、的变换,就可以用软件实现 PID 控制,即数字 PID 控制。本页已使用福昕阅读器进行编辑。福昕软件(C)2 0 0 5-2 0 0 9,版权所有,仅供试用。PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 3 V1.1 Jan 23,20062 数字数字 PID 控制控制 数字式 PID 控制算法可以分为位置式 PID 和增量式 PID 控制算法。2.1 位置式位置式PID算法算法 由于计算机控制是一种采样控制,它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量,进行连续控制。由于这一特点(式 12)中
12、的积分项和微分项不能直接使用,必须进行离散化处理。离散化处理的方法为:以T作为采样周期,作为采样序号,则离散采样时间对应着连续时间,用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,可作如下近似变换:kkTt (式 21)上式中,为了表示的方便,将类似于简化成等。)(kTeke将(式 21)代入(式 12),就可以得到离散的 PID 表达式为 10TeeTdeTiTeKpukkkjjkk=+=(式 22)或)(10*=+=kkkjjkkeeKdeKieKpu (式 23)其中 k 采样序号,k0,1,2,;第kuk次采样时刻的计算机输出值;第kek次采样时刻输入的偏差值;第1kek1
13、次采样时刻输入的偏差值;积分系数,KiTiTKpKi*;微分系数,KdTTdKpKd*;如果采样周期足够小,则(式 22)或(式 23)的近似计算可以获得足够精确的结果,离散控制过程与连续过程十分接近。(式 22)或(式 23)表示的控制算法式直接按(式 12)所给出的 PID 控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称为全量式或位置式 PID 控制算法。这种算法的缺点是:由于全量输出,所以每次输出均与过去状态有关,计算时要对进行累加,ke本页已使用福昕阅读器进行编辑。福昕软件(C)2 0 0 5-2 0 0 9,版权所有,仅供试用。PID 调节控制做电机速度控制调节控制做
14、电机速度控制 Sunplus Technology Co.,Ltd.PAGE 4 V1.1 Jan 23,2006工作量大;并且,因为计算机输出的对应的是执行机构的实际位置,如果计算机出现故障,输出的将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产际中是不允许的。kuku 增量式 PID 控制算法可以避免着重现象发生。2.2 增量式增量式PID算法算法 所谓增量式 PID 是指数字控制器的输出只是控制量的增量ku。当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式 PID 控制算法进行控制。增量式 PID 控制算法可以通过(式 22)推导出
15、由(式 22)可以得到控制器的第 k1个采样时刻的输出值为:211011TeeTdeTiTeKpukkkjjkk=+=(式 24)将(式 22)与(式 24)相减并整理,就可以得到增量式 PID 控制算法公式为:21212111)21()1()2(+=+=+=kkkkkkkkkkkkkkkCeBeAeeTTdKpeTTdKpeTTdTiTKpTeeeTdeTiTeeKpuuu (式 25)其中 A )1(TTdTiTKp+;B )21(TTdKp+;C TTdKp。由(式 25)可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定 A、B、C,只要使用前后三次测量的偏差值,就可以由(式
16、 25)求出控制量。增量式 PID 控制算法与位置式 PID 算法(式 22)相比,计算量小的多,因此在实际中得到广泛的应用。而位置式 PID 控制算法也可以通过增量式控制算法推出递推计算公式:kkkuuu1 (式 26)(式 26)就是目前在计算机控制中广泛应用的数字递推 PID 控制算法。2.3 控制器参数整定控制器参数整定 控制器参数整定:指决定调节器的比例系数、积分时间Ti、微分时间Td和采样周期Ts的Kp PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 5 V1.1 Jan 23,2006具体数值。整定的实质是通过
17、改变调节器的参数,使其特性和过程特性相匹配,以改善系统的动态和静态指标,取得最佳的控制效果。整定调节器参数的方法很多,归纳起来可分为两大类,即理论计算整定法和工程整定法。理论计算整定法有对数频率特性法和根轨迹法等;工程整定法有凑试法、临界比例法、经验法、衰减曲线法和响应曲线法等。工程整定法特点不需要事先知道过程的数学模型,直接在过程控制系统中进行现场整定方法简单、计算简便、易于掌握。2.3.1 凑试法凑试法 按照先比例(P)、再积分(I)、最后微分(D)的顺序。置调节器积分时间Ti=,微分时间Td=0,在比例系数按经验设置的初值条件下,将系统投入运行,由小到大整定比例系数。求得满意的 1/4
18、衰减度过渡过程曲线。KpKp 引入积分作用(此时应将上述比例系数设置为 5/6)。将Ti由大到小进行整定。KpKp 若需引入微分作用时,则将Td按经验值或按Td=(1/31/4)设置,并由小到大加入。Ti2.3.2 临界比例法临界比例法 在闭环控制系统里,将调节器置于纯比例作用下,从小到大逐渐改变调节器的比例系数,得到等幅振荡的过渡过程。此时的比例系数称为临界比例系数,相邻两个波峰间的时间间隔,称为临界振荡周期Tu。Ku 临界比例度法步骤:1、将调节器的积分时间置于最大(Ti=),微分时间置零(Td=0),比例系数适当,平衡操作一段时间,把系统投入自动运行。TiKp 2、将比例系数逐渐增大,得
19、到等幅振荡过程,记下临界比例系数和临界振荡周期Tu值。KpKu 3、根据和值,采用经验公式,计算出调节器各个参数,即、和Td的值。KuTuKpTi 按“先 P 再 I 最后 D”的操作程序将调节器整定参数调到计算值上。若还不够满意,可再作进一步调整。临界比例度法整定注意事项:有的过程控制系统,临界比例系数很大,使系统接近两式控制,调节阀不是全关就是全开,对工业生产不利。有的过程控制系统,当调节器比例系数调到最大刻度值时,系统仍不产生等幅振荡,对此,就把最大刻度的比例度作为临界比例度进行调节器参数整定。KpKu2.3.3 经验法经验法 用凑试法确定 PID 参数需要经过多次反复的实验,为了减少凑
20、试次数,提高工作效率,可以借鉴他人的经验,并根据一定的要求,事先作少量的实验,以得到若干基准参数,然后按照经验公式,用这些基准参数导出 PID 控制参数,这就是经验法。临界比例法就是一种经验法。这种方法首先将控制器选为纯比例控制器,并形成闭环,改变比例系数,使系统对阶跃输入的响应达到临界状态,这时记下比例系数、临界振荡周期为Tu,根Ku PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 6 V1.1 Jan 23,2006据 ZN 提供的经验公式,就可以由这两个基准参数得到不同类型控制器的参数,如表 21 所示。表 21 临界
21、比例法确定的模拟控制器参数 控制器类型 Kp Ti Td P 0.5 Ku PI 0.45 Ku0.85Tu PID 0.6 Ku0.5Tu 0.12Tu 这种临界比例法使针对模拟 PID 控制器,对于数字 PID 控制器,只要采样周期取的较小,原则上也同样使用。在电动机的控制中,可以先采用临界比例法,然后在采用临界比例法求得结果的基础上,用凑试法进一步完善。表 21 的控制参数,实际上是按衰减度为 1/4 时得到的。通常认为 1/4 的衰减度能兼顾到稳定性和快速性。如果要求更大的衰减,则必须用凑试法对参数作进一步的调整。2.3.4 采样周期的选择采样周期的选择 香农(Shannon)采样定律
22、为不失真地复现信号的变化,采样频率至少应大于或等于连续信号最高频率分量的二倍。根据采样定律可以确定采样周期的上限值。实际采样周期的选择还要受到多方面因素的影响,不同的系统采样周期应根据具体情况来选择。采样周期的选择,通常按照过程特性与干扰大小适当来选取采样周期:即对于响应快、(如流量、压力)波动大、易受干扰的过程,应选取较短的采样周期;反之,当过程响应慢(如温度、成份)、滞后大时,可选取较长的采样周期。采样周期的选取应与PID参数的整定进行综合考虑,采样周期应远小于过程的扰动信号的周期,在执行器的响应速度比较慢时,过小的采样周期将失去意义,因此可适当选大一点;在计算机运算速度允许的条件下,采
23、样周期短,则控制品质好;当过程的纯滞后时间较长时,一般选取采样周期为纯滞后时间的 1/41/8。2.4 参数调整规则的探索参数调整规则的探索 人们通过对 PID 控制理论的认识和长期人工操作经验的总结,可知 PID 参数应依据以下几点来适应系统的动态过程。1、在偏差比较大时,为使尽快消除偏差,提高响应速度,同时为了避免系统响应出现超调,Kp取大值,取零;在偏差比较小时,为继续减小偏差,并防止超调过大、产生振荡、稳定性变坏,值要减小,取小值;在偏差很小时,为消除静差,克服超调,使系统尽快稳定,值继续减小,值不变或稍取大。KiKpKiKpKi 2、当偏差与偏差变化率同号时,被控量是朝偏离既定值方向
24、变化。因此,当被控量接近定值时,反号的比列作用阻碍积分作用,避免积分超调及随之而来的振荡,有利于控制;而当被控量远未接近各定值并向定值变化时,则由于这两项反向,将会减慢控制过程。在偏差比较大时,偏差变化率与偏差异号时,值取零或负值,以加快控制的动态过程。Kp 3、偏差变化率的大小表明偏差变化的速率,越大,取值越小,取值越大,反之亦然。同时,要结合偏差大小来考虑。1kkeeKpKi PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 7 V1.1 Jan 23,2006 4、微分作用可改善系统的动态特性,阻止偏差的变化,有助于减小
25、超调量,消除振荡,缩短调节时间,允许加大,使系统稳态误差减小,提高控制精度,达到满意的控制效果。所以,在比较大时,取零,实际为 PI 控制;在比较小时,取一正值,实行 PID 控制。stKpkeKdkeKd2.5 自校正自校正PID控制器控制器 对于一个特定的被控对象,在纯比例控制的作用下改变比例系数可以求出产生临界振荡的振荡周期和临界比例系数。TuKu 根据 ZN 条件,有 TuT1.0=TuTi5.0=TuTd125.0=代入(式 25)则有:)25.15.345.2(21+kkkkeeeKpu (式 27)很显然,采用上式可以十分容易的实现常数的校正。Kp PID 调节控制做电机速度控制
26、调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 8 V1.1 Jan 23,2006 3 软件说明软件说明 3.1 软件说明软件说明 AN_SPMC75_0012 在微处理器 SPMC75F2413A 上实现数字 PID 对 BLDC 速度的调节,重点将是对 PID 参数的整定,使系统的动静态性能达到“满意”的效果。3.2 档案构成档案构成 文件名称 功能 类型Main BLDC 驱动相关参数初始化,DMC 服务 C Chap2 BLDC 驱动相关函数 C Initial 系统所有相关初始化程序 C ISR 驱动中相应的中断服务 C DigitalPID
27、V100.lib PID 设置,初始化和 PID 计算函数库函数 lib Spmc75_dmc_lib_V100.lib DMC 通信程序 lib 3.3 DMC界面界面 Speed1_Cmd:设置电机运转的速度 Speed1_Now:电机当前反馈速度 Speed1_Kp:2.5 节 自校正 PID 控制器中提到的 Kp 值 User_R0:当前 P_TMR3_TGRA 寄存器的值 User_R1:设置速度与电机实际转速的差值 Motor 1 Start 和 Motor 1 Stop 控制启停 PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.
28、Ltd.PAGE 9 V1.1 Jan 23,20063.4 子程序说明子程序说明 PIDInit()原原 形形 void PIDInit(void)描描 述述 PID 所用到的 RAM 清零 输入参数输入参数 无 输出参数输出参数 无 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项 请在设置参数前使用。例例 子子 PIDInit();PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 10 V1.1 Jan 23,2006 PIDSetPoint()原原 形形
29、void PIDSetPoint(int)描描 述述 设置 PID 调节的目标值 输入参数输入参数 期望值 输出参数输出参数 无 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项 例例 子子 PIDSetPoint(2000);/期望电动机的转速为 2000rpm PIDGetSetpoint()原原 形形 int PIDGetSetpoint(void)描描 述述 读取 PID 调节设置的目标值 输入参数输入参数 无 输出参数输出参数 所设置的期望值 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPI
30、D_V100 注意事项注意事项 得到的期望值将和数值的是同一个数值 例例 子子 uiSpeed PIDSetPoint();/读取所设置的期望电动机转速 PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 11 V1.1 Jan 23,2006 PIDSetKp()原原 形形 void PIDSetKp(double)描描 述述 设置 PID 的 Kp 值 输入参数输入参数 Kp 数值 输出参数输出参数 无 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项 这个参数在
31、增量 PID 和位置 PID 的计算中代表着不同的意思。(式 24)所示位置式 PID 中 Kp 就是比例系数(式 25)所示增量式 PID 中 Kp 相当于的系数ke)1(TTdTiTKp+例例 子子 PIDSetKp(0.257);/设置 Kp0.257 PIDGetKp()原原 形形 double PIDGetKp(void)描描 述述 读取 PID 中所设置的 Kp 值 输入参数输入参数 无 输出参数输出参数 Kp 数值 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项 这个参数在增量 PID 和位置 PID 的计算中代表着
32、不同的意思。(式 24)所示位置式 PID 中 Kp 就是比例系数(式 25)所示增量式 PID 中 Kp 相当于的系数ke)1(TTdTiTKp+例例 子子 dKp PIDSetKp();PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 12 V1.1 Jan 23,2006 PIDSetKi()原原 形形 void PIDSetKi(double dKii)描描 述述 设置 PID 的 Ki 值 输入参数输入参数 Ki 数值 输出参数输出参数 无 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 Digital
33、PID_V100 注意事项注意事项 这个参数在增量 PID 和位置 PID 的计算中代表着不同的意思。(式 24)所示位置式 PID 中 Ki 是积分系数TiTKp(式 25)所示增量式 PID 中 Ki 是的系数1ke)21(TTdKp+例例 子子 PIDSetKi(0.367);/设置 Ki0.367 PIDGetKi()原原 形形 double PIDGetKi(void)描描 述述 读取 PID 中所设置的 Ki 值 输入参数输入参数 无 输出参数输出参数 Ki 数值 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项 这个参
34、数在增量 PID 和位置 PID 的计算中代表着不同的意思。(式 24)所示位置式 PID 中 Ki 是积分系数TiTKp(式 25)所示增量式 PID 中 Ki 是的系数1ke)21(TTdKp+例例 子子 dKi PIDSetKi();PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 13 V1.1 Jan 23,2006 PIDSetKd()原原 形形 void PIDSetKd(double dKdd)描描 述述 设置 PID 的 Kd 值 输入参数输入参数 Kd 数值 输出参数输出参数 无 头头 文文 件件 Spmc
35、75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项 这个参数在增量 PID 和位置 PID 的计算中代表着不同的意思。(式 24)所示位置式 PID 中 Kd 是积分系数TTdKp(式 25)所示增量式 PID 中 Kd 是的系数2keTTdKp 例例 子子 PIDSetKd(0.157);/设置 Kd0.157 PIDGetKd()原原 形形 void PIDGetKd(double dKdd)描描 述述 读取 PID 中所设置的 Kd 值 输入参数输入参数 无 输出参数输出参数 Kd 数值 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 Di
36、gitalPID_V100 注意事项注意事项 这个参数在增量 PID 和位置 PID 的计算中代表着不同的意思。(式 24)所示位置式 PID 中 Kd 是积分系数TTdKp(式 25)所示增量式 PID 中 Kd 是的系数2keTTdKp 例例 子子 dKd PIDSetKd();PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 14 V1.1 Jan 23,2006 IncPIDCalc()原原 形形 int IncPIDCalc(int)描描 述述 增量式 PID 计算 输入参数输入参数 PID 调节当前采样值 输出参数
37、输出参数 计算增量 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项(式 25)增量式 PID 算法的实现。例例 子子 uiGoalvalue IncPIDCalc(1998);/位置式 PID 控制算法通过增量式控制算法递推实现,当前采样得到转速 1998rpm。PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 15 V1.1 Jan 23,2006 LocPIDCalc()原原 形形 unsigned int LocPIDCalc(int)描描 述述 位置式 P
38、ID 计算 输入参数输入参数 PID 调节当前采样值 输出参数输出参数 位置式 PID 计算出的绝对位置值 头头 文文 件件 Spmc75_PID.h 库库 文文 件件 DigitalPID_V100 注意事项注意事项(式 24)位置式式 PID 算法的实现。例例 子子 uiGoalvalue LocPIDCalc(1998);/位置式 PID 控制算法,当前采样得到转速 1998rpm。其它应用函数式对 BLDC 驱动的实现,不再一一赘述,可以参考【AN_SPMC75_0003】应用例的介绍。PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,
39、Ltd.PAGE 16 V1.1 Jan 23,20064 程序范例程序范例 4.1 DEMO程序程序 /*=*/应用范例/*=*/#include Spmc75_regs.h#include Spmc_typedef.h#include unspmacro.h#include Spmc75_BLDC.h main()P_IOA_SPE-W=0 x0000;P_IOB_SPE-W=0 x0000;P_IOC_SPE-W=0 x0000;Spmc75_System_Init();/Spmc75 系统初始化 while(1)BLDC_Run_Service();/启停监控 NOP();/=/Des
40、cription:IRQ0 interrupt source is XXX,used to XXX/Notes:错误保护/=void IRQ0(void)_attribute_(ISR);void IRQ0(void)IPM_Fault_Protect();/=/Description:IRQ1 interrupt source is XXX,used to XXX/Notes:BLDC 启动及正常运行服务/=void IRQ1(void)_attribute_(ISR);PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 17
41、 V1.1 Jan 23,2006 void IRQ1(void)/*=*/*Position detection change interrupt /*=*/if(P_TMR0_Status-B.PDCIF&P_TMR0_INT-B.PDCIE)BLDC_Motor_Normalrun();/*=*/*Timer Counter Overflow /*=*/if(P_TMR0_Status-B.TCVIF&P_TMR0_INT-B.TCVIE)BLDC_Motor_Startup();P_TMR0_Status-W=P_TMR0_Status-W;/=/Description:IRQ6 in
42、terrupt source is XXX,used to XXX/Notes:DMC 接收中断服务函数/=void IRQ6(void)_attribute_(ISR);void IRQ6(void)if(P_INT_Status-B.UARTIF)if(P_UART_Status-B.RXIF)MC75_DMC_RcvStream();if(P_UART_Status-B.TXIF&P_UART_Ctrl-B.TXIE);/=/Description:IRQ7 interrupt source is XXX,used to XXX/Notes:512Hz 定时中断完成 PID 调节速度/=
43、void IRQ7(void)_attribute_(ISR);void IRQ7(void)if(P_INT_Status-B.CMTIF)if(P CMT Ctrl-B.CM0IF&P CMT Ctrl-B.CM0IE)PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 18 V1.1 Jan 23,2006 BLDC_Motor_Actiyator();P_CMT_Ctrl-W=P_CMT_Ctrl-W;PID 计算子函数:/数据结构 typedef struct PID int SetPoint;/设定目标 Desire
44、d Value long SumError;/误差累计 double Proportion;/比例常数 Proportional Const double Integral;/积分常数 Integral Const double Derivative;/微分常数 Derivative Const int LastError;/Error-1 int PrevError;/Error-2 PID;static PID sPID;static PID *sptr=&sPID;/PID 参数初始化 void IncPIDInit(void)sptr-SumError =0;sptr-LastErro
45、r=0;/Error-1 sptr-PrevError=0;/Error-2 sptr-Proportion=0;/比例常数 Proportional Const sptr-Integral =0;/积分常数 Integral Const sptr-Derivative=0;/微分常数 Derivative Const sptr-SetPoint =0;PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 19 V1.1 Jan 23,2006/增量式 PID 控制设计 int IncPIDCalc(int NextPoint)r
46、egister int iError,iIncpid;/当前误差 iError=sptr-SetPoint-NextPoint;/增量计算 iIncpid=sptr-Proportion*iError /Ek项 -sptr-Integral *sptr-LastError /Ek1项 +sptr-Derivative*sptr-PrevError;/Ek2项 /存储误差,用于下次计算 sptr-PrevError=sptr-LastError;sptr-LastError=iError;/返回增量值 return(iIncpid);/位置式 PID 控制设计 unsigned int LocP
47、IDCalc(int NextPoint)register int iError,dError;iError=sptr-SetPoint-NextPoint;/偏差 sptr-SumError+=iError;/积分 dError=iError-sptr-LastError;/微分 sptr-LastError=iError;return(sptr-Proportion*iError /比例项 +sptr-Integral*sptr-SumError /积分项 +sptr-Derivative*dError);/微分项 4.2 程序流程与说明程序流程与说明 主程序主要完成系统必要的初始化,而对
48、电动机的实时处理基本上是在中断中完成的,其中涉及到的中断主要有:IRQ0 的错误输入和输出中断、IRQ1 的 PDC 和 TCV 中断、IRQ6 的 UART RXD中断及 CMT0 的定时中断。如图 51 所示主程序设计流程图。PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus Technology Co.,Ltd.PAGE 20 V1.1 Jan 23,2006系统初始化【API:Spmc75_System_Init()】开始启停命令监控【API:BLDC_Run_Service()】图 5-1 BLDC 主程序操作流程 4.3 中断子流程与说明中断子流程与说明 故障输入
49、输出短路、PDC、TCV、RXD 和 CMT0 等中断协助完成了对 BLDC 的启动、运行、速度调节和错误保护的控制。其中如果使用默认各个中断源的使用都按照初始化设置已经相应的固定下来。这里只对 PDC、TCV 中断流程示出,以便使用者参考。如图 5-2 PDC、TCV 中断操作流程 中断入口启动、低速控制服务函数【API:BLDC_Motor_Startup()】维持BLDC正常运行中断服务【API:BLDC_Motor_Normalrun()】PDC中断?TCV中断?中断出口 图 5-2 PDC、TCV 中断操作流程 PID 调节控制做电机速度控制调节控制做电机速度控制 Sunplus
50、Technology Co.,Ltd.PAGE 21 V1.1 Jan 23,20065 MCU 使用资源使用资源 5.1 MCU硬件使用资源说明硬件使用资源说明 CPU 型号 SPMC75F2413A 封装 QFP80-0.8 crystal 频率 6MHz 振荡器 外部 输入频率 WATCHDOG 有 无 启用 未启用 IO 口使用情况 使用 IOB0.6:电机驱动接口 IOB8.10:位置侦测接口 IOB14:电机驱动使能 IOC0.1:UART PDC0 位置侦测和速度测量 MCP3 电机驱动信号发生 Timer 使用情况 CMT0 PID 调整服务定时器 中断使用情况 PDC0(IR






