df_flying 发表于 2017-6-17 22:29:10

GD450小红板评测&单车智能锁简单方案设计

一、入手简单评测GD450小红板是GigaDevice去年推出的Cortex-M4内核的高端系列MCUGD450测试版,高达200MHz的主频,纵观同系列的M4内核MCU,单从主频上,没几家达到了200MHz,当然这跟众多因素有关,但是,不管怎么说GD这个系列达到了。同时带了的CoreMark的673(官方)高分。不同于常常用来对比的ST系列,GD450不仅在主频上有所提高,其还内置了独立的48MHzUSB专用的振荡器,不仅省略了一颗外置晶振,也更好的解决了USB对时钟的高要求,ST的部分MCU在USB的使用时确实有点不方便!同时GD450提供了两路OTG接口,包括一路高速(High Speed,480Mbps)。
      GD450小红板,依旧使用了GD之前的设计风格,板载的芯片具体型号是GD450VET6,引出了全部I/O,方便用户的设计验证。板载了GD-Link符合CMSIS-DAP下载/调试协议以及一路串口使用了芯片的串口3(PD8和PD9),外置三个用户按键(一个weak Up按键)和三个同色LED。要说给小红板设计一点个人意见,其实可以使用三色(GRB)LED代替独立的同色LED,增加一个USB全速外设接口,再增加一个SPI接口的存储芯片,这样可玩的可能会更多一点,也不失加个传感器?同时建议GD的引脚分布图能够像TI那样给个指导手册?      再来看看资料手册方面,针对该小板GD给了较详细的入手介绍资料,还有keil开发使用的芯片底层安装包,不知道什么时候GD这样的资料能够直接在MDK的官网下载。同时给了一个基于trochili嵌入式OS的example,使用了宏定义划分了不同的例程。没有像ST那样单个例程一个目录,毕竟keil不支持多个工程,使用宏定义也不失为一种解决方式。      好了,关于GD450小红板的介绍到先此为止,更详细的介绍看其官网。
二、简单单车智能锁方案分析      共享单车的出现确实带了极大的方便,本次方案的设计参考的功能是比较完善的小橙的方案,支持远程控制、远程监控、GPS定位、蓝牙控制以及报警等功能。由于本人对电源的设计不太了解,这里就不添加太阳能的电源设计了,使用LED模拟电子锁的打开以及闭合。由于对安卓的APP开发不了,这里的蓝牙数据使用bel tools测试工具模拟,GPRS数据使用本地TCP工具模拟控制。所以标题上也加上了简单方案设计!      根据上述的方案,以下是本次设计的设计框图。                              
三、方案硬件选择及搭建      虽然进入了4G网络时代,5G也快来临了,但是使用时间最长的2G网络并没有消失,同时具有覆盖更广的优点,因为单车的远程控制和监控并不需要太多的数据,同时考虑到成本,所以2G模块还是当前大部分智能锁的首选方案,本方案使用的也是2G模块sim800C。关于sim800C的更多介绍,参考附件sim800C手册介绍。      在国内,北斗的使用越来越多了,支持国货嘛。不过GPS使用量还是很多的,同时GPS的产品更加成熟,这里选用的是常见的GPS模块xxx。关于这两个模块,同类市场上也有较多的方案推出,也有集合GPRS、GPS、蓝牙(主要是蓝牙3.0)等一体的芯片方案,但多是通过AT命令进行通信,所以这里不再去讨论他们的优劣,同时身边也只有这两个模块,所以这里只是用分立模块。      之前也有提及,上述模块支持的更多是蓝牙3.0,通过SPP profile连接通信,也是AT命令和MCU通信。这里选用了TI的蓝牙4.0模块CC2541,直接和手机进行透传。原因很简单,方便!同时。因为本次设计都是选用的模块搭建的,蓝牙也就不例外了。       最后看下传感器的方案吧,传感器在检测非法移动,以及是否停放稳妥等可以检测使用,并结合报警等提示使用,单车上使用的是蜂鸣器提醒,这里直接使用LED替代了。这里选择MPU6050六轴传感器。      电源这里直接使用5v/4A稳压电压,3.3v使用LDO降压使用。      硬件清单:
项目选型接口主要参数
MCUGD450-200M主频
2GSIM800CUART支持四频段
GPSXxxUART精度<5m
传感器MPU6050IIC六轴
蓝牙4.0CC2541UART<1Mb/s
锁开关状态LED(替代)IO-
状态报警LED(替代)IO-
电源外置AC-DC-5V/4A


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

**** Hidden Message *****

df_flying 发表于 2017-6-17 22:54:00

四、软件方案设计      本次设计使用的是FreeRTOS作为嵌入式OS,同时GD450和STM32F4在兼容性上有了较大的优化,为了节省时间,这里将直接使用ST的库作为本次开发的开发库。4.12G模块设计:      1)、2G模块控制设计思路:2G模块采用的是通过AT命令和MCU通信,AT命令的结束符都是“\r\n”,无论是发送还是接收,都会以该结束符结束。串口接收要么是单字符,要么是指定多字符接收(DMA),所以就有两种方案得到本次接收的字符串,一是单字符接收并判断字符是否含有为“\r\n”,如果有,那么结束本次字符串的拼接,并存储,同时指定一个计数器,不是该字符则累加,作为字符串的长度,同时在拼接结束要在字符串的末尾加上'\0'字符作为字符串的结束符。该方法的缺点就是每个接收的字符串都将调用一次中断进行判定。二是利用DMA的循环接收模式,结合DMA的缓冲区,进行实时的接收并在接收的缓冲区进行判定,根源跟上述类似,好处是不再需要那么多中断处理,直接使用子任务处理即可。      2G模块接收子任务软件设计流程图:(这里给出单字符处理流程)
    所以,AT命令发送时,将带有该命令的正确返回值,以及超时时间。如SIM800C的初始化:
各参数:module_check_with_cmd(命令,有效返回值,类型,串口发送延时,命令等待延时)4.2GPS软件设计:       GPS数据格式是符合NMEA-0183协议,数据都是以“$”作为开始符,以“\r\n”作为结束符。数据的处理跟2G还是挺像的,不过这里的处理要简单的多,因为没有数据收发了,直接接收就可以了,下面就接收处理流程,这里处理不足之处就是每过来一个字符将进入中断判断,所以这里将GPS的数据发送频率降低到1Hz以降低中断频率。      GPS模块任务软件流程:
   设计代码:
       其次就是将读取到的字符串,做截取转换处理了。这里根据的就是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”为开头。      处理流程图如下:
    代码如下:

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

lyliuzhiping 发表于 2018-4-17 09:26:51

一直好奇锁是怎么实现的,谢楼主。

lisuo962237 发表于 2018-5-4 06:11:31

就这水平,太low了

venc97 发表于 2018-5-7 09:46:33

看看,学习下。。

green3002 发表于 2018-5-7 11:57:13

不错看看啊啊啊啊啊

raim8888 发表于 2018-6-20 13:49:39

学习下学习下学习下:)

djk0125 发表于 2019-6-1 21:21:42

有点好奇!看看!!!!

yjwpm 发表于 2020-10-31 13:50:56

knakank

zx0922 发表于 2021-7-4 21:06:34

非常详细谢谢
页: [1] 2
查看完整版本: GD450小红板评测&单车智能锁简单方案设计