标题:
STM32电机PID算法实现程序
[打印本页]
作者:
Jerry_Li
时间:
2019-6-29 20:05
标题:
STM32电机PID算法实现程序
增量式PID的算法实现,带详细注释
单片机源程序如下:
#include "control.h"
int Target_velocity=1; //设定速度控制的目标速度为50个脉冲每10ms
int TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//10ms定时中断
{
TIM3->SR&=~(1<<0); //===清除定时器1中断标志位
Encoder=Read_Encoder(2); //===读取编码器的值,M法测速,输出为每10ms的脉冲数
// Led_Flash(100); //===LED闪烁;指示单片机正常运行
Motor=Incremental_PI(Encoder*100,Target_velocity); //===速度PI控制器
Xianfu_Pwm(); //===PWM限幅
Set_Pwm(Motor); //===赋值给PWM寄存器
}
return 0;
}
/**************************************************************************
函数功能:赋值给PWM寄存器
入口参数:PWM
返回 值:无
**************************************************************************/
void Set_Pwm(int motor)
{
if(motor>0) AIN2=1, AIN1=0;
else AIN2=0, AIN1=1;
PWMA=myabs(motor);
}
/**************************************************************************
函数功能:限制PWM赋值
入口参数:无
返回 值:无
**************************************************************************/
void Xianfu_Pwm(void)
{
int Amplitude=7100; //===PWM满幅是7200 限制在7100
if(Motor<-Amplitude) Motor=-Amplitude;
if(Motor>Amplitude) Motor=Amplitude;
}
/**************************************************************************
函数功能:绝对值函数
入口参数:int
返回 值:unsigned int
**************************************************************************/
int myabs(int a)
{
int temp;
if(a<0) temp=-a;
else temp=a;
return temp;
}
/**************************************************************************
函数功能:增量PI控制器
入口参数:编码器测量值,目标速度
返回 值:电机PWM
根据增量式离散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)代表上一次的偏差 以此类推
pwm代表增量输出
在我们的速度控制闭环系统里面,只使用PI控制
pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
**************************************************************************/
int Incremental_PI (int Encoder,int Target)
{
float Kp=20,Ki=30;
static int Bias,Pwm,Last_bias;
Bias=Encoder-Target; //计算偏差
Pwm+=Kp*(Bias-Last_bias)+Ki*Bias; //增量式PI控制器
Last_bias=Bias; //保存上一次偏差
return Pwm; //增量输出
}
复制代码
所有资料51hei提供下载:
电机速度闭环控制V1.7z
(188.4 KB, 下载次数: 330)
2019-6-29 21:36 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
相克螺旋
时间:
2019-6-30 00:04
楼主厉害
作者:
longyo
时间:
2019-6-30 08:11
谢谢分享
作者:
简单的就好
时间:
2019-7-1 16:53
这个真的厉害了
作者:
缘分五月lck
时间:
2019-7-2 14:16
谢谢分享,比较典型的pi调节方式
作者:
afeiaa
时间:
2020-4-16 23:25
感谢楼主分享
作者:
FEAramd
时间:
2021-7-24 16:44
这个源码好像没有设置电机的目标速度具体是多少,请问应该怎么去写呢?
作者:
xiaowentongxue
时间:
2021-7-28 19:25
FEAramd 发表于 2021-7-24 16:44
这个源码好像没有设置电机的目标速度具体是多少,请问应该怎么去写呢?
同问
作者:
蒋灵
时间:
2021-8-3 16:52
这个电机是什么电机?
作者:
2327460545
时间:
2021-8-8 11:11
这个是步进电机吧?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1