IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 单片机PID算法 -> 正文阅读

[嵌入式]单片机PID算法

该代码是基于msp430f149的pid算法

PID.h

#include "PID.h"

PID pid;//存放PID算法所需要的数据,即结构体
//**********************************************************************************
//                      PID算法
//    PID公式out=(Kp*Ek)+(Kp*(T/Ti)∑(0--n)Ek)+(Kp*(Td/T)(Ek-Ek_1))+out0
//**********************************************************************************
void PID_Calc(void)//PID的计算
{
  float DelEk;//相邻两次偏差值
  float TI,KI;//(T/Ti),(Kp*(T/Ti))
  float Iout;
  float Pout;
  float Dout;
  float TD;   //(Td/T)
  float KD;   //(Kp*(Td/T))
  float out;  //用来暂时存储pid的脉宽
  if(pid.C10ms<pid.T/10)  //计算周期未到
  {
    return ;
  }
  
  pid.Ek = pid.Sv - pid.Pv;//当前的偏差值=设定值-实际值
  
  pid.SEk += pid.Ek;      //历史偏差总和 ,偏差值有正负不会无穷大
  
  DelEk = pid.Ek - pid.Ek_1;//最近两次的偏差
  
  TI = pid.T/pid.Ti;
  KI = TI*pid.Kp;     //即是(Kp*(T/Ti))
  
  TD = pid.Td/pid.T;
  KD = TD * pid.Kp;    //即是(Kp*(Td/T))
  
  Pout = pid.Kp * pid.Ek;  //比例输出
  Iout = pid.SEk * KI;     //积分输出
  Dout = KD * DelEk;       //微分输出
  
  out = Pout + Iout + Dout + pid.OUT0;//本次输出的脉宽
  //pid.out有可能是正值也有可能是负值
  //pid.out的占空比不会超过100也不会小于0
  //用TACCR0设置周期,即PID的周期
  if(out>TACCR0)//如果out的值比周期还大
  {
    pid.out = TACCR0;//就让输出的pwm等于周期
  }
  if(out<0)//如果输出值为负数
  {
    pid.out = 0;//就让输出的pwm等于最小值0
  }
  pid.out = out;//否则直接输出
  
  pid.Ek_1 = pid.Ek;//更新偏差
  
  pid.C10ms = 0;//每执行一次中断后就++
}

PID.c

#ifndef __pid__
#define __pid__
#include "msp430x14x.h"
//**********************************************************************************
//                      用结构体对pid进行保存
//PID公式out=(Kp*Ek)+(Kp*(T/Ti)∑(0--n)Ek)+(Kp*(Td/T)(Ek-Ek_1))+out0
//**********************************************************************************
typedef struct //创建一个结构体
{
  float Sv;    //用户设定值
  float Pv;    //当前传感器反馈值,把传感器所得的值给他
  
  float Kp;    //比例系数
  float T;     //PID的计算周期->采样周期,即多长时间执行一次pid算法
  float Ti;    //积分时间常数
  float Td;    //微分时间常数
  
  float Ek;    //本次偏差
  float Ek_1;  //上次偏差
  float SEk;   //前n项和,即历史偏差之和
  
  float OUT0;  //常数,防止输出为零,给出的稳定输出
  
  float out;   //本次应该输出的pwm
  
  int  C10ms;  //计算的10ms值让他加
 
 
}PID;

extern PID pid;//外部声明,防止报错
void PID_Calc();//PID的计算
#endif

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:48:39  更:2021-07-31 16:49:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:28:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码