找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7934|回复: 9
收起左侧

如何在STM32上实现增量PID控制

  [复制链接]
ID:363309 发表于 2018-7-2 16:36 | 显示全部楼层 |阅读模式
虽然PID不是什么牛逼的东西,但是真心希望以后刚刚接触这块的人能尽快进入状态。特地分享一些自己如何实现的过程。
首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异。
资料上比较多的是:
102650f6rimzizf76eegwc.jpg.thumb.jpg

还有一种的算法是:
102740vub2bzbbuor7d1os.jpg.thumb.jpg

这里主要介绍第二种,具体会分析比例、积分、微分三个环节的作用。

硬件部分:
控制系统的控制对象是4个空心杯直流电机,电机带光电编码器,可以反馈转速大小的波形。电机驱动模块是普通的L298N模块。
芯片型号,STM32F103ZET6

软件部分:
PWM输出:TIM3,可以直接输出4路不通占空比的PWM波
PWM捕获:STM32除了TIM6 TIM7其余的都有捕获功能,使用TIM1 TIM2 TIM4 TIM5四个定时器捕获四个反馈信号
PID的采样和处理:使用了基本定时器TIM6,溢出时间就是我的采样周期,理论上T越小效果会越好,这里我取20ms,依据控制对象吧,如果控制水温什么的采样周期会是几秒几分钟什么的。

上面的PWM输出和捕获关于定时器的设置都有例程,我这里是这样的:
TIM3输出四路PWM,在引脚 C 的 GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9输出
四路捕获分别是TIM4  TIM1  TIM2  TIM5   ,对应引脚是:  PB7 PE11 PB3 PA1
高级定时器tim1的初始化略不同,它的中断”名称“和通用定时器不同。具体的内容,请大家看一下我分享的代码就明白了。
程序.zip (2.51 KB, 下载次数: 121)
回复

使用道具 举报

ID:364988 发表于 2018-7-4 16:57 | 显示全部楼层
赞,记得有人把西门子PLC的PIDC语言搞出来了,应该差不多吧
回复

使用道具 举报

ID:104779 发表于 2018-12-22 01:45 | 显示全部楼层
cdust 发表于 2018-7-4 16:57
赞,记得有人把西门子PLC的PIDC语言搞出来了,应该差不多吧

请问你在哪里看到有西门子PLC的PIDC语言呢?我想学习一下。
回复

使用道具 举报

ID:478002 发表于 2019-3-17 10:07 | 显示全部楼层
学习了
回复

使用道具 举报

ID:550312 发表于 2019-5-29 16:23 | 显示全部楼层
非常感谢啦超级有用
回复

使用道具 举报

ID:227663 发表于 2019-7-8 23:45 | 显示全部楼层
非常有用,学习了
回复

使用道具 举报

ID:453741 发表于 2019-7-13 18:59 | 显示全部楼层
除了pid还有其他平衡算法吗
回复

使用道具 举报

ID:20672 发表于 2019-8-30 16:27 | 显示全部楼层
谢谢分享~~
回复

使用道具 举报

ID:113433 发表于 2019-8-31 08:24 | 显示全部楼层
非常讚的分享   感謝
回复

使用道具 举报

ID:583110 发表于 2019-8-31 14:54 | 显示全部楼层
学习了。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表