登录 |  注册

当前位置: 主页 >> 毕设技巧 >> 专业知识 >>

单片机如何使用PID的算法进行控制

时间:2017-04-01 来源: 作者:5UBS-3 点击:
        本单片机程序PID的算法简介:本程序使用的是STC89C52单片机,主要包括PID计算和输出两部分,当偏差>10度全速加热,偏差在10度以内为PID计算输出。
 
单片机的PID算法

        程序使用整型变量来实现PID算法,采用整型数进行设计,系数和采样电压全部是放大10倍处理的,缺点就是没有那么精确。不过对于多数的使用场合,这个精度也是足够了。 觉得精度不够,可以再放大10倍或者100倍处理,但是要注意不超出整个数据类型的范围就可以了。
 
具体的参考代码参见下面:
 
#include <reg52.h>
#include <intrins.h>
typedef   unsigned   char        uint8;       
typedef   unsigned   int         uint16;  
typedef   unsigned   long int    uint32; 
/**********函数声明************/
void     PIDOutput ();
void     PIDOperation (); 
/*****************************/
typedef struct PIDValue
{
uint32      Ek_Uint32[3];                  //差值保存,给定和反馈的差值
uint8       EkFlag_Uint8[3];              //符号,1则对应的为负数,0为对应的为正数     
uint8       KP_Uint8;
uint8       KI_Uint8;
uint8       KD_Uint8;
uint16      Uk_Uint16;                 //上一时刻的控制电压
uint16      RK_Uint16;                //设定值
uint16      CK_Uint16;               //实际值 
}PIDValueStr;
PIDValueStr  PID;
uint8        out ;                 // 加热输出
uint8        count;               // 输出时间单位计数器
/*********************************
PID = Uk + KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式)
函数入口: RK(设定值),CK(实际值),KP,KI,KD
函数出口: U(K)
//PID运算函数
********************************/
void     PIDOperation (void)  
uint32       Temp[3];                                        //中间临时变量
uint32       PostSum;                                       //正数和
uint32       NegSum;                                       //负数和
Temp[0] = 0;
Temp[1] = 0;
Temp[2] = 0;
PostSum = 0;
NegSum  = 0;【转载请注明出处:https://www.5ubs.com/skill/zhuanyezhishi/450.html
顶一下
(5)
71.4%
踩一下
(2)
28.6%
------分隔线----------------------------
评论内容 查看评论>>
发表评论
遵守互联网法律法规,严禁发布违法的言论。
评价:
用户名: 验证码: 点击我更换图片
栏目列表
毕设方法