PID调节控制做电机速度控制
V1.1–Jan23,2006
中文版
19,InnovationFirstRoad?SciencePark?Hsin-Chu?Taiwan300?R.O.C.
Tel:886-3-578-6005Fax:886-3-578-4418E-mail:mcu@sunplus.com.cn
http://www.sunplusmcu.comhttp://mcu.sunplus.com
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE1V1.1–Jan23,2006
版权声明
凌阳科技股份有限公司保留对此文件修改之权利且不另行通知。凌阳科技股份有限公司所提供之信息相信为正确且
可靠之信息,但并不保证本文件中绝无错误。请于向凌阳科技股份有限公司提出订单前,自行确定所使用之相关技
术文件及规格为最新之版本。若因贵公司使用本公司之文件或产品,而涉及第三人之专利或著作权等智能财产权之
应用及配合时,则应由贵公司负责取得同意及授权,本公司仅单纯贩售产品,上述关于同意及授权,非属本公司应
为保证之责任。又未经凌阳科技股份有限公司之正式书面许可,本公司之所有产品不得使用于医疗器材,维持生命
系统及飞航等相关设备。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE2V1.1–Jan23,2006
目录
页
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.3DMC界面....................................................................................................................................8
3.4子程序说明.................................................................................................................................9
4程序范例...........................................................................................................................................16
4.1DEMO程序...............................................................................................................................16
4.2程序流程与说明.......................................................................................................................19
4.3中断子流程与说明...................................................................................................................20
5MCU使用资源.................................................................................................................................21
5.1MCU硬件使用资源说明..........................................................................................................21
6实验测试...........................................................................................................................................22
6.1响应曲线...................................................................................................................................22
7参考文献...........................................................................................................................................26
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE3V1.1–Jan23,2006
修订记录
日期版本编写及修订者编写及修订说明
2004/11/261.0
初版
2006/1/231.1
错误校正
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE1V1.1–Jan23,2006
1模拟PID控制
将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,
用这一控制量对被控对象进行控制,这样的控制器称PID控制器。
1.1模拟PID控制原理
在模拟控制系统中,控制器最常用的控制规律是PID控制。为了说明控制器的工作原理,先看
一个例子。如图1-1所示是一个小功率直流电机的调速原理图。给定速度与实际转速进行比
较,其差值,经过PID控制器调整后输出电压控制信号,经过功
率放大后,驱动直流电动机改变其转速。
)(
0
tn
)(tn)()()(
0
tntnte?=)(tu)(tu
PID控制器直流电机
)(
0
tn)(te)(tu
)(tn
-
+
图1-1小功率直流电机调速系统
常规的模拟PID控制系统原理框图如图1-2所示。该系统由模拟PID控制器和被控对象组成。
图中,是给定值,是系统的实际输出值,给定值与实际输出值构成控制偏差)(rt)(yt)(te
)(y)(r)(ttte?=(式1-1)
)(te作为PID控制的输入,作为PID控制器的输出和被控对象的输入。所以模拟PID控制器的
控制规律为
)(tu
]
)(
)(
1
)([)(u
0
dt
tde
Tddtte
Ti
teKpt
t
++=
∫
(式1-2)
其中:――控制器的比例系数Kp
--控制器的积分时间,也称积分系数Ti
――控制器的微分时间,也称微分系数Td
比例
积分
微分
被控对象
)(rt
+
-
+
+
+
)(tu)(yt)(te
图1-2模拟PID控制系统原理图
1、比例部分
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE2V1.1–Jan23,2006
比例部分的数学式表示是:)(teKp
在模拟PID控制器中,比例环节的作用是对偏差瞬间作出反应。偏差一旦产生控制器立即产生
控制作用,使控制量向减少偏差的方向变化。控制作用的强弱取决于比例系数,比例系数越
大,控制作用越强,则过渡过程越快,控制过程的静态偏差也就越小;但是越大,也越容易产生
振荡,破坏系统的稳定性。故而,比例系数选择必须恰当,才能过渡时间少,静差小而又稳定的
效果。
KpKp
Kp
Kp
2、积分部分
积分部分的数学式表示是:
∫
t
dtte
Ti
Kp
0
)(
从积分部分的数学表达式可以知道,只要存在偏差,则它的控制作用就不断的增加;只有在偏
差时,它的积分才能是一个常数,控制作用才是一个不会增加的常数。可见,积分部分可以
消除系统的偏差。
0)(=te
积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。
积分常数越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡;但是增大积分常数会
减慢静态误差的消除过程,消除偏差所需的时间也较长,但可以减少超调量,提高系统的稳定性。
当Ti较小时,则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间
较短。所以必须根据实际控制的具体要求来确定Ti。
TiTi
3、微分部分
微分部分的数学式表示是:
dt
tde
TdKp
)(
实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏
差变化的瞬间,不但要对偏差量做出立即响应(比例环节的作用),而且要根据偏差的变化趋势预先
给出适当的纠正。为了实现这一作用,可在PI控制器的基础上加入微分环节,形成PID控制器。
微分环节的作用使阻止偏差的变化。它是根据偏差的变化趋势(变化速度)进行控制。偏差变
化的越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。微分作用的引入,将有助
于减小超调量,克服振荡,使系统趋于稳定,特别对髙阶系统非常有利,它加快了系统的跟踪速度。
但微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分,或在微分起作用之
前先对输入信号进行滤波。
微分部分的作用由微分时间常数Td决定。Td越大时,则它抑制偏差变化的作用越强;Td
越小时,则它反抗偏差变化的作用越弱。微分部分显然对系统稳定有很大的作用。
)(te
)(te
适当地选择微分常数Td,可以使微分作用达到最优。
由于计算机的出现,计算机进入了控制领域。人们将模拟PID控制规律引入到计算机中来。对
(式1-2)的PID控制规律进行适当的变换,就可以用软件实现PID控制,即数字PID控制。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE3V1.1–Jan23,2006
2数字PID控制
数字式PID控制算法可以分为位置式PID和增量式PID控制算法。
2.1位置式PID算法
由于计算机控制是一种采样控制,它只能根据采样时刻的偏差计算控制量,而不能像模拟控制
那样连续输出控制量量,进行连续控制。由于这一特点(式1-2)中的积分项和微分项不能直接使
用,必须进行离散化处理。离散化处理的方法为:以T作为采样周期,作为采样序号,则离散采
样时间对应着连续时间,用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,可
作如下近似变换:
k
kTt
(式2-1)
上式中,为了表示的方便,将类似于简化成等。)(kTe
k
e
将(式2-1)代入(式1-2),就可以得到离散的PID表达式为
][
1
0
T
ee
Tde
Ti
T
eKpu
kk
k
j
jkk
?
=
?
++=
∑(式2-2)
或
)(
1
0
?
=
?++=
∑kk
k
j
jkk
eeKdeKieKpu
(式2-3)
其中k――采样序号,k=0,1,2,……;
――第
k
uk次采样时刻的计算机输出值;
――第
k
ek次采样时刻输入的偏差值;
――第
1k
e
-
k-1次采样时刻输入的偏差值;
――积分系数,KiTiTKpKi=;
――微分系数,KdTTdKpKd=;
如果采样周期足够小,则(式2-2)或(式2-3)的近似计算可以获得足够精确的结果,离
散控制过程与连续过程十分接近。
(式2-2)或(式2-3)表示的控制算法式直接按(式1-2)所给出的PID控制规律定义进
行计算的,所以它给出了全部控制量的大小,因此被称为全量式或位置式PID控制算法。
这种算法的缺点是:由于全量输出,所以每次输出均与过去状态有关,计算时要对进行累加,
k
e
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE4V1.1–Jan23,2006
工作量大;并且,因为计算机输出的对应的是执行机构的实际位置,如果计算机出现故障,输出
的将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实生产
际中是不允许的。
k
u
k
u
增量式PID控制算法可以避免着重现象发生。
2.2增量式PID算法
所谓增量式PID是指数字控制器的输出只是控制量的增量
k
u?。当执行机构需要的控制量是增
量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制。
增量式PID控制算法可以通过(式2-2)推导出。由(式2-2)可以得到控制器的第k-1
个采样时刻的输出值为:
][
21
1
0
11
T
ee
Tde
Ti
T
eKpu
kk
k
j
jkk
?
=
?
++=
∑
-
-
--(式2-4)
将(式2-2)与(式2-4)相减并整理,就可以得到增量式PID控制算法公式为:
21
21
21
11
))
2
1()1(
)
2
(
?
?
?
++=
++++=
+?
++=?
kkk
kkk
kkk
kkkkkk
CeBeAe
e
T
Td
Kpe
T
Td
Kpe
T
Td
Ti
T
Kp
T
eee
Tde
Ti
T
eeKpuuu
-
-
-
--
-
--=
(式2-5)
其中A=)1(
T
Td
Ti
T
Kp++;
B=)
2
1(
T
Td
Kp+;
C=
T
Td
Kp。
由(式2-5)可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C,
只要使用前后三次测量的偏差值,就可以由(式2-5)求出控制量。
增量式PID控制算法与位置式PID算法(式2-2)相比,计算量小的多,因此在实际中得到
广泛的应用。
而位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:
kkk
uuu?+=
-1
(式2-6)
(式2-6)就是目前在计算机控制中广泛应用的数字递推PID控制算法。
2.3控制器参数整定
控制器参数整定:指决定调节器的比例系数、积分时间Ti、微分时间Td和采样周期Ts的Kp
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE5V1.1–Jan23,2006
具体数值。整定的实质是通过改变调节器的参数,使其特性和过程特性相匹配,以改善系统的动态
和静态指标,取得最佳的控制效果。
整定调节器参数的方法很多,归纳起来可分为两大类,即理论计算整定法和工程整定法。理论
计算整定法有对数频率特性法和根轨迹法等;工程整定法有凑试法、临界比例法、经验法、衰减曲
线法和响应曲线法等。工程整定法特点不需要事先知道过程的数学模型,直接在过程控制系统中进
行现场整定方法简单、计算简便、易于掌握。
2.3.1凑试法
按照先比例(P)、再积分(I)、最后微分(D)的顺序。
置调节器积分时间Ti=∞,微分时间Td=0,在比例系数按经验设置的初值条件下,将系统
投入运行,由小到大整定比例系数。求得满意的1/4衰减度过渡过程曲线。
Kp
Kp
引入积分作用(此时应将上述比例系数设置为5/6)。将Ti由大到小进行整定。KpKp
若需引入微分作用时,则将Td按经验值或按Td=(1/3~1/4)设置,并由小到大加入。Ti
2.3.2临界比例法
在闭环控制系统里,将调节器置于纯比例作用下,从小到大逐渐改变调节器的比例系数,得到
等幅振荡的过渡过程。此时的比例系数称为临界比例系数,相邻两个波峰间的时间间隔,称为临
界振荡周期Tu。
Ku
临界比例度法步骤:
1、将调节器的积分时间置于最大(Ti=∞),微分时间置零(Td=0),比例系数适当,
平衡操作一段时间,把系统投入自动运行。
TiKp
2、将比例系数逐渐增大,得到等幅振荡过程,记下临界比例系数和临界振荡周期Tu值。KpKu
3、根据和值,采用经验公式,计算出调节器各个参数,即、和Td的值。KuTuKpTi
按“先P再I最后D”的操作程序将调节器整定参数调到计算值上。若还不够满意,可再作进一
步调整。
临界比例度法整定注意事项:
有的过程控制系统,临界比例系数很大,使系统接近两式控制,调节阀不是全关就是全开,对
工业生产不利。
有的过程控制系统,当调节器比例系数调到最大刻度值时,系统仍不产生等幅振荡,对此,
就把最大刻度的比例度作为临界比例度进行调节器参数整定。
Kp
Ku
2.3.3经验法
用凑试法确定PID参数需要经过多次反复的实验,为了减少凑试次数,提高工作效率,可以借
鉴他人的经验,并根据一定的要求,事先作少量的实验,以得到若干基准参数,然后按照经验公式,
用这些基准参数导出PID控制参数,这就是经验法。
临界比例法就是一种经验法。这种方法首先将控制器选为纯比例控制器,并形成闭环,改变比
例系数,使系统对阶跃输入的响应达到临界状态,这时记下比例系数、临界振荡周期为Tu,根Ku
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE6V1.1–Jan23,2006
据Z-N提供的经验公式,就可以由这两个基准参数得到不同类型控制器的参数,如表2-1所示。
表2-1临界比例法确定的模拟控制器参数
控制器类型
Kp
TiTd
P0.5Ku
PI0.45Ku0.85Tu
PID0.6Ku0.5Tu0.12Tu
这种临界比例法使针对模拟PID控制器,对于数字PID控制器,只要采样周期取的较小,原则
上也同样使用。在电动机的控制中,可以先采用临界比例法,然后在采用临界比例法求得结果的基
础上,用凑试法进一步完善。
表2-1的控制参数,实际上是按衰减度为1/4时得到的。通常认为1/4的衰减度能兼顾到稳定
性和快速性。如果要求更大的衰减,则必须用凑试法对参数作进一步的调整。
2.3.4采样周期的选择
香农(Shannon)采样定律:为不失真地复现信号的变化,采样频率至少应大于或等于连续
信号最高频率分量的二倍。根据采样定律可以确定采样周期的上限值。实际采样周期的选择还要受
到多方面因素的影响,不同的系统采样周期应根据具体情况来选择。
采样周期的选择,通常按照过程特性与干扰大小适当来选取采样周期:即对于响应快、(如流
量、压力)波动大、易受干扰的过程,应选取较短的采样周期;反之,当过程响应慢(如温度、成
份)、滞后大时,可选取较长的采样周期。
采样周期的选取应与PID参数的整定进行综合考虑,采样周期应远小于过程的扰动信号的周期,
在执行器的响应速度比较慢时,过小的采样周期将失去意义,因此可适当选大一点;在计算机运算
速度允许的条件下,采样周期短,则控制品质好;当过程的纯滞后时间较长时,一般选取采样周期
为纯滞后时间的1/4~1/8。
2.4参数调整规则的探索
人们通过对PID控制理论的认识和长期人工操作经验的总结,可知PID参数应依据以下几点来
适应系统的动态过程。
1、在偏差比较大时,为使尽快消除偏差,提高响应速度,同时为了避免系统响应出现超调,Kp
取大值,取零;在偏差比较小时,为继续减小偏差,并防止超调过大、产生振荡、稳定性变坏,
值要减小,取小值;在偏差很小时,为消除静差,克服超调,使系统尽快稳定,值继续
减小,值不变或稍取大。
Ki
KpKiKp
Ki
2、当偏差与偏差变化率同号时,被控量是朝偏离既定值方向变化。因此,当被控量接近定值
时,反号的比列作用阻碍积分作用,避免积分超调及随之而来的振荡,有利于控制;而当被控量远
未接近各定值并向定值变化时,则由于这两项反向,将会减慢控制过程。在偏差比较大时,偏差变
化率与偏差异号时,值取零或负值,以加快控制的动态过程。Kp
3、偏差变化率的大小表明偏差变化的速率,越大,取值越小,取值越大,反
之亦然。同时,要结合偏差大小来考虑。
1?kk
ee-KpKi
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE7V1.1–Jan23,2006
4、微分作用可改善系统的动态特性,阻止偏差的变化,有助于减小超调量,消除振荡,缩短
调节时间,允许加大,使系统稳态误差减小,提高控制精度,达到满意的控制效果。所以,
在比较大时,取零,实际为PI控制;在比较小时,取一正值,实行PID控制。
s
tKp
k
eKd
k
eKd
2.5自校正PID控制器
对于一个特定的被控对象,在纯比例控制的作用下改变比例系数可以求出产生临界振荡的振荡
周期和临界比例系数。TuKu
根据Z-N条件,有
TuT1.0=
TuTi5.0=
TuTd125.0=
代入(式2-5)则有:
)25.15.345.2(
21??
+??
kkkk
eeeKpu=
(式2-7)
很显然,采用上式可以十分容易的实现常数的校正。Kp
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE8V1.1–Jan23,2006
3软件说明
3.1软件说明
AN_SPMC75_0012在微处理器SPMC75F2413A上实现数字PID对BLDC速度的调节,重点
将是对PID参数的整定,使系统的动静态性能达到“满意”的效果。
3.2档案构成
文件名称功能类型
MainBLDC驱动相关参数初始化,DMC服务C
Chap2BLDC驱动相关函数C
Initial系统所有相关初始化程序C
ISR驱动中相应的中断服务C
DigitalPID_V100.libPID设置,初始化和PID计算函数库函数lib
Spmc75_dmc_lib_V100.libDMC通信程序lib
3.3DMC界面
Speed1_Cmd:设置电机运转的速度
Speed1_Now:电机当前反馈速度
Speed1_Kp:2.5节自校正PID控制器中提到的Kp值
User_R0:当前P_TMR3_TGRA寄存器的值
User_R1:设置速度与电机实际转速的差值
Motor1Start和Motor1Stop控制启停
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE9V1.1–Jan23,2006
3.4子程序说明
PIDInit()
原形voidPIDInit(void)
描述PID所用到的RAM清零
输入参数无
输出参数无
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项请在设置参数前使用。
例子PIDInit();
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE10V1.1–Jan23,2006
PIDSetPoint()
原形voidPIDSetPoint(int)
描述设置PID调节的目标值
输入参数期望值
输出参数无
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项
例子PIDSetPoint(2000);//期望电动机的转速为2000rpm
PIDGetSetpoint()
原形intPIDGetSetpoint(void)
描述读取PID调节设置的目标值
输入参数无
输出参数所设置的期望值
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项得到的期望值将和数值的是同一个数值
例子uiSpeed=PIDSetPoint();//读取所设置的期望电动机转速
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE11V1.1–Jan23,2006
PIDSetKp()
原形voidPIDSetKp(double)
描述设置PID的Kp值
输入参数Kp数值
输出参数无
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项这个参数在增量PID和位置PID的计算中代表着不同的意思。
(式2-4)所示位置式PID中Kp就是比例系数
(式2-5)所示增量式PID中Kp相当于的系数
k
e)1(
T
Td
Ti
T
Kp++
例子PIDSetKp(0.257);//设置Kp=0.257
PIDGetKp()
原形doublePIDGetKp(void)
描述读取PID中所设置的Kp值
输入参数无
输出参数Kp数值
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项这个参数在增量PID和位置PID的计算中代表着不同的意思。
(式2-4)所示位置式PID中Kp就是比例系数
(式2-5)所示增量式PID中Kp相当于的系数
k
e)1(
T
Td
Ti
T
Kp++
例子dKp=PIDSetKp();
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE12V1.1–Jan23,2006
PIDSetKi()
原形voidPIDSetKi(doubledKii)
描述设置PID的Ki值
输入参数Ki数值
输出参数
无
头文件
Spmc75_PID.h
库文件
DigitalPID_V100
注意事项
这个参数在增量PID和位置PID的计算中代表着不同的意思。
(式2-4)所示位置式PID中Ki是积分系数
Ti
T
Kp
(式2-5)所示增量式PID中Ki是的系数
1?k
e)
2
1(
T
Td
Kp+
例子
PIDSetKi(0.367);//设置Ki=0.367
PIDGetKi()
原形doublePIDGetKi(void)
描述读取PID中所设置的Ki值
输入参数无
输出参数
Ki数值
头文件
Spmc75_PID.h
库文件
DigitalPID_V100
注意事项
这个参数在增量PID和位置PID的计算中代表着不同的意思。
(式2-4)所示位置式PID中Ki是积分系数
Ti
T
Kp
(式2-5)所示增量式PID中Ki是的系数
1?k
e)
2
1(
T
Td
Kp+
例子
dKi=PIDSetKi();
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE13V1.1–Jan23,2006
PIDSetKd()
原形voidPIDSetKd(doubledKdd)
描述设置PID的Kd值
输入参数Kd数值
输出参数
无
头文件
Spmc75_PID.h
库文件
DigitalPID_V100
注意事项
这个参数在增量PID和位置PID的计算中代表着不同的意思。
(式2-4)所示位置式PID中Kd是积分系数
T
Td
Kp
(式2-5)所示增量式PID中Kd是的系数
2?k
e
T
Td
Kp
例子
PIDSetKd(0.157);//设置Kd=0.157
PIDGetKd()
原形voidPIDGetKd(doubledKdd)
描述读取PID中所设置的Kd值
输入参数无
输出参数
Kd数值
头文件
Spmc75_PID.h
库文件
DigitalPID_V100
注意事项
这个参数在增量PID和位置PID的计算中代表着不同的意思。
(式2-4)所示位置式PID中Kd是积分系数
T
Td
Kp
(式2-5)所示增量式PID中Kd是的系数
2?k
e
T
Td
Kp
例子
dKd=PIDSetKd();
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE14V1.1–Jan23,2006
IncPIDCalc()
原形intIncPIDCalc(int)
描述增量式PID计算
输入参数PID调节当前采样值
输出参数计算增量
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项(式2-5)增量式PID算法的实现。
例子uiGoalvalue+=IncPIDCalc(1998);//位置式PID控制算法通过增量式控
制算法递推实现,当前采样得到转速1998rpm。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE15V1.1–Jan23,2006
LocPIDCalc()
原形unsignedintLocPIDCalc(int)
描述位置式PID计算
输入参数PID调节当前采样值
输出参数位置式PID计算出的绝对位置值
头文件Spmc75_PID.h
库文件DigitalPID_V100
注意事项(式2-4)位置式式PID算法的实现。
例子uiGoalvalue=LocPIDCalc(1998);//位置式PID控制算法,当前采样得到
转速1998rpm。
其它应用函数式对BLDC驱动的实现,不再一一赘述,可以参考【AN_SPMC75_0003】应用例的
介绍。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE16V1.1–Jan23,2006
4程序范例
4.1DEMO程序
/=============================================/
//应用范例
/=============================================/
#include"Spmc75_regs.h"
#include"Spmc_typedef.h"
#include"unspmacro.h"
#include"Spmc75_BLDC.h"
main()
{
P_IOA_SPE->W=0x0000;
P_IOB_SPE->W=0x0000;
P_IOC_SPE->W=0x0000;
Spmc75_System_Init();//Spmc75系统初始化
while(1)
{
BLDC_Run_Service();//启停监控
NOP();
}
}
//=================================================================
//Description:IRQ0interruptsourceisXXX,usedtoXXX
//Notes:错误保护
//=================================================================
voidIRQ0(void)__attribute__((ISR));
voidIRQ0(void)
{
IPM_Fault_Protect();
}
//=================================================================
//Description:IRQ1interruptsourceisXXX,usedtoXXX
//Notes:BLDC启动及正常运行服务
//=================================================================
voidIRQ1(void)__attribute__((ISR));
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE17V1.1–Jan23,2006
voidIRQ1(void)
{
/=============================================================/
/Positiondetectionchangeinterrupt
/=============================================================/
if(P_TMR0_Status->B.PDCIF&&P_TMR0_INT->B.PDCIE)
{
BLDC_Motor_Normalrun();
}
/=============================================================/
/TimerCounterOverflow
/=============================================================/
if(P_TMR0_Status->B.TCVIF&&P_TMR0_INT->B.TCVIE)
{
BLDC_Motor_Startup();
}
P_TMR0_Status->W=P_TMR0_Status->W;
}
//=================================================================
//Description:IRQ6interruptsourceisXXX,usedtoXXX
//Notes:DMC接收中断服务函数
//=================================================================
voidIRQ6(void)__attribute__((ISR));
voidIRQ6(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:IRQ7interruptsourceisXXX,usedtoXXX
//Notes:512Hz定时中断完成PID调节速度
//=================================================================
voidIRQ7(void)__attribute__((ISR));
voidIRQ7(void)
{
if(P_INT_Status->B.CMTIF)
{
if(PCMTCtrl->B.CM0IF&&PCMTCtrl->B.CM0IE)
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE18V1.1–Jan23,2006
{
BLDC_Motor_Actiyator();
}
P_CMT_Ctrl->W=P_CMT_Ctrl->W;
}
}
PID计算子函数:
//数据结构
typedefstructPID
{
intSetPoint;//设定目标DesiredValue
longSumError;//误差累计
doubleProportion;//比例常数ProportionalConst
doubleIntegral;//积分常数IntegralConst
doubleDerivative;//微分常数DerivativeConst
intLastError;//Error[-1]
intPrevError;//Error[-2]
}PID;
staticPIDsPID;
staticPIDsptr=&sPID;
//PID参数初始化
voidIncPIDInit(void)
{
sptr->SumError=0;
sptr->LastError=0;//Error[-1]
sptr->PrevError=0;//Error[-2]
sptr->Proportion=0;//比例常数ProportionalConst
sptr->Integral=0;//积分常数IntegralConst
sptr->Derivative=0;//微分常数DerivativeConst
sptr->SetPoint=0;
}
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE19V1.1–Jan23,2006
//增量式PID控制设计
intIncPIDCalc(intNextPoint)
{
registerintiError,iIncpid;
//当前误差
iError=sptr->SetPoint-NextPoint;
//增量计算
iIncpid=sptr->ProportioniError//E[k]项
-sptr->Integralsptr->LastError//E[k-1]项
+sptr->Derivativesptr->PrevError;//E[k-2]项
//存储误差,用于下次计算
sptr->PrevError=sptr->LastError;
sptr->LastError=iError;
//返回增量值
return(iIncpid);
}
//位置式PID控制设计
unsignedintLocPIDCalc(intNextPoint)
{
registerintiError,dError;
iError=sptr->SetPoint-NextPoint;//偏差
sptr->SumError+=iError;//积分
dError=iError-sptr->LastError;//微分
sptr->LastError=iError;
return(sptr->ProportioniError//比例项
+sptr->Integralsptr->SumError//积分项
+sptr->DerivativedError);//微分项
}
4.2程序流程与说明
主程序主要完成系统必要的初始化,而对电动机的实时处理基本上是在中断中完成的,其中涉
及到的中断主要有:IRQ0的错误输入和输出中断、IRQ1的PDC和TCV中断、IRQ6的UARTRXD
中断及CMT0的定时中断。如图5-1所示主程序设计流程图。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE20V1.1–Jan23,2006
系统初始化
【API:Spmc75_System_Init()】
开始
启停命令监控
【API:BLDC_Run_Service()】
图5-1BLDC主程序操作流程
4.3中断子流程与说明
故障输入、输出短路、PDC、TCV、RXD和CMT0等中断协助完成了对BLDC的启动、运行、
速度调节和错误保护的控制。其中如果使用默认各个中断源的使用都按照初始化设置已经相应的固
定下来。这里只对PDC、TCV中断流程示出,以便使用者参考。如图5-2PDC、TCV中断操作
流程
中断入口
启动、低速控制服务函数
【API:BLDC_Motor_Startup()】
维持BLDC正常运行中断服务
【API:BLDC_Motor_Normalrun()】
PDC中断?
TCV中断?
中断出口
图5-2PDC、TCV中断操作流程
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE21V1.1–Jan23,2006
5MCU使用资源
5.1MCU硬件使用资源说明
CPU型号SPMC75F2413A封装QFP80-0.8
crystal频率6MHz
振荡器
外部输入频率
WATCHDOG有无启用未启用
IO口使用情况使用
IOB[0..6]:电机驱动接口
IOB[8..10]:位置侦测接口
IOB14:电机驱动使能
IOC[0..1]:UART
PDC0位置侦测和速度测量
MCP3电机驱动信号发生
Timer使用情况
CMT0PID调整服务定时器
中断使用情况
PDC0(IRQ1):速度测量和定时发生
MCP3(IRQ3):电机驱动信号发生
UART(IRQ6):主机通信服务
CMT0(IRQ7):PID调整服务定时器
ROM使用情况6.34KWords
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE22V1.1–Jan23,2006
6实验测试
测试主要是针对120度上相PWM方波驱动带霍尔位置传感的直流无刷电动机并应用PID控制
来进行对电动机的速度调节。硬件原理图及关于BLDC驱动请参照【AN_SPMC75_0003】。Kp参
数的调整,在源程序中是可以用预编译定义的。如果定义的话就可以在DMC下对Kp参数调整,但
请注意,DMC下的参数需要是扩大一千倍的。例如:Kp=0.105,DMC参数就应该是105。这样
Kp的范围就可以在(400,10),对于这个范围的参数只能说是能正常的工作。如果说最适合,那么
还请您根据系统的需要,按照各种整定方法对其进行全面的评估。
【注意】1、在这里PID参数的选择和PWM的载波频率也有一定的关系,载波频率越高则
【P_TMRx_TGRA】所设置的范围就越小,调节就比较的快。这种种因数希望到能考虑在内,得到
最适合的PID参数。
【注意】2、如果选择使用DMC来调整PID的Kp参数,请先设置转速(Speed1_Cmd)和Kp
(Speed1_Kp)的数值再启动Motor1;若是使用固定的PID的Kp参数(在程序中固定),请先设
置转速(Speed1_Cmd)再启动Motor1。
【注意】3、在DMC下PID参数的时候Speed1_Kp与Kp的关系是Speed1_Kp=1000Kp,就是
说如果要设置Kp为0.125,DMC的Speed1_Kp应该给出125。
6.1响应曲线
所有测试都是在空载,PWM载波为6KHz的情况下进行:
1、Speed1_Kp=10,即Kp=0.01。在转速从0rpm升至2000rpm的响应曲线,如图6.1。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE23V1.1–Jan23,2006
图6.1Kp=0.01响应曲线
2、Speed1_Kp=105,即Kp=0.105。在转速从0rpm升至2000rpm的响应曲线,如图6.2。
图6.2Kp=0.105响应曲线
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE24V1.1–Jan23,2006
3、Speed1_Kp=180,即Kp=0.180。在转速从0rpm升至2000rpm的响应曲线,如图6.3。
图6.3Kp=0.180响应曲线
4、Speed1_Kp=250,即Kp=0.250。在转速从0rpm升至2000rpm的响应曲线,如图6.4。
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE25V1.1–Jan23,2006
图6.4Kp=0.250响应曲线
PID调节控制做电机速度控制
?SunplusTechnologyCo.,Ltd.PAGE26V1.1–Jan23,2006
7参考文献
【1】SUNPLUSSPMC75F2413A编程指南V1.0Oct122004
【2】机械工业出版直流无刷电动机原理及应用(第二版)张琛编着
【3】北京航空航天大学出版社电动机的单片机控制王晓明编着
【3】北京航空航天大学出版社单片机模糊逻辑控制余永权、曾碧着
|
|