Appe
dix1r
通用PID控制算法UpdatedDec212009bycodemastorr
介绍r
PID算法是自动控制领域最常用的误差消除算法,可以用其将一个动态数据输入序列进行处理达到自稳定的特性。在这里实现的是PID算法的核心(比例、积分、微分)的数值计算部分,采用模块化数据结构使得该代码能够在一个项目中完成多个PID控制任务的实现。r
r
代码r
r
通用PID算法r
r
本代码基于GPL协议发布r
r
i
cludestdiohr
i
cludemathhr
r
defi
ePID_TYPEfloatr
r
PID控制模块(每个控制单元需要一个此结构)r
structpid_u
itr
PID_TYPEpid_se
s2保存连续最新3个输入数据序列r
PID_TYPEpid_cpid3比例、积分、微分系数r
PID_TYPEpid_dpid3PID变量r
r
r
初始化PID模块的代码r
voidpid_i
itstructpid_u
itu
itPID控制模块指针r
PID_TYPEp比例系数r
PID_TYPEi积分系数r
PID_TYPEd微分系数r
r
u
itpid_cpid0pr
u
itpid_cpid1ir
u
itpid_cpid2dr
r
u
itpid_dpid00r
u
itpid_dpid10r
u
itpid_dpid20r
r
u
itpid_se
s00r
u
itpid_se
s10r
r
r
PID算法控制函数,通过此函数实现对输入数据序列的PID处理r
返回值:PID计算所得值r
PID_TYPEpid_co
trolstructpid_u
itu
itPID控制模块r
PID_TYPEi
put当前输入数据r
PID_TYPEtime距离上个数据的时间间隔r
r
adjusttheFIFOpreservi
gthese
sordatar
u
itpid_se
s1u
itpid_se
s0r
u
itpid_se
s0i
putr
r
calculateeachpidvariabler
u
itpid_dpid0u
itpid_se
s0u
itpid_cpid0r
u
itpid_dpid1u
itpid_se
s0u
itpid_cpid1timer
u
itpid_dpid2u
itpid_se
s0u
itpid_se
s1timer
u
itpid_cpid2r
r
retur
u
itpid_dpid0r
u
itpid_dpid1r
u
itpid_dpid2r
r
r
使用演示r
i
tmai
r
r
structpid_u
itu
it生成一个PID控制模块r
pid_i
itu
it001对该模块进行初始化r
r
i
tir
PID_TYPEi
put1000r
PID_TYPEoutput1000r
r
输入数据序列为一幅值为10的正弦波,输出是经过PID系数进行处理后的求和r
fori0i1000ir
i
putiPID_TYPE10si
floati100r
outputipid_co
trolu
iti
putifloat1100r
r
r
r