前言
三轮车模的调试方法:
三轮车模与四轮车模不同:三轮车模无舵机,靠两差速转弯
`
一、闭环调试思路
1.差速的获取
代码如下(示例):
position=Cha_bi_he1(adc_h_l,adc_WB_l,50);//差比和左右两个电感
//两横电感差比和
double Cha_bi_he1(int16 data1,int16 data2,uint8 x)//两个电感所用算法
{
int16 cha;
int16 he;
double result;
cha = data1 - data2;
he = data1 + data2;
result = (x*cha)/(1.0*he);//x是放大倍数
return result;
}
/*****************差比和差***********************//四个电感所用算法(注意:左移位数在我实际调车过程中严重影响车的左急转弯和右急转弯)
函数: int16 Cha_BI_He_Cha(uint16 Date_1,uint16 Date_2,uint16 Date_3,uint16 Date_4,float a,float b,uint16 X)
参数: float Date_1--左横电感 float Date_2--右横电感
float Date_3--左斜电感 float Date_4--右斜电感
float a--横电感加权系数 float b-- 斜电感加权系数 int16 X--左移位数
说明: 无
返回值:Resault
日期:2022-3-28
最后修改时间:2022-7-4
作者: kkk */
int16 Cha_BI_He_Cha(uint16 Date_1,uint16 Date_2,uint16 Date_3,uint16 Date_4,float a,float b,uint16 X)
{
int16 Resault;
int16 FengZ,FengM;
Cha_H = (int16)((Date_1 - Date_2)); //横电感差
Cha_X = (int16)((Date_3 - Date_4)); //斜电感差
He = Date_1 + Date_2; //横电感和
Sum = Date_1 + Date_2 + Date_3 + Date_4; //所有电感之和
He_X = Date_3 + Date_4; //斜电感和
//保密,剩下的就不发了
}
2.两轮转速的获取
1.首先需要理解差速和目标速度以及当前速度之间的关系,差速并不需要进到PID进行运算,直接用差速乘以放大系数,我们要做的就是调好电机的PID,具体的关系是:
(1)电感与中线的偏差error1
(2)目标速度与当前速度的误差error2
无需将电感误差进到PID,直接用误差乘以放大系数作为转弯所需的差速
计算方法为:
目标速度=基础速度+/-(电磁差值*放大系数)
speed_control(+目标速度,-目标速度)//该speed_control为增量式运算后的驱动函数
Targer_L=250-position*6; //左边轮速度
Targer_R=250+position*6; //右边轮速度
将计算后的数据进入增量式PID即可
二、开环调试思路
1.差速的获取:
方法:
差速的获取与闭环相同
2.两轮转速的获取:
方法:
开环意味着是没有编码器或者不需要用到编码器的情况下(大佬告诉我是伪PID),思路是:将电感的差值进到位置式子PID :将输出的结果乘以放大系数加减在基础速度上:
void Speed_ctrl(int32 x,int32 y)
{
speed_L_duty=x;//期望速度L
speed_R_duty=y;//期望速度R
real_speed_L=templ_pluse;//34
real_speed_R=tempr_pluse;//53
PidLocCtrl(&LSpeed_PID,position);//通过位置式PID得到误差
PidLocCtrl(&RSpeed_PID,position);
LSpeed_PID.out=range_protect(LSpeed_PID.out,-5000,5000);
RSpeed_PID.out=range_protect(RSpeed_PID.out,-5000,5000);
Motor_ctrl(speed_L_duty-LSpeed_PID.out*2,speed_R_duty+RSpeed_PID.out*2);//(右轮,左轮)
}
三、总结:
1.调车不能死板,要多动脑子。
2.开环与闭环的区别要清楚。
3.多走出自己的舒适区。