立即注册 登录
返回首页

uid:133894的个人空间

日志

直流电机PID控制例程程序注释

已有 684 次阅读2017-6-26 13:21 |个人分类:STM32| 程序

基本算法

本例采用了增量式PID算法,算式如下: 
PIDOUT = basicValue + Kp*d_error + Ki*error + Kd*dd_error

其中: 
PIDOUT:PID输出控制参数,为PWM宽度的调整量 
Kp:比例调节参数 
Ki:积分调节参数 
Kd:微分调节参数 
error:误差量(为期望速度-实际速度,可以为正数或负数) 
d_error:本次误差量与上次误差量之差(error-pre_error) 
dd_error:上次误差量与上上次误差量之差(pre_error-pre_pre_error

控制程序void SpeedAdjust() { long d_error,dd_error,error; //声明变量 error = (int)(speed_ept - now_speed); //计算本次误差(期待速度-当前速度) d_error = error - pre_error; //本次误差与上次误差之差 dd_error = pre_error - pre_pre_error; //上次误差与上上次误差之差 pre_error = error; //将本次误差赋值给上次误差(下次计算用) pre_pre_error = pre_error; //将上次误差赋值给上上次误差(下次计算用) pwm_tmp = pwm_tmp + PID_P*d_error + PID_I*error + PID_D*dd_error; //计算pwm宽度调整量 if(now_speed>22) //如果当前速度大于22 { Set_DCMotor(0,0); //不调整电机 } else //否则 { if(pwm_tmp>=0) //如果pwm宽度调整为正(增加宽度) { Set_DCMotor(pwm_tmp,0); //增加直流电机转速 } else //否则 { Set_DCMotor(pwm_tmp,1); //降低直流电机转速 } } before_speed = now_speed; //讲本次速度赋值给上次速度(下次使用) }

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部