舵机控制
在对舵机的控制中,我采用的是位置式PD算法。
将左右电感的偏差值赋给error,再代入公式进行解算,最后传给舵机输出子函数,控制舵机正确打角。
void steer_control()
{
error=AD_M_Left[0]-AD_M_Right[0];
direction_controlout=dirP*error+dirD*(error-lasterror);
angle=mid_angle+direction_controlout;
angle=angle >right_angle?right_angle:angle;
angle=angle< left_angle?left_angle:angle;
PWM_SetSteer((int)angle);
lasterror=error;
}
另外,如果想使舵机更顺滑,可以对偏差error的计算进行处理,如将归一化后的值开方处理等。
在对电机的控制中,我采用的是增量式PID算法。
首先要设定一个目标速度set_speed,再将当前速度与其比较,得出的差值代入公式计算,得到最终需要输出的电机占空比,从而控制电机转速。
需要注意的是,电机PID控制作为闭环控制,最好将其放入PIT定时器中断,同时在中断中用左右两个编码器分别测出实时速度,这样可以使其控制的更精确。
void PID_computer_newL(int left_speed_in)
{
ec_left=set_speed-left_speed_in;
pwm_L+=speedL_P*(ec_left)+speedL_I*(ec_left-eb_left)+speedL_D*(ec_left-2*eb_left+ea_left);
if(pwm_L > 600) pwm_L=600;
if(pwm_L< -600) pwm_L=-600;
PWM_SetMotorL((int)pwm_L);
ea_left=eb_left;
eb_left=ec_left;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
PID
+关注
关注
35文章
1472浏览量
85585 -
函数
+关注
关注
3文章
4333浏览量
62708 -
代码
+关注
关注
30文章
4793浏览量
68701 -
控制算法
+关注
关注
4文章
166浏览量
21737
发布评论请先 登录
相关推荐
使用C语言进行PID算法实现
前文对PID算法离散化和增量式PID算法原理进行来探索,之后又使用Matlab进行了仿真实验,对PID三个参数又有了更深入的认识,接下来我们
发表于 09-15 09:20
PID控制算法原理是什么?pid控制算法的c语言实现介绍和测试代码概述
最近两天在考虑一般控制算法的C语言实现问题,发现网络上尚没有一套完整的比较体系的讲解。于是总结了几天,整理一套思路分享给大家。
在工业应用中PID 及其衍生算法是应用最广泛的
发表于 08-23 08:00
•46次下载
评论