高级会员
- 积分
- 912
- 威望
- 499
- 贡献
- 249
- 兑换币
- 299
- 注册时间
- 2015-10-17
- 在线时间
- 82 小时
- 毕业学校
- 太原工业学院
|
Struct
{
sint16 current_error; //当前差值
sint16 last_error; //上次差值
sint16 prev_error; //上上次差值
}PID_M; //定义一个名为 PID_M 的结构体
uint8 std_speed[5]={0,55,90,110,128}; //存放期望速度脉冲数
float PID_M_Kp =49,PID_M_Ki = 0.7,PID_M_Kd =0.5; //定义 Kp、Ki、Kd 三个参数
uint8 pulse_count; //记录欧姆龙编码器的脉冲个数
uint16 PID_m_add ; //PID 的增量输出
void Motor_ctl(uint8 i)
{
sint16 P,I,D; //定义局部变量
PID_M.prev_error=PID_M.last_error; //更新每次的差值
PID_M.last_error=PID_M.current_error; //更新每次的差值
PID_M.current_error=std_speed[i]-pulse_count; //更新每次的差值
P=PID_M_Kp*(PID_M.current_error-PID_M.last_error); //比例 P 输出公式
I=PID_M_Ki* PID_M.current_error; //积分 I 输出公式
D=PID_M_Kd*(PID_M.current_error-2*PID_M.last_error+PID_M.prev_error); //微分 D 输出公式
PID_m_add=P+I+D+PID_m_add; //电机的 PID 增量值输出
if(PID_m_add>1500)PID_m_add=1500; //限制电机的最大速度
if(PID_m_add<1)PID_m_add=0; //限制电机的最小速度
Pwm23_duty(PID_m_add); //将增量值输出传给电机执行
}
问 我觉得增量值应该是编码器的增量值 为何却将它赋给电机的占空比去处理
|
|