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

PID程序实现

文章目录

  • 调控周期
  • 位置式PID程序实现
  • 增量式PID程序实现

调控周期

  • 一般取决于被控对象变化的快慢,倒立摆,平衡车,飞行器变化得很快,一般50ms,20ms,10ms,1ms就要进行一次调控,
  • 姿态传感器,每隔5ms才能更新一下,太快也没用,
  • 电机控速20~100ms都可以
  • 一般就在定时器中断中实现定时调控,注意中断中不能和主循环调用同一个硬件资源,因为中断和主循环相当于多线程,等同于访问临界资源(或者可以在定时器中断中置标志位,在主循环中不断检查标志位可以避免同时访问临界资源)

位置式PID程序实现

	// 获取实际值Actual = 读取传感器();// 获取本次误差和上次误差Error1 = Error0;Error0 = Target - Actual;// 误差积分(累加)ErrorInt += Error0;// PID计算Out = Kp * Error0 + Ki * ErrorInt + Kd * (Error0 - Error1);// 输出限幅if (Out > 上限) {Out = 上限;}if (Out < 下限) {Out = 下限;}

增量式PID程序实现

  • 输出全量式(与上面的位置式PID实现功能一样)
	// 获取实际值Actual = 读取传感器();// 获取本次误差和上次误差、上上次误差Error2 = Error1;Error1 = Error0;Error0 = Target - Actual;// PID计算Out += Kp * (Error0 - Error1) + Ki * Error0 + Kd * (Error0 - 2 * Error1 + Error2);// 输出限幅if (Out > 上限) {Out = 上限;}if (Out < 下限) {Out = 下限;}
  • 输出增量式
	// 获取实际值Actual = 读取传感器();// 获取本次误差和上次误差、上上次误差Error2 = Error1;Error1 = Error0;Error0 = Target - Actual;// PID计算DeltaOut = Kp * (Error0 - Error1) + Ki * Error0 + Kd * (Error0 - 2 * Error1 + Error2);// 输出限幅if (Out > 上限) {Out = 上限;}if (Out < 下限) {Out = 下限;}

相关文章:

  • php一些命名规范 和 css命名规范
  • AIGC在自动化测试领域的创新应用:智能生成测试用例与缺陷预测
  • SpringCloud原理和机制
  • 产销协同的作用是什么?又如何对各部门发挥作用?
  • A. Ideal Generator
  • 【数据融合】基于拓展卡尔曼滤波实现雷达与红外的异步融合附matlab代码
  • 部署大模型需要多少GPU显存?以DeepSeek R1部署为例
  • 直接映射例题及解析
  • [笔记] MCPO搭建教程
  • 【Kafka】Windows环境下生产与消费流程详解(附流程图)
  • VO包装类和实体类分别是什么?区别是什么?
  • Jmeter如何取JDBC request响应参数作为下一个接口的值?
  • ORACLE数据库备份入门:第四部分:2-备份场景举例
  • SpringCloud组件——OpenFeign
  • MySQL 中 SQL 语句的详细执行过程
  • Debian安装避坑
  • 基于Matlab的MDF文件导入与处理研究
  • 59. Java 类和对象 - 方法的返回值
  • JSAPI2.4——正则表达式
  • Network.framework 的引入,不是为了取代 URLSession
  • 伊朗港口爆炸已致46人死亡
  • 坚守刑事检察一线13年,“在我心中每次庭审都是一次大考”
  • 四川甘孜州白玉县发生4.9级地震,震源深度10千米
  • 破解160年基因谜题,我国科学家补上豌豆遗传研究最后拼图
  • 影子调查丨掉落的喷淋头:太原一7天酒店加盟店消防设施造假迷局
  • 经济日报刊文:积极应对稳住外贸基本盘