stm32学习随记 : 增量式PID

本文详细介绍了PID控制算法的初始化、设定目标值及核心更新算法。通过实例演示如何利用PID控制电机吹动纸板的角度,包括确定每度对应PWM值的方法,以及如何调整Kp、Ki、Kd参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// PID参数初始化
void Init_pid(PID*p, float kp, float ki, float kd)
{
		p->kp = kp;
		p->ki = ki;
		p->kd = kd;
		p->error = 0;
		p->error_last = 0;
		p->error_next = 0;
}

// 设定期待的值
void pid_set_speed(PID* p, float val)
{
		p->set_speed = val;
}

// 增量式PID核心算法,返回增量
float pid_update(PID*p, float actual)
{
		p->error = p->set_speed  -  actual;
		p->increment_speed = p->kp*(p->error - p->error_next)+
                             p->ki* p->error+ 
                            p->kd * (p- >error - 2*p->error_next +
                            p->error_last);
	   p->error_last = p->error_next;
	   p->error_next = p->error;
	
	   return p->increment_speed;
}

那怎么使用????

比如,我想通过电机吹动一块纸板,通过吹出的角度来控制PWM.....

辣么,怎么办咧???

首先,找出每一度对应的PWM。 我们可以将PWM的占空比调到100%,看能吹出多大角度;

然后,最大的PWM的值 / 最大的角度 = 每一度对应的PWM值。。。(这个pwm值不一定是100,可以是1000,2000,看你的定义)

最后,将pwm和PID输出的增量关联起来。

get_pwm += get_increase*12.5;    //12.5是 每一度对应的PWM值

 

好了,剩下的工作就是慢慢调节Kp, Ki, Kd.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值