黄工无刷电机学习
直播中

周棠亨

8年用户 1056经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

平衡小车在移植过程中常见的问题有哪些?

平衡小车在移植过程中常见的问题有哪些?

回帖(1)

凌章致

2021-11-10 10:14:42
最近在研究平衡小车,在TB上买了一个小车套件,源代码是用的stm32的3.5库,自己打算移植到hal库上面去,顺便深入了解一下平衡小车控制原理。下面就说说移植过程中趟过的坑,
1.匿名科创地面站本是一款调试四轴的利器,但是拿来调试平衡车也相当棒,问题出在小车集成了一键下载功能(u***转口,利用DTR和RTS做复位和boot引脚拉低),匿名地面站应该是触发了boot,导致程序下载调试和运行都有问题,
解决办法:很简单,下载,调试,复位期间断开匿名地面站的串口就好了
2,在移植过程中,hal库是默认打开滴答的,而小车原来的代码,用滴答做的延时,所以需要改成自己的延时函数。
3.mpu一直在dmp_load_motion_driver_firmware()初始化失败,一开始怀疑定时器,后来看有人说是电压不稳,结果我的最终问题是,小车使用的dmp的INT中断作为自己时基单元,hal库没错又是HAL库,在初始化的时候默认打开了对应的引脚中断,这就导致初始过程不断被打断。
解决办法:很简单,先关闭引脚中断,MPU初始完成后,在打开.
4,这是个小坑,这次还是HAL库,stm32MxCube生成Keil工程后,默认优化级别是level-3,导致调试莫名其妙,
解决办法:也很简单,改为level-0就好了。
2018-04-02目前先把MPU6050和hal库环境移植成功,下一步开始测试电机控制相关。
-------------------------------------------------------------------------------------------------------------------------
5.继续趟坑,dmp_load_motion_driver_firmware()终于初始化成功了,可是发现四元数转出的欧拉角有问题,

代码如下:   
void Read_DMP(void)
{
    unsigned long sensor_timestamp;
    unsigned char more;
    long quat[4];
    dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more);
    if (sensors & INV_WXYZ_QUAT )
    {
        q0=quat[0] / q30;
        q1=quat[1] / q30;
        q2=quat[2] / q30;
        q3=quat[3] / q30;
        Pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;
        Roll= atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // roll
    }
}
问题1,没有包含,math.h文件,问题2,hal库初始化中断引脚默认是rising,我们需要的是falling,改一下,可以稳定输出了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分