查看: 615|回复: 2

[GD32F450方案分享] GD450小红板评测&单车智能锁简单方案设计

[复制链接]

3

主题

1

好友

1736

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    擦汗
    前天 16:33
  • 签到天数: 302 天

    连续签到: 3 天

    [LV.8]以坛为家I

    发表于 2017-6-17 22:29:10 |显示全部楼层
    本帖最后由 df_flying 于 2017-6-19 08:58 编辑

    一、入手简单评测
    GD450小红板是GigaDevice去年推出的Cortex-M4内核的高端系列MCUGD450测试版,高达200MHz的主频,纵观同系列的M4内核MCU,单从主频上,没几家达到了200MHz,当然这跟众多因素有关,但是,不管怎么说GD这个系列达到了。同时带了的CoreMark的673(官方)高分。不同于常常用来对比的ST系列,GD450不仅在主频上有所提高,其还内置了独立的48MHzUSB专用的振荡器,不仅省略了一颗外置晶振,也更好的解决了USB对时钟的高要求,ST的部分MCU在USB的使用时确实有点不方便!同时GD450提供了两路OTG接口,包括一路高速(High Speed,480Mbps)。
    001.png

          GD450小红板,依旧使用了GD之前的设计风格,板载的芯片具体型号是GD450VET6,引出了全部I/O,方便用户的设计验证。板载了GD-Link符合CMSIS-DAP下载/调试协议以及一路串口使用了芯片的串口3PD8PD9),外置三个用户按键(一个weak Up按键)和三个同色LED。要说给小红板设计一点个人意见,其实可以使用三色(GRBLED代替独立的同色LED,增加一个USB全速外设接口,再增加一个SPI接口的存储芯片,这样可玩的可能会更多一点,也不失加个传感器?同时建议GD的引脚分布图能够像TI那样给个指导手册?
          再来看看资料手册方面,针对该小板GD给了较详细的入手介绍资料,还有keil开发使用的芯片底层安装包,不知道什么时候GD这样的资料能够直接在MDK的官网下载。同时给了一个基于trochili嵌入式OSexample,使用了宏定义划分了不同的例程。没有像ST那样单个例程一个目录,毕竟keil不支持多个工程,使用宏定义也不失为一种解决方式。
          好了,关于GD450小红板的介绍到先此为止,更详细的介绍看其官网。
    二、简单单车智能锁方案分析
          共享单车的出现确实带了极大的方便,本次方案的设计参考的功能是比较完善的小橙的方案,支持远程控制、远程监控、GPS定位、蓝牙控制以及报警等功能。由于本人对电源的设计不太了解,这里就不添加太阳能的电源设计了,使用LED模拟电子锁的打开以及闭合。由于对安卓的APP开发不了,这里的蓝牙数据使用bel tools测试工具模拟,GPRS数据使用本地TCP工具模拟控制。所以标题上也加上了简单方案设计!
          根据上述的方案,以下是本次设计的设计框图。
                                   002.png

    三、方案硬件选择及搭建
          虽然进入了4G网络时代,5G也快来临了,但是使用时间最长的2G网络并没有消失,同时具有覆盖更广的优点,因为单车的远程控制和监控并不需要太多的数据,同时考虑到成本,所以2G模块还是当前大部分智能锁的首选方案,本方案使用的也是2G模块sim800C。关于sim800C的更多介绍,参考附件sim800C手册介绍。
          在国内,北斗的使用越来越多了,支持国货嘛。不过GPS使用量还是很多的,同时GPS的产品更加成熟,这里选用的是常见的GPS模块xxx。关于这两个模块,同类市场上也有较多的方案推出,也有集合GPRSGPS、蓝牙(主要是蓝牙3.0)等一体的芯片方案,但多是通过AT命令进行通信,所以这里不再去讨论他们的优劣,同时身边也只有这两个模块,所以这里只是用分立模块。
          之前也有提及,上述模块支持的更多是蓝牙3.0,通过SPP profile连接通信,也是AT命令和MCU通信。这里选用了TI的蓝牙4.0模块CC2541,直接和手机进行透传。原因很简单,方便!同时。因为本次设计都是选用的模块搭建的,蓝牙也就不例外了。
           最后看下传感器的方案吧,传感器在检测非法移动,以及是否停放稳妥等可以检测使用,并结合报警等提示使用,单车上使用的是蜂鸣器提醒,这里直接使用LED替代了。这里选择MPU6050六轴传感器。
          电源这里直接使用5v/4A稳压电压,3.3v使用LDO降压使用。
          硬件清单:
      
    项目
      
    选型
    接口
    主要参数
    MCU
    GD450
    -
    200M主频
    2G
    SIM800C
    UART
    支持四频段
    GPS
    Xxx
    UART
    精度<5m
    传感器
    MPU6050
    IIC
    六轴
    蓝牙4.0
    CC2541
    UART
    <1Mb/s
    锁开关状态
    LED(替代)
    IO
    -
    状态报警
    LED(替代)
    IO
    -
    电源
    外置AC-DC
    -
    5V/4A


        组成照:
        为了方便验证,这里直接选用各个模块,通过杜邦线连接了。
    003.png



    GPRS模块调试,新花生壳 内网 (详细版).pdf

    551.51 KB, 下载次数: 1

    GPS说明书.pdf

    1.19 MB, 下载次数: 0

    SIM800W-AT命令介绍.pdf

    358.19 KB, 下载次数: 0

    SIM800系列_TCPIP_应用文档_V1.01.pdf

    588.73 KB, 下载次数: 0

    回复

    使用道具 举报

    3

    主题

    1

    好友

    1736

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    擦汗
    前天 16:33
  • 签到天数: 302 天

    连续签到: 3 天

    [LV.8]以坛为家I

    发表于 2017-6-17 22:54:00 |显示全部楼层
    四、软件方案设计
          本次设计使用的是FreeRTOS作为嵌入式OS,同时GD450STM32F4在兼容性上有了较大的优化,为了节省时间,这里将直接使用ST的库作为本次开发的开发库。
    4.1  2G模块设计:
          1)、2G模块控制设计思路:2G模块采用的是通过AT命令和MCU通信,AT命令的结束符都是“\r\n”,无论是发送还是接收,都会以该结束符结束。串口接收要么是单字符,要么是指定多字符接收(DMA),所以就有两种方案得到本次接收的字符串,一是单字符接收并判断字符是否含有为“\r\n”,如果有,那么结束本次字符串的拼接,并存储,同时指定一个计数器,不是该字符则累加,作为字符串的长度,同时在拼接结束要在字符串的末尾加上'\0'字符作为字符串的结束符。该方法的缺点就是每个接收的字符串都将调用一次中断进行判定。二是利用DMA的循环接收模式,结合DMA的缓冲区,进行实时的接收并在接收的缓冲区进行判定,根源跟上述类似,好处是不再需要那么多中断处理,直接使用子任务处理即可。
          2G模块接收子任务软件设计流程图:(这里给出单字符处理流程)
    004.png

        所以,AT命令发送时,将带有该命令的正确返回值,以及超时时间。如SIM800C的初始化:
    005.png

    各参数:module_check_with_cmd(命令,有效返回值,类型,串口发送延时,命令等待延时)
    4.2  GPS软件设计:
          GPS数据格式是符合NMEA-0183协议,数据都是以“$”作为开始符,以“\r\n”作为结束符。数据的处理跟2G还是挺像的,不过这里的处理要简单的多,因为没有数据收发了,直接接收就可以了,下面就接收处理流程,这里处理不足之处就是每过来一个字符将进入中断判断,所以这里将GPS的数据发送频率降低到1Hz以降低中断频率。
          GPS模块任务软件流程:
    006.png

       设计代码:
    007.png

           其次就是将读取到的字符串,做截取转换处理了。这里根据的就是NMEA-0183协议,利用‘,’将各个字段进行分割,对各字段进行数据或字符的转换。分割的方法有很多,如:    首先根据GPGLL所在字符串的字段6判断定位状态是否有效。再根据‘,’利用strstr函数取得各个字符串的所在字段的首尾位置,截取后再转换为对应的有效数据或字符即可。NMEA-0183协议见附件。
    4.3 蓝牙软件设计:
          使用的是蓝牙透传模块,这里的通信协议相比较之前的AT命令,灵活性就大的多了。可能有人也会说这个模块不也使用AT吗?确实,这里的AT只是用于配置,一旦跟手机连接上,则进入透传模式,此时你再发“AT”,则直接发送到手机端了。所以这里的协议一般都是根据自己需要,自己定义。那么怎么知道蓝牙有没有连接上呢?一般蓝牙模块都有个状态LED用于判断是否连接上,在TI的蓝牙协议栈中,这个设置其实也比较简单的,同时部分蓝牙模块也提供了一个IO口状态翻转,可以使用中断方便通知MCU是否已经连接上。
          由于使用的蓝牙模块,没有外置IO引脚可以通知MCU蓝牙是否已经连接,这里使用AT命令周期去测试蓝牙模块,这里规定如果手机端接收到“AT\r\n”命令后,返回该命令则表示蓝牙连接正常,若果MCU端返回时是“OK\r\n”,则表示蓝牙已经断开,进入了AT命令模式。同时根据蓝牙4.0协议,这里规定一旦蓝牙连接上,则每次收发双方的数据个数规定为20个字节,同时规定下位机发送的以字节“0xFB,0xFB”位开头,上位机发送以“0xAB,0xAB”为开头。
          处理流程图如下:
    008.png

        代码如下:
    009.png

    其次就是收发数据的协议定义,篇幅有限这里不再详细介绍数据间的处理情况。
    4.4 传感器软件设计:
        MPU6050的数据处理各个网站介绍的比较多了,这里就不在介绍他们的数据合成和转换了,这里对数据的处理知识简单的实现几个停车状态的判断,并没有对骑行等运动状态进行判断。


    回复

    使用道具 举报

    3

    主题

    1

    好友

    1736

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    擦汗
    前天 16:33
  • 签到天数: 302 天

    连续签到: 3 天

    [LV.8]以坛为家I

    发表于 2017-6-17 22:54:01 |显示全部楼层
    本帖最后由 df_flying 于 2017-6-18 09:28 编辑

    五、调试测试
          5.1、蓝牙测试
    这里直接通过蓝牙工具bletools进行测试,简单规定收到的第三个字节为“0x01”时打开锁,并通过一个外部按键中断表示锁已经完成手动关锁的举动。这里为了方便蓝牙的调试,将蓝牙从手机端接收到的有效信息,返回给了手机端。
    010.png

          5.2、GPS测试:
          这里将从GPS中得到以下数据,主要就是解析了一个$GxGGA包里面的信息。这里为了个人隐私,对所有的信息进行了加权处理。所以显示的并非本人具体位置
    011.png

        这里通过蓝牙传送以及串口打印实现GPS数据的测试:蓝牙传输依旧使用“0xFB0xFB”作为发送头,同时规定对经纬度等数据经行放大处理为整数,发送时高位在前,低位在后。不足部分使用0xFF替代,当然这里将时间和其他信息分开发送,用第三个字节“0x01”代表时间,“0x02”代表位置信息。这里的年月日信息将会在下面的2G模块中使用“AT+CCLK?”命令得到,得到的格式就是“xx/xx/xx,yy:yy:yy+yy”。这里经过测试会发现GPS的时间要比2G的延时要低,所以这里时间使用GPS时间。(格林威治时间+8
    012.png

          5.3、2G测试
          2G模块通过TCP连接至服务器,将运行的相关信息发送到后台,其中包含的数据可以有实时的GPS信息,运动传感器的状态信息等。同时需要执行由手机APP端通过后台发送过来的解锁命令。这里由于个人没有服务器后端,加上所使用的IP是经过N次分配的随机地址,所以这里每次开机就会变一下IP,即使使用花生壳工具,每次测试都需要绑定一个6块钱的“免费”域名!同时还真的不太好使。
    013.png

          2G数据的上传也是需要协议进行包装的,这个是需要跟后台建立联系的。这里简单的给出数据发送的流程图。具体就不在测试了。
    下面给出连接的信息流程图功大家参考:
    014.png

    六、小结
            由于时间关系,没有花太多的时间去分析GD的函数库,本次软件的实现使用了GD兼容的ST的函数库,也间接的验证了GDST的兼容性。同时在软件中并没有加入电源控制、睡眠控制等节能措施和本地存储的相关功能,只是简单验证了各个模块通信的功能。
          其实,部分智能单车的功能并不需要GD450这样的高端MCUGD家族中的M3系列(高达120MHZ)基本都能够胜任大部分单车的功能需要,相比ST,除了价格上的优势外,在主频速率上也有较大的优势。虽然在低功耗上面可能还有不足,但在综合功耗方面也是有不错的表现。
    至此,本次小红板GD450的使用分享到此为止,后面还有较多的功能需要添加,比如单车中对电源要求最高的模块应该是2G模块了,瞬时电流要求有点高,所以会有低温下电池放电性能的降低会而带来部分无法正常解锁等问题。这里完整工程就不上传了(项目还在测试中),感兴趣的结合底层的介绍,相信应该能够自己探索出更多玩法。用到的部分资料见附件。
           附件见1楼。
    回复

    使用道具 举报

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

    关闭

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

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

    GMT+8, 2017-7-26 06:33 , Processed in 0.232222 second(s), 13 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部