标题 关于舵轮限位如何添加在代码中使用
问题:在使用过程中,手动开AGV切换横移和旋转按钮过于频繁造成小车限位报警,而报警后就断开动力电,这时只能手动打开按钮接除报警,拍下急停,复位上动力电,此时小车转向容易在死驱,按下前进后朝一个方向不停旋转,连续旋转后没有停止意思,造成内部绕线拧成麻花状态,轻度容易破皮,重度烧坏驱动器。上海兰钧现场,已经更换两台驱动器。
解决:舵轮顺时针和逆时针分别有两个压力开关(转向突出部分可以压到)即限位
如何添加:比如后轮,按钮顺时针旋转,
1)看那个限位开关最先触碰,2)观察顺时针旋转速度正负,即写如下判断
if((!BackSteerWheel_N && StrWhlTurn[1].StrWhl_Speed <0)||(!BackSteerWheel_P && StrWhlTurn[1].StrWhl_Speed > 0)||(!BackSteerWheel_P && !BackSteerWheel_N) )
{
StrWhlTurn[1].StrWhl_Speed = 0;//后轮转向速度=0
}
BackSteerWheel_N:后轮转向限位(顺时针旋转:从车体上方俯视)最先触碰其开关
开关触碰后为:0 且顺时针速度为-
即:!BackSteerWheel_N && StrWhlTurn[1].StrWhl_Speed <0
顺时针限位触碰,如果速度依然为负,则不允许转了,只可以反方向转回
同理逆时针触碰另外限位
//************************舵轮转向限位保护V1.0********************//
if((!FrontSteerWheel_P && StrWhlTurn[0].StrWhl_Speed <0)||(!FrontSteerWheel_N && StrWhlTurn[0].StrWhl_Speed > 0)||(!FrontSteerWheel_P && !FrontSteerWheel_N) )
{
StrWhlTurn[0].StrWhl_Speed = 0;//前轮转向速度=0
}
if((!BackSteerWheel_N && StrWhlTurn[1].StrWhl_Speed <0)||(!BackSteerWheel_P && StrWhlTurn[1].StrWhl_Speed > 0)||(!BackSteerWheel_P && !BackSteerWheel_N) )
{
StrWhlTurn[1].StrWhl_Speed = 0;//后轮转向速度=0
}
if((!CentreSteerWheel_N && StrWhlTurn[2].StrWhl_Speed <0)||(!CentreSteerWheel_P && StrWhlTurn[2].StrWhl_Speed > 0)||(!CentreSteerWheel_N && !CentreSteerWheel_P) )
{
StrWhlTurn[2].StrWhl_Speed = 0;//中间轮转向速度=0
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/890593cdbc2a4413b51cce274b9aee9e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA55qu55qu6bKBLWVjaG8=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
自动部分舵轮保护
/舵轮转向限位保护V1.0*****/
if((!FrontSteerWheel_P && StrWhlTurn[0].StrWhl_Speed <0)||(!FrontSteerWheel_N && StrWhlTurn[0].StrWhl_Speed > 0)||(!FrontSteerWheel_P && !FrontSteerWheel_N) )
{
SteerLimit_exception[0] = 1;
}
else
{
SteerLimit_exception[0] = 0;
}
if((!BackSteerWheel_N && StrWhlTurn[1].StrWhl_Speed <0)||(!BackSteerWheel_P && StrWhlTurn[1].StrWhl_Speed > 0)||(!BackSteerWheel_P && !BackSteerWheel_N) )
{
SteerLimit_exception[1] = 1;
}
else
{
SteerLimit_exception[1] = 0;
}
if((!CentreSteerWheel_N && StrWhlTurn[2].StrWhl_Speed <0)||(!CentreSteerWheel_P && StrWhlTurn[2].StrWhl_Speed > 0)||(!CentreSteerWheel_N && !CentreSteerWheel_P) )
{
SteerLimit_exception[2] = 1;
}
else
{
SteerLimit_exception[2] = 0;
}
if(SteerLimit_exception[0] || SteerLimit_exception[1] || SteerLimit_exception[2])
{
targetWheelSpeed.wheel_vel[0] = 0;
targetWheelSpeed.wheel_vel[1] = 0;
StrWhlTurn[0].StrWhl_Speed = 0;
StrWhlTurn[1].StrWhl_Speed = 0;
StrWhlTurn[2].StrWhl_Speed = 0;
//SysError.Error.SteerLimit=1;
music_custom_made = 12;
}
else
{
//SysError.Error.SteerLimit=0;
music_custom_made = 0;
}
//************************************************************//