查看: 1003|回复: 7

[GD32F190方案分享] GD190的自平衡小车方案分享

[复制链接]

2

主题

1

好友

889

积分

举人

Rank: 4

  • TA的每日心情
    擦汗
    昨天 09:25
  • 签到天数: 184 天

    [LV.7]常住居民III

    发表于 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, 下载次数: 9

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

    3.79 MB, 下载次数: 4

    GD190&IIC&AD&PWM-IN.zip

    3.78 MB, 下载次数: 4

    GD190&IIC&AD.zip

    3.78 MB, 下载次数: 4

    GD190&IIC.zip

    3.78 MB, 下载次数: 4

    GD190Template.zip

    3.73 MB, 下载次数: 4

    GD190-test.zip

    3.79 MB, 下载次数: 5

    官方库Embedded_MotionDriver_5.1.zip

    188.98 KB, 下载次数: 14

    回复

    使用道具 举报

    42

    主题

    8

    好友

    3511

    积分

    超级版主

    Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2016-11-22 15:46
  • 签到天数: 27 天

    [LV.4]偶尔看看III

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

    使用道具 举报

    3

    主题

    0

    好友

    238

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    开心
    2016-10-25 14:09
  • 签到天数: 5 天

    [LV.2]偶尔看看I

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

    使用道具 举报

    2

    主题

    1

    好友

    889

    积分

    举人

    Rank: 4

  • TA的每日心情
    擦汗
    昨天 09:25
  • 签到天数: 184 天

    [LV.7]常住居民III

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

    好吧...
    回复

    使用道具 举报

    12

    主题

    0

    好友

    575

    积分

    版主

    Rank: 7Rank: 7Rank: 7

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

    [LV.2]偶尔看看I

    发表于 2016-6-21 15:14:48 |显示全部楼层
    这个真给力
    eeboard大力支持的开源RTOS -- Trochili RTOS
    回复

    使用道具 举报

    195

    主题

    3

    好友

    9635

    积分

    超级版主

    Rank: 8Rank: 8

    该用户从未签到

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

    使用道具 举报

    0

    主题

    0

    好友

    7

    积分

    白丁

    Rank: 1

    该用户从未签到

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

    谢谢,满世界划拉1X0的IIC啊
    回复

    使用道具 举报

    1

    主题

    11

    好友

    3619

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    奋斗
    昨天 11:41
  • 签到天数: 789 天

    [LV.10]以坛为家III

    发表于 4 天前 |显示全部楼层
    手工帝,还行
    hjq
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-7 00:05 , Processed in 0.153162 second(s), 17 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部