完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近在研究平衡小车,在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,改一下,可以稳定输出了。 |
|
|
|
只有小组成员才能发言,加入小组>>
2468 浏览 0 评论
9328 浏览 4 评论
37012 浏览 19 评论
5061 浏览 0 评论
25039 浏览 34 评论
1635浏览 2评论
1893浏览 1评论
2344浏览 1评论
1668浏览 0评论
655浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 04:52 , Processed in 0.961087 second(s), Total 43, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号