STM32 麦轮小车

干燥计划 Feb 08, 2020

STM32 麦轮小车

基于 STM32 的造车记录。


背景

野狼队在寒假准备来一场校内赛,把大一新生分了几个队,分别做自己的小车,最终会有类似踢足球的比赛。为了能有良好的操控性和灵活度,我打算给小车直接上麦轮。

STM32 基础

模块知识:

  • 外部中断
  • 串口
  • SysTick 定时器
  • TIM 高级定时器
  • 驱动舵机
  • 驱动电机,实现调速
  • 编码器
  • 遥控(PS2)

运动学原理

这是我自己推导出来的麦轮算法,翻译成代码是这样的:

void M_process(s16 x,s16 y) { //传入左摇杆 L(x,y) 坐标
    const double Pi = 3.14159265359;
    u16 Vm=7200,r=127; //定义最大速度和坐标圆的半径
    s16 V1,V2,V3,V4,angle; //定义四电机速度,直线 OL 与 x 轴所成角度
    s16 new_x,new_y; //定义中间变量

    //纠正算法,如果L坐标超出了坐标圆,那么取在坐标圆上的点。联立圆和正比例函数的方程
    if(pow(x,2)+pow(y,2)>pow(r,2)) {
        new_x=sqrt((pow(x,2)*pow(r,2))/(pow(x,2)+pow(y,2)));
        new_y=sqrt((pow(y,2)*pow(r,2))/(pow(x,2)+pow(y,2)));
        if(x>0) x=new_x ; else x=-new_x;
        if(y>0) y=new_y ; else y=-new_y;
    }

    Vm=(sqrt(pow(x,2)+pow(y,2))/r)*Vm; //按 OL 长度比例取速度
    angle=atan(abs(y)/abs(x))*(180/Pi); //计算直线 OL 与 x 轴所成角度
    if(x==0&&y==0) { //原点
        V1=0; V2=0; V3=0; V4=0;
    }
    if(y==0) { //x轴上
        if(x>0){
            V1=Vm; V2=-Vm; V3=-Vm; V4=Vm;
        }else{
            V1=-Vm; V2=Vm; V3=Vm; V4=-Vm;
        }
    }
    if(x==0) { //y轴上
        if(y>0) {
            V1=Vm; V2=Vm; V3=Vm; V4=Vm;
        }else{
            V1=-Vm; V2=-Vm; V3=-Vm; V4=-Vm;
        }
    }
    if(x>0&&y>0) { //第一象限
        V1=Vm;
        V2=(Vm/45)*angle-Vm;
        V3=(Vm/45)*angle-Vm;
        V4=Vm;
    }
    if(x<0&&y>0) { //第二象限
        V1=(Vm/45)*angle-Vm;
        V2=Vm;
        V3=Vm;
        V4=(Vm/45)*angle-Vm;
    }
    if(x<0&&y<0) { //第三象限
        V1=-Vm;
        V2=-(Vm/45)*angle+Vm;
        V3=-(Vm/45)*angle+Vm;
        V4=-Vm;
    }
    if(x>0&&y<0) { //第四象限
        V1=-(Vm/45)*angle+Vm;
        V2=-Vm;
        V3=-Vm;
        V4=-(Vm/45)*angle+Vm;
    }

    //驱动电机
    M1_run(V1);
    M2_run(V2);
    M3_run(V3);
    M4_run(V4);
}

代码不算精简。因 PS2 手柄还没送到,所以暂时只有左摇杆的算法(任意方向移动),待测试后再加上右摇杆(自转)。就先这样吧。

FAQ

待补充。

总结

待补充。

参考与致谢

知识共享许可协议
本站文章除特别声明外,均采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
您的支持将鼓励我们继续创作!

Power Lin

一个不会讲故事的硬件工程师,不是一个合格的产品经理。

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.