1方案介绍
基于GD32F207ZET6的平衡小车,底层接口用到的各个模块分别有:I2C(GPIO模拟)、Timer(周期定时器)、Timer-PWM(PWM控制)、Timer-input(编码器输入)、SPI(GPIO模拟写OLED用)、USART(串口调试和蓝牙通信)、ADC(外部电压测量)。
2设计应用描述及心得总结
看了下提供的测试例程,简单重新新建了一个Template,里面分立的建了三个基本功能:LED、USART和SYSTICK,直接下到开发板就可以用了,直接删减相应的.C文件即可使用。
初始模版好了,首先最重要的传感器,就地取材,就用MPU6050了,移植下官方的DMP,这个花了点时间,问题出现在MDP内部fifo的溢出,解决的方法如下如所示:
这是因为读取不及时导致内部FIFO溢出,这里正好清除了一下,再次读取就OK了,修改read代码,如下图所示:
MPU6050的读取数据如下所示:
可以看出来MPU内部DMP的数据一开始很不稳定,这个过程得有好几秒,稳定了,就OK了,不过也可以通过寄存器,直接读取初始值,然后自己用算法拟合一个欧拉角对比下。
接下来是个大的范围TIMER应用,这里使用了TIMER4的两个通道做电机控制,输出频率是10K,分别使用TIMER3通道1和TIMER2通道2做编码器的输入,用一个TIMER也可以,这里使用了两个。还有个TIMER5作为内部周期定时器5ms,TIMER的调试还算顺利,直接上结果,counta和countb 是编码器的输入,这里接的就是TIMER4的两路PWM。
此接口还用了个直接透传蓝牙模块,还有个APP可以链接,使用了串口2与蓝牙模块链接,使用了接收中断,中断函数里直接显示接收到的数据,这里APP的处理就是将手机的屏幕划分为9宫格,然后触摸一个地方传送一个数字,触摸结束(松手),默认发送一个0,这样可以根据数字的顺序,简单的软件实现划屏操作。
3方案实物图
硬件焊接的匆忙,但整体已经出来了,如下所示:
全部0条评论
快来发表一下你的评论吧 !