查看: 6472|回复: 9

GD190的自平衡小车方案分享

  [复制链接]
  • TA的每日心情
    奋斗
    2021-7-30 15:17
  • 签到天数: 576 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-6-19 10:33:54 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 df_flying 于 2016-6-19 10:43 编辑

          拿到190的小红板有段时间了,这期间工作比较忙,没时间集中来写分享。今天花点时间,将目前的一点分享工作给大家分享下。
          GD190的小红板更改了GD207小红板的安卓引脚位,使之不在需要外扩版直接兼容安卓引脚,同时提供了串口和调试于一体的USB解决方案,虽然该方案的发热量较大(好像GDlink本身就比较大),但还是更加方便了使用者的调试和串口数据的查看,(使用的下载协议不是GDlink,而是CMSIS,该方案最大的好处就是不需要相应的驱动)。这次的引脚外扩,同时提供了母座和排针,也更加的体现了人性化。如果需要外扩做自己的东西,也不需要自己购买母座或排针了~当然了,配套的资料还是比较全的,默认还带了一个RTOS。各个模块的官方例程还是藏得比较深:GD32F190\MCU开发板资料\GD32_Colibri_F190R8_TROCHILI_V0.12_PRV4代码\trochili_v0.12_preview4_20160408\firmware\GD32F1x0_Firmware_Library_V2.0.0\Examples
           GD190的小红板采用的芯片是GD32F190R8T6,LQFP-64封装的,这回几乎芯片的所有引脚都被引了出来,这样,也就更能充分的让大家使用该芯片了。
          回归正题,此次分享给大家带来一个自平衡小车的DIY,整个制作过程和软件代码的移植步骤,所以内容可能较多,有一定经验的看了希望别喷。用到的单片资源,主要如下:
    LED1-5    其中LED1-3分别是小板上的LED,这里由于设计原因没办法看到,但引脚没有用到也就放在那了,LED5(PA4)为电源电压检测LED,电压过低会亮起。LED4(PA5)为工作指示LED; UART  使用了两路,其中一路为板载串口,用于数据的调试,为串口2(分别为PA2-TX  PA3-RX),另一路为蓝牙的透传接口,使用了串口1(分别为PA9-TX  PA10-RX);IIC         为了方便移植6050的DMP,这里使用的是GPIO模拟IIC,分别使用了PF4-CLK 和PF5-SDA;  AD:主要用于对电池的电压采样;TIMER    timer主要有3个作用,分别为电机PWM控制(使用了TIMER2的CH2(PB10)和CH2(PB11))、两路编码器的输入(使用了TIMER3的CH1(PC6)\TIMER16的CH1(PA6))以及基本周期定时器TIMER14。
          第一步建立一个自己的空工程:首先需要安装一个Keil.GD32F1x0_DFP.2.0.0.rar,这个是GD32F1X0系列的官方头文件。新建一个MDK的工程,在如下图的路径中找到这两个文件夹:CMSIS和Peripherals,同时新建一个BSP文件夹用于放自己的程序。User文件夹放置工程文件,并添加gd32f1x0_conf.h,gd32f1x0_it.c,gd32f1x0_it.h,main.c,四个文件。其实除了main.c是自己建立的,其他几个都在Peripherals文件里剪切一下就行了,当然你也可以不动后期添加下路径就好了。
    QQ截图20160619090723.png
          然后在工程里添加分组和相应的文件,还有路径的设置。并在C/C++的默认Define中添加USE_STDPERIPH_DRIVER,GD32F170_190,空程序模版如下。
    QQ截图20160619091646.png
    这里提供了三个基本的BSP文件,分别是内部嘀嗒时钟,板载的三个LED和板载的串口通信。下载后LED1-3闪烁,串口打印“usart is OK”完全代码见附件:GD190Template。
          第二步移植MPU6050的官方DMP:mpu6050的官方库使用的控制器是430,开发环境为CCS,不过这里直接使用了官方的函数接口(其实就是IIC接口),这里使用了硬件模拟了一个IIC,这里给大家一个推荐的IIC高低电平引脚的用法:直接定义相关的寄存器,而不再使用各种库函数。不过习惯还得看个人。
    QQ截图20160619092724.png QQ截图20160619093106.png
    这里的bsp_12c.c就是模拟IIC程序,bsp_mpu6050.c就是6050的初始化和DMP的初始化。inv_xx的两个文件为官方的函数。还有一大堆的头文件,这里没有对各个bsp模块进行分组,全部放在了BSP文件夹下面的inc和src文件夹了,分别是.c和.h文件,这样的好处就是不需要写一个bsp就添加一个路径,坏处就是不容易分清各个模块。移植DMP注意的一点就是DMP的内部fifo的溢出,如下代码处会返回一个-2,给一个网友们的建议解决方式:
    QQ截图20160415153721.png QQ截图20160415153807.png
    给出的IIC完整代码见附件GD190&IIC,同时给出了DMP的官方库附件为官方库Embedded_MotionDriver_5.1。测试的效果如图
    QQ截图20160619094325.png
    不难看出一开始DMP的数据其实变化还是很大的,如果大家有兴趣可以自己用卡尔曼滤波或互补滤波自己对比下效果。
          第三步添加AD采样程序,这里是直接使用了49K和10K的电阻对电池的电压进行了分压采集,AD的程序直接参考了官方的例程,不过通道更换为CH1,去掉了DMA通道,这里只是查询下电压的情况,避免电池放电过低。使用的是红色LED报警加电机停转,当然对APP熟悉的可以使用APP端报警。AD的采样处理为advalue=(float)Get_battery_volt()*5.0/2048*11.7*10/49;因为单片用的5V供电,电池给的基准电压为11.7V,*10/49为电阻的分压。测试的结果如下,完整的代码见附件GD190&IIC&AD。
    QQ截图20160619095841.png
          第四步添加TIMER,给的附件工程分别是PWM输出,PWM输入捕捉和定时器,但是测试直接使用的PWM的输出接PWM的输入,当然可以直接使用示波器查看相应PWM输出结果。给电机的工作频率是20K,这个值的选择和电机以及电机驱动有关的,这里采用的是TB6612,不过一般的电机驱动都支持20K。代码编写我就不多说了,给出的附件有GD190&IIC&AD&PWM和GD190&IIC&AD&PWM-IN。这里采用了寄存器的方式直接读写相关的TIMER通道,如#define PWMA     TIMER2->CHCC3  #define PWMB     TIMER2->CHCC4。测试的结果如下图所示,这里的AD没有接,可以看出counta 和b的两路PWM采集几乎同时增长。
    QQ截图20160619104140.png
          第五步添加蓝牙程序,其实就是一个蓝牙透传模块,使用的是USART1作为通信工具,因为对APP上位机程序不太了解,这里使用的是一个写好了的简单上位机,就是一个将屏幕分为9宫格的数据接收,使用了一个中断作为UART的接收,可以使用接收数据的变化方向,简单的控制小车的开关,如果大家有什么好的上位机,可以一起分享下。详细的工程文件见附件的GD190&IIC&AD&PWM-IN&BLUE。
          最后就是整个代码的数据融合和基本控制,这里给出一个基本的代码模型供大家参考,代码见GD190-test。这里还没有加入上位机程序控制。
          好了,一起来看看硬件吧,如附件图,
















    QQ截图20160619102558.png
    QQ截图20160619102609.png
    QQ截图20160619103335.png

    GD190&IIC&AD&PWM.zip

    3.78 MB, 下载次数: 13

    GD190&IIC&AD&PWM-IN&BLUE.zip

    3.79 MB, 下载次数: 7

    GD190&IIC&AD&PWM-IN.zip

    3.78 MB, 下载次数: 7

    GD190&IIC&AD.zip

    3.78 MB, 下载次数: 6

    GD190&IIC.zip

    3.78 MB, 下载次数: 7

    GD190Template.zip

    3.73 MB, 下载次数: 7

    GD190-test.zip

    3.79 MB, 下载次数: 9

    官方库Embedded_MotionDriver_5.1.zip

    188.98 KB, 下载次数: 17

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-11-15 17:06
  • 签到天数: 30 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-6-20 11:22:35 | 显示全部楼层
    不是安卓,是Arduino
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-6-6 13:23
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2016-6-20 12:28:35 | 显示全部楼层
    跟我念 arduino    啊~~~~对~~~咯~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-7-30 15:17
  • 签到天数: 576 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2016-6-20 13:18:14 | 显示全部楼层
    幸得安然 发表于 2016-6-20 11:22
    不是安卓,是Arduino

    好吧...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-14 10:15
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-6-21 15:14:48 | 显示全部楼层
    这个真给力
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-6-29 09:08:18 | 显示全部楼层
    文章不错,将内容去经验频道一并发一下,可以有双重奖励哟http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-8-13 12:23:21 | 显示全部楼层
    糖悦之果飞 发表于 2016-6-29 09:08
    文章不错,将内容去经验频道一并发一下,可以有双重奖励哟http://jingyan.eeboard.com/ ...

    谢谢,满世界划拉1X0的IIC啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-8-28 11:59
  • 签到天数: 1558 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2016-12-3 10:07:56 | 显示全部楼层
    手工帝,还行
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-22 23:17
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-12-21 21:09:32 | 显示全部楼层
    ginleen 发表于 2016-8-13 12:23
    谢谢,满世界划拉1X0的IIC啊

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-27 09:02
  • 签到天数: 1389 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-12-22 13:15:07 | 显示全部楼层
    谢谢楼主,支持分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-25 09:50 , Processed in 0.220581 second(s), 35 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.