关于GD32F207ZET6的平衡小车底层接口设计的分析和应用

描述

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方案实物图

硬件焊接的匆忙,但整体已经出来了,如下所示:

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分