如何在STM32上实现增量式pid算法c程序转

后使用快捷导航没有帐号?
查看: 123|回复: 0
STM32利用PID控制电机转速+上位机通信+绘制速度曲线
MFC实现上位机的编写,具有串口通信和绘图的功能,调节PID参数,STM32实现直流电机的转速控制。
(4.22 MB, 下载次数: 2 , 售价: 1 rd币)
12:21 上传
点击文件名下载附件..
售价: 1 rd币 &
论坛资料为网友自由上传,与本论坛无关。
Powered by
关注一牛微信君,已阅读到文档的结尾了呢~~
增量式PID的stm32实现,整定过程
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
增量式PID的stm32实现,整定过程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口手把手教你玩转直流电机双环PID调试-电子产品世界论坛
手把手教你玩转直流电机双环PID调试
直流电机速度位置双环控制简明教程
1.速度闭环控制
我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。
假定采样时间很短时(我们的代码中是10ms),可做如下处理:
① 用一介差分代替一介微分;
② 用累加代替积分。
根据增量式离散PID公式
Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k):本次偏差
e(k-1):上一次的偏差
e(k-2):上上次的偏差
Pwm代表增量输出
在我们的速度控制闭环系统里面只使用PI控制,因此对PID控制器可简化为以下公式:
Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
具体通过C语言实现的代码如下:
int&Incremental_PI&(int&Encoder,int&Target)
float&Kp=100,Ki=100; //PI参数由电机的种类和负载决定
static&int&Bias,Pwm,Last_
Bias=Encoder-T
//计算偏差
Pwm+=Kp*(Bias-Last_bias)+Ki*B
//增量式PI控制器
Last_bias=B
//保存上一次偏差
//增量输出
入口参数为编码器的速度测量值和速度控制的目标值,返回值为电机控制PWM。
第一行代码为PI参数的定义,PI参数在不同的系统中不一样,我们的代码中的PID参数,仅针对平衡小车之家的电机空载时调试得到。
第二行是相关内部变量的定义。
第三行是求出速度偏差,由测量值减去目标值。
第四行使用增量PI控制器求出电机PWM。
第五行保存上一次偏差,便于下次调用。
最后一行是返回。
在10ms定时中断里面调用该函数实现我们的控制目标:
Moto1=Incremental_PI(Encoder,Target_velocity);
Set_Pwm(Moto1);&&&&&&&//===赋值给对应MCU的PWM寄存器
具体请结合完整代码理解,我们的代码基于STM32F103C8控制器,但是把基于C语言的PID控制器部分剥离,并放在control.c里面,故对STM32不熟悉的同学依然可以使用记事本打开这个文件观看。
2.位置闭环控制
根据位置式离散PID公式
Pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k):本次偏差
e(k-1):上一次的偏差
∑e(k):e(k)以及之前的偏差的累积和;其中k为1,2,,k;
Pwm代表输出
在我们的位置控制闭环系统里面只使用PI控制,因此对PID控制器可简化为以下公式:
Pwm=Kp*e(k)+Ki*∑e(k)
具体通过C语言实现的代码如下:
int&Position_PI&(int&Encoder,int&Target)
float&Kp=15,Ki=0.01;
static&int&Bias,Pwm,Integral_
Bias=Encoder-T&&&&&&&&&&&&&&&&//计算偏差
Integral_bias+=B
//求出偏差的积分
Pwm=Kp*Bias+Ki*Integral_&&&&&&&//位置式PI控制器
return&P&&&&&&&&&&&&&&&&&&&&&&&&&//增量输出
入口参数为编码器的位置测量值和位置控制的目标值,返回值为电机控制PWM。
第一行代码为PI参数的定义,PI参数在不同的系统中不一样,我们的代码中的PID参数,仅针对平衡小车之家的电机空载时调试得到。
第二行是相关内部变量的定义。
第三行是求出速度偏差,由测量值减去目标值。
第四行通过累加求出偏差的积分。
第五行使用位置式PI控制器求出电机PWM。
最后一行是返回。
在10ms定时中断里面调用该函数实现我们的控制目标:
Moto1=Position_PI(Encoder,Target_position);
Set_Pwm(Moto1);&&&&&&&//===赋值给PWM寄存器
具体请结合完整代码理解。
3.速度位置双环控制
速度位置双环控制由以上两个控制器进行嵌套,具体原理不再细讲,只对核心代码进行讲解:
Encoder=Read_Encoder(2);
Position+=E
Moto1=Position_PI(Position,Target_position);
Moto1=Incremental_PI(Encoder,-Moto1);
第一行是通过M法测速获得电机速度。
第二行是通过累加求出速度的积分,也就是电机的位置信息。
第三行是位置外环控制器,求出控制输出量,作为速度内环的控制目标值。
第四行是速度内环。
因为双环控制过程较复杂,故给出其控制原理图如下:
附件所给的代码都经过测试,如果同学们测试的时候发现不能实现控制目标,请对调编码器的AB相。
笔者水平有限,有错误之处请批评指出,以上内容由平衡小车之家原创,转载或引用请注明出处。
来点干货,以下是相关的代码和原理图,取消了网盘链接,上传了附件,直接下载即可
下载附件:
大赞 学习一下
赞一个,先mark了~
赞一个,学习了
不错不错,很好的学习资料。
点赞,学习。。。
让我感觉又学了一遍自控原理!!wonderful………
好东西,多谢楼主分享,学习了
这个经验分享真棒。
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有工具类服务
编辑部专用服务
作者专用服务
基于STM32和增量PID的旋转倒立摆的设计
旋转倒立摆系统应用广泛,但是传统设计中存在成本较高、功耗较大等问题.针对该难题,提出利用32位低功耗嵌入式芯片STM32作为主控制器、以增量PID和惯性起摆为控制算法的解决思路.通过连续多次采样角度传感器WDX35D,STM32将获取的数值进行增量PID计算并产生PWM信号,使BTS7960能够快速、平滑地驱动伺服电机,实现摆杆进入稳定的倒立状态.实践表明,该倒立摆稳定、可靠、运行平滑、抗干扰能力强,具有低成本、低功耗等优点.
BAO Jing-hai
QIN Gui-shou
作者单位:
钦州学院物理与电子工程学院,广西钦州,535000
年,卷(期):
机标分类号:
在线出版日期:
基金项目:
广西教育厅教改课题:基于项目超市的单片机实训平台的建设
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社

我要回帖

更多关于 增量式pid 的文章

 

随机推荐