下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 STM32应()经典控制算法PID(单级和串级)原理与代码实现章录P(例): 简单来说,P就是凉了加热,热了加凉。标值,我就增加点,标值,我就减点。(现在)P可能出现的问题: 1.P太,达到标值需要花费很长的时间,且会有稳态误差。2.P太,达到标值时可能会直震荡。I(微分): 将段时间内的误差累积起来加到输出上,可以消除历史误差对当前实际曲线的影响,提系统的稳定性。 (过去)I可能出现的问题: 1.I太,可以消除稳态误差,但太慢了,对于某些需要很快响应的系统,显然不能满要求。2.I太,累计误差占过,就会出现抖动现象,难以收敛。后调D,将最超调量降到最低。PI:响应速度要求不那么的系统。PD:
2、惯性系统。超调量太。PID:都可以。上将PID原理太多太多了,我的理解也都是参见上的内容。认真看肯定有收获。这个理解就是,单机PID就是稳定速度。需要带位置和度的就要串级PID了。常于平衡车,板球系统等。转速闭环称为串级PID的内环,位置 (度) 闭环称为串级PID的外环。其实也很好理解,位移是速度的积分,只有速度慢慢稳定,位置才能确定。 typedef struct _PIDfloat kp,ki,kd;float error,lastError;/误差、上次误差float integral,maxIntegral;/积分、积分限幅float output,maxOutput;/输出、输出限
3、幅PID;3.1.2 单级PID计算#define LIMIT(x,min,max) (x)=(x)=(max)?(max):(x)/单级pid计算void PID_SingleCalc(PID *pid,float reference,float feedback)/更新数据pid-lastError=pid-error;pid-error=reference-feedback;/计算微分pid-output=(pid-error-pid-lastError)*pid-kd;/计算例pid-output+=pid-error*pid-kp;/计算积分pid-integral+=pid-err
4、or*pid-ki;LIMIT(pid-integral,-pid-maxIntegral,pid-maxIntegral);/积分限幅pid-output+=pid-integral;/输出限幅LIMIT(pid-output,-pid-maxOutput,pid-maxOutput);3.1.3PID初始化void PID_Init(PID *pid,float p,float i,float d,float maxI,float maxOut)pid-kp=p;pid-ki=i;pid-kd=d;pid-maxIntegral=maxI;pid-maxOutput=maxOut;3.1.
5、4 清空PID/清空个pid的历史数据void PID_Clear(PID *pid)pid-error=0;pid-lastError=0;pid-integral=0;pid-output=0;3.2 串级PID3.2.1 初始化串级PID结构体typedef struct _CascadePIDPID inner;/内环PID outer;/外环float output;/串级输出,等于inner.outputCascadePID;3.2.2 串级PID计算 /串级pid计算void PID_CascadeCalc(CascadePID *pid,float angleRef,float
6、 angleFdb,float speedFdb)PID_SingleCalc(&pid-outer,angleRef,angleFdb);/计算外环(度环)PID_SingleCalc(&pid-inner,pid-outer.output,speedFdb);/计算内环(速度环)pid-output=pid-inner.output;4.PID的使在这篇博客的配置下,只需要修改部分代码。以单级PID为例。4.1 定义PID结构体并初始化PID pid;void Motor_Init(void)PID_Init(&pid,10,0,0,1000,1000);HAL_TIM_Encoder_S
7、tart (&htim1, TIM_CHANNEL_ALL);_HAL_TIM_ENABLE_IT(&htim1,TIM_IT_UPDATE);/开启编码器定时器/开启编码器定时器更新中断,防溢出处理HAL_TIM_Base_Start_IT (&htim6);/开启10ms定时器中断HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);_HAL_TIM_SET_COUNTER(&htim1, 10000);/开 启PWM/编码器定时器初始值设定为10000motor.loopNum = 0;/防溢出4.2 定义电机速度函数void Motor_Send()floa
8、t output = 0;PID_SingleCalc(&pid, motor.targetSpeed, motor.speed);output = pid.output;if(output 0) /正转_HAL_TIM_SetCompare (&htim2, TIM_CHANNEL_1, (uint32_t)output);IN1(1);IN2(0);else/反转_HAL_TIM_SetCompare (&htim2, TIM_CHANNEL_1, (uint32_t)(-output);IN1(0);IN2(1);4.3 在检测霍尔码盘时发送速度给电机if(htim-Instance=htim6.Instance)/10ms中断int16_t pluse = COUNTERNUM - RELOADVALUE/2;motor.totalAngle = pluse + motor.loopNum * RELOADVALUE/2;motor.speed = (float)(motor.totalAngle - motor.lastAngle
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度出差期间员工福利保障合同4篇
- 个人股份出售合同:2024年定制版股权转让书版B版
- 2025年度木材行业人才培养与引进合同-@-1
- 二零二五年度医疗废物处理与处置合同3篇
- 二零二五年度个人信用保证承诺书:信用卡透支还款承诺3篇
- 2025年度智能交通管理系统研发合同样书4篇
- 2024美发店员工宿舍租赁劳务合同3篇
- 二零二五年度企业内部培训项目劳动合同附属协议书2篇
- 2025年度土地整治项目个人土地承包合同范本4篇
- 二零二五年度智能工厂员工劳动合同模板3篇
- 河南省濮阳市2024-2025学年高一上学期1月期末考试语文试题(含答案)
- 割接方案的要点、难点及采取的相应措施
- 2025年副护士长竞聘演讲稿(3篇)
- 2024年08月北京中信银行北京分行社会招考(826)笔试历年参考题库附带答案详解
- 原发性肾病综合征护理
- (一模)株洲市2025届高三教学质量统一检测 英语试卷
- 基础护理学导尿操作
- DB11∕T 1028-2021 民用建筑节能门窗工程技术标准
- (初级)航空油料计量统计员技能鉴定理论考试题库(含答案)
- 中国古代文学史 马工程课件(中)24第六编 辽西夏金元文学 绪论
- 最新交管12123学法减分题库含答案(通用版)
评论
0/150
提交评论