51单片机单片机PID的算法实现程序的算法实现程序
用整型变量来实现PID算法,由于是用整型数来做的,所以也不是很精确,但是对于很多的使用场合,这个精度也够
了,关于系数和采样电压全部是放大10倍处理的.所以精度不是很高. 但是也不是那么低,大部分的场合都够了. 实
在觉得精度不够, 可以再放大10倍或者100倍处理,但是要注意不超出整个数据类型的范围就可以了
用整型变量来实现PID算法,由于是用整型数来做的,所以也不是很精确,但是对于很多的使用场合,这个精度也够了,关于系数
和采样电压全部是放大10倍处理的.所以精度不是很高.但是也不是那么低,大部分的场合都够了.实在觉得精度不够,可以再放大
10倍或者100倍处理,但是要注意不超出整个数据类型的范围就可以了.本程序包括PID计算和输出两部分.当偏差>10度全速加
热,偏差在10度以内为PID计算输出.具体的参考代码参见下面:*/
//================================================================
//pid.H
//OperationaboutPIDalgorithmprocedure
//C51编译器Keil7.08
//================================================================
//作者:zhoufeng
//Date:2007-08-06
//Allrightsreserved.
//================================================================
#include<reg52.h>
#include<intrins.h>
typedefunsignedcharuint8;
typedefunsignedintuint16;
typedefunsignedlongintuint32;
/**********函数声明************/
voidPIDOutput();
voidPIDOperation();
/*****************************/
typedefstructPIDValue
{
uint32Ek_Uint32[3];//差值保存,给定和反馈的差值
uint8EkFlag_Uint8[3];//符号,1则对应的为负数,0为对应的为正数
uint8KP_Uint8;
uint8KI_Uint8;
uint8KD_Uint8;
uint16Uk_Uint16;//上一时刻的控制电压
uint16RK_Uint16;//设定值
uint16CK_Uint16;//实际值
}PIDValueStr;
PIDValueStrPID;
uint8out;//加热输出
评论0