当前位置: 首页 > news >正文

河北固安县网站建设百度一下就知道官方

河北固安县网站建设,百度一下就知道官方,建设网站的理由,不适合做设计的人STM32_PID通用算法增量式和位置式 前言: 此算法为入门级PID算法,调试好参数后可应用于温度控制、舵机控制、直流电机的转速控制和直流电机的角度控制等等,下面就以温度控制举例 pid.c #include "pid.h" #include "sensor.h&q…

STM32_PID通用算法增量式和位置式

前言:
此算法为入门级PID算法,调试好参数后可应用于温度控制、舵机控制、直流电机的转速控制和直流电机的角度控制等等,下面就以温度控制举例

pid.c

#include "pid.h"
#include "sensor.h"
#include "dev_control.h"
#include "usbd_cdc_if.h"pidTypeDef_t  heatTemp_pid = {0};
pidPID_t tempPID = {0};void pidInit(void)
{tempPID.KP = 15;						//比例常数tempPID.KI = 0;							//积分常数tempPID.KD = 0.1;						//微分常数heatTemp_pid.PidMode = 0;				//使用增量式PIDheatTemp_pid.SetPoint = 0;       		//设定目标值heatTemp_pid.ActualValue = 0.0;  		//期望值输出heatTemp_pid.SumError = 0.0;     		//积分值heatTemp_pid.Error = 0.0;        		//当前偏差值heatTemp_pid.LastError = 0.0;    		//上次偏差值heatTemp_pid.PrevError = 0.0;    		//上上次偏差值heatTemp_pid.Proportion = tempPID.KP;  	//比例常数heatTemp_pid.Integral = tempPID.KI;    	//积分常数heatTemp_pid.Derivative = tempPID.KD;  	//微分常数
}void pidTask(void)//根据系统来计算调用该函数的周期
{if(devTypedef.devHeatAir.devHeatAirEnable == STATE_ENABLE){heatTemp_pid.SetPoint = (float)sensorData.ptcSensorData.ptcSensorData_target;heatTemp_pid.ActualValue = pidComputeCtrl(&heatTemp_pid, (float)sensorData.ptcSensorData.ptcSensorData_float);//¼ÆËã³öPIDÊä³öÖµif(heatTemp_pid.ActualValue < 0) heatTemp_pid.ActualValue = 0;if(heatTemp_pid.ActualValue > 100) heatTemp_pid.ActualValue = 100;devTypedef.devHeatAir.devHeatAirDuty = heatTemp_pid.ActualValue;//作用到控制设备上//调试信息usb_printf("%0.2f,%0.2f,%0.2f\r\n",heatTemp_pid.SetPoint,(float)sensorData.ptcSensorData.ptcSensorData_float,heatTemp_pid.ActualValue);}
}float pidComputeCtrl(pidTypeDef_t *PID, float feedbackValue)
{PID->Error = (float)(PID->SetPoint - feedbackValue);               												//计算偏差if(PID->PidMode == 1)                                            												//增量式PID{PID->ActualValue += (PID->Proportion * (PID->Error - PID->LastError))                      					//比例环节+ (PID->Integral * PID->Error)                                             //积分环节+ (PID->Derivative * (PID->Error - 2 * PID->LastError + PID->PrevError)); 	//微分环节PID->PrevError = PID->LastError;                                   											//更新历史偏差PID->LastError = PID->Error;}else                                                               												//位置式PID{PID->SumError += PID->Error;float pid_integral = 0;pid_integral = PID->Integral * PID->SumError;																//限积分算法if(pid_integral > 5) pid_integral = 5;PID->ActualValue = (PID->Proportion * PID->Error)                   										//比例环节+ pid_integral                    												//积分环节+ (PID->Derivative * (PID->Error - PID->LastError));							//微分环节PID->LastError = PID->Error;}return (PID->ActualValue);                               														//返回计算后的结果
}

pid.h

#ifndef __PID_H
#define __PID_H
#include "main.h"
#include "log.h"#define PID_TASK_PERIOD 1 //#define PID_LOG_EN 1
#if PID_LOG_EN#define PID_printf(format, ...) 		printf(RTT_CTRL_TEXT_WHITE format , ##__VA_ARGS__)//"\r\n"#define PID_info(format, ...)   		printf(RTT_CTRL_TEXT_GREEN"[pid]info:" format , ##__VA_ARGS__)#define PID_debug(format, ...)  		printf(RTT_CTRL_TEXT_WHITE"[pid]debug:" format , ##__VA_ARGS__)#define PID_warning(format, ...)  	printf(RTT_CTRL_TEXT_YELLOW"[pid]warning:" format , ##__VA_ARGS__)#define PID_error(format, ...)  		printf(RTT_CTRL_TEXT_RED"[pid]error:" format ,##__VA_ARGS__)
#else#define PID_printf(format, ...)#define PID_info(format, ...)#define PID_debug(format, ...)#define PID_warning(format, ...)#define PID_error(format, ...)
#endiftypedef struct
{float KP;float KI;float KD;
}	pidPID_t;extern pidPID_t pressurePID;
extern pidPID_t tempPID;//PID参数结构体
typedef struct
{float  SetPoint;            //设定目标值float  ActualValue;         //期望值输出float  SumError;            //积分值float  Proportion;          //比例常数float  Integral;            //积分常数float  Derivative;          //微分常数float  Error;               //当前偏差值float  LastError;           //上次偏差值float  PrevError;           //上上次偏差值unsigned int PidMode;		//使用PID模式
} pidTypeDef_t;extern pidTypeDef_t  heatTemp_pid;     				//加热系统PID参数结构体extern unsigned char pid_flag;void pidInit(void);
void pidTask(void);	
float pidComputeCtrl(pidTypeDef_t *PID, float feedbackValue);#endif
http://www.ds6.com.cn/news/98964.html

相关文章:

  • 小说网站seo排名怎么做网站seo入门基础教程
  • 深圳建设工程交易网站宝安网页友情链接
  • 男女做那个的网站南京网站seo
  • 怎么做织梦网站免费个人网站申请
  • 日本 男女做受视频网站超级外链发布工具
  • 吉林科技网站建设推广普通话的宣传标语
  • 专门做淘宝主图的网站商旅平台app下载
  • 平台网站怎么优化站长工具seo综合查询是什么
  • 自助创建网站seo技术外包公司
  • 河南网站制作app优化方案
  • 做商城网站需要多大的服务器谷歌手机网页版入口
  • 公司网站开发费用兴田德润官方网站站长统计app网站
  • 该网站受海外服务器保护简述如何对网站进行推广
  • 大岭山做网站优化关键词排名提升
  • 2021能看的网站免费的知乎武汉百度关键词推广
  • 购物商城网站的制作免费外链平台
  • 单页网站在线生成外贸网站建站平台
  • 网站icp备案是什么海外推广代理公司
  • 动漫网站做毕业设计简单吗知乎seo排名帝搜软件
  • java网站开发视频转码小程序开发平台有哪些
  • 通过wordpress建站长沙百度关键词推广
  • 哈尔滨网站建设有限公司seo长沙
  • 平面设计师简历范文360优化大师安卓版下载
  • 网站建设和网页设计新网站排名优化怎么做
  • 怎么查询自己的商标自己怎么做关键词优化
  • 网站建设需要哪些工作室新闻摘抄2022最新20篇
  • 衡水网站建设公司站长工具网站查询
  • 网站12栅格系统怎么做友链交换
  • seodao cn百度快速排名优化服务
  • 那个网站专门做婚纱相册网络营销就业方向和前景