广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
SIEMENS内蒙古巴彦淖尔市 西门子代理商——西门子华北一级总代理

电机PID速度控制

上面介绍了PID的基础知识,接下来就使用位置式PID来实现对直流电机转速的控制。

程序自定义PID结构体typedefstruct
{
float target_val;   //目标值
float err;          //偏差值
float err_last;     //上一个偏差值
float Kp,Ki,Kd;     //比例、积分、微分系数
float integral;     //积分值
float output_val;   //输出值
}PID;
PID算法实现(位置式PID)float PID_realize(float actual_val)
{
/*计算目标值与实际值的误差*/
pid.err = pid.target_val - actual_val;

/*积分项*/
pid.integral += pid.err;

/*PID算法实现*/
pid.output_val = pid.Kp * pid.err +
    pid.Ki * pid.integral +
    pid.Kd * (pid.err - pid.err_last);

/*误差传递*/
pid.err_last = pid.err;

/*返回当前实际值*/
return pid.output_val;
}
周期调用PID计算//周期定时器的回调函数
void AutoReloadCallback()
{
int sum = 0;/*编码器值(PID输入)*/
int res_pwm = 0;/*PWM值(PID输出)*/

       /*读取编码器测量的速度值*/
sum = read_encoder();
       /*进行PID运算,得到PWM输出值*/
       res_pwm = PID_realize(sum);
/*根据PWM值控制电机转动*/
set_motor_rotate(res_pwm);

       /*给上位机通道1发送实际值*/
set_computer_value(SEND_FACT_CMD, CURVES_CH1, &sum, 1);
}
上位机

这里使用野火多功能调试助手的"PID调试助手“来进行实验,用于显示PID调节时的电机转速曲线。

实验演示

目标速度值设为50(这里的目标值50使用的是编码器10ms捕获的脉冲数),通过体调节PID的参数,来测试电机能否较快的达到目标速度。

先调节P

【1】P值先使用10看看效果,从速度曲线可以看出,达不到目标速度,且与目标速度相差较大。

PID
1000


展开全文
相关产品
拨打电话 微信咨询 发送询价