ZBLOG

float PID_realizeL(int Target) //速度环公式 { sid.err=Target-motor_raw[0].speed/60; sid.sum_err+=sid.err; sid.incement_val=sid.kp*(sid.err-sid.last_err)+sid.ki*sid.err+sid.kd*(sid.err-2*sid.last_err+sid.prev_err); sid.prev_err=s...

可以将位置式PID函数作为速度环的反馈,即在速度环中调用位置式PID函数来获取控制量。

例如:

float targetSpeed = 100; // 目标速度 tPid_vel vel_pid; vel_pid.kp = 0.1; vel_pid.ki = 0.01; vel_pid.kd = 0.05;

while(1) {

float output_pos = PID_realizeP(targetPos, &pos_pid); // 获取位置环输出
float output_vel = PID_realizeL(output_pos); // 使用位置环输出作为速度环输入,获取速度环输出

// 将速度环输出赋值给电机控制量
motor_control[0] = output_vel;

// 等待一段时间后更新实际状态(角度和速度)
update_motor_state();

// 更新速度环PID参数
vel_pid.actual_val = motor_raw[0].speed/60; // 实际测得的转速
float output_vel_new = PID_realizeL(targetSpeed, &vel_pid); 

}

注意,在使用位置式PID函数时,需要先调用一次获取初始误差。另外,每次更新实际状态后都需要重新计算位置式PID函数的误差。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=4546

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?