STM32F401 编码器电机实现位置PID控制

PID算法是控制中使用的最多并且最简单的一种控制算法,算法的核心就是不断计算当前值和目标值的误差,并根据误差来改变输入,最终达到目标值
废话不多说,一看代码就明白了:

/**************************************************************************
函数功能:位置式PID控制器
入口参数:编码器测量位置信息,目标位置
返回  值:电机PWM
根据位置式离散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代表输出
**************************************************************************/
int Position_PID (int Target,int Encoder)
{ 	
	 double Position_KP=0.06,Position_KI=0.0,Position_KD=0.01;
	 static float Bias,Pwm,Integral_bias,Last_Bias;
	 Bias=Encoder-Target;                                  //计算偏差
	 Integral_bias+=Bias;	                                 //求出偏差的积分
	 Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);       //位置式PID控制器
	 Last_Bias=Bias;                                       //保存上一次偏差 
	 return Pwm;                                           //增量输出
}

上面是核心代码,当然KP、KI、KD这三个参数是很难调的,需要根据误差适当计算后再慢慢调试。
关于 P、I、D 三个参数的主要作用,可以大致又不完全地概况为:P 用于提高响应速度、I 用于减小静差、D 用于抑制震荡。
当然,这个误差的获得也很重要,因为采样间隔的不同将带来不同的控制延迟,当然也不是采样间隔越短越好,太短的话,编码器的数值不准确,一般情况下10ms一次的采样间隔比较合适,100ms就太长了,会导致控制最终的误差难以消除。

实验器材
测试平台:STM32F401CCU6
定时器:TIM2(用于采样、定时观测编码器读数)、TIM3(电机的PWM输出口)、TIM4(编码器)
控 制:位置 PID 算法
OLED:中景园1.3寸7针OLED
电机驱动:TB6612电机驱动模块

完整工程链接

  • 11
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值