大连海港 发表于 2017-5-2 10:25:12

如何使用STM32存储激光雷达串口每秒钟发送上来的4000个数

1、问题描述现在实验室正在做使用激光雷达避障,希望大神多指点。激光雷达通过串口和STM32通信,每秒钟传送4000次数据(相当于雷达的工作频率为4000HZ),每次数据包含距离和角度数值,我怎么将这4000个数据进行存储,并且实时更新,可以覆盖上一个4000,一个周期存储完成后还能够实时读取,以此获取障碍物2D尺寸轮廓,用EEPROM?EEPROM的内存只有2kb,是不是不够用啊?用FLASH?用SD卡吗?求大神指点2、试解决方法(自己想的,不知道对错,希望得到指点)选用STM32F429,RAM256K,我定义两个全局变量floatdistance【4000】;float angle【4000】,这样数据的大小为:4个字节*2*4000=32K;串口波特率设置成115200,用DMA发送 、保存;如果我想使用这些数据,设置一个定时中断,随时对这4000个角度和距离进行判断,决定小车如何转向,如何避障

watershade 发表于 2017-5-3 17:13:50

你这个情况,很具有挑战性,但是希望和你讨论一下。下面按照我的理解说。(如果有错,大家指正)
1、我们假定用串口那你一次的数据假定不包含包头包尾,也不包含校验码和帧ID。这种情况下每秒的数据量有多大呐?float是四个字节,每个字节8位。所以是4000*8*(4+4)=256000。而你说的115200,不好意思,干不了。但是既然你的激光雷达敢给这么高的输出速率,我们也只好迎难而上。按照你的情况,为了保证数据的准确度和有效性,以上几种(包头,包尾,校验码,帧ID)都需要包含。我们还是尽量短一些吧,但是帧ID这里用两个字节,其余各一个。(或者两个包头,不要包尾)。我们每组数据是4+4+5=13.为了稳定性,我们假定有50%的负载率。这时你的波特率是:4000*8*13 = 416000.那就选择460800(115200的四倍)吧。
2、再说数据存储,楼上有位兄弟推荐用SDRAM。这是一个方法。但是你只需要32K,而且按照我对机器人导航的理解,这个数据根本不需要存储.这个数据量F429可以搞定,因为429的RAM是256K。正常情况下,应该可以在RAM中保存你这32K的数据。而且这也是最快的方案。
3、我们在从方案上说一下。你给我们花了一个道。说1秒钟寸4000个,算一个周期。每个周期数据可以更新一次。但是呐,我对你这条道路有点疑问。Why we should do like this?
正常情况下,激光导航的确需要大量数据。但是数据是被吃进去直接消化掉的。就是说你每次的数据去feed我的算法,我迭代这去处理。根本没必要大量存储。销量存储倒是有可能。比如我每40个数做个处理。但是1S种存储的所有数去处理然后一股脑feed给算法。这似乎不正确。也许你们有其它用途。

以上是我的拙见。请赐教

Dandjinh 发表于 2017-5-2 16:22:12

这种速率的串口不可靠,用SPI吧,有SPI转USB的芯片的

zhao.zhao 发表于 2017-5-3 10:20:22

串口够呛,数据量太大了,楼上的朋友是正解

大连海港 发表于 2017-5-3 13:50:16

Dandjinh 发表于 2017-5-2 16:22
这种速率的串口不可靠,用SPI吧,有SPI转USB的芯片的

管脚 功能 颜色 说明
1 +12V±20% 红色 直流电源正极
2 GND 白色 电源地
3 TTL GND 黑色 和电源地机内连通
4 TTL Tx 绿色 TTL Tx
5 TTL Rx 黄色 TTL Rx

雷达引脚是这样的,应该只能用串口吧?

大连海港 发表于 2017-5-3 13:50:51

zhao.zhao 发表于 2017-5-3 10:20
串口够呛,数据量太大了,楼上的朋友是正解

管脚 功能 颜色 说明
1 +12V±20% 红色 直流电源正极
2 GND 白色 电源地
3 TTL GND 黑色 和电源地机内连通
4 TTL Tx 绿色 TTL Tx
5 TTL Rx 黄色 TTL Rx

雷达接口是这样的,应该只能用串口吧?

whtt 发表于 2017-5-3 14:53:49

用429就加个256Mbit的SDRAM

大连海港 发表于 2017-5-3 15:23:11

whtt 发表于 2017-5-3 14:53
用429就加个256Mbit的SDRAM

需要加这么大的内存吗?如果按照我的计算,32K就够用了吧,您能解释一下加256Mbit的SDRAM的原因吗?谢谢

wofei1314 发表于 2017-5-3 15:43:20

这个一般还用不上429,一秒4000字节数据量也不算非常大,115200的波特率每秒约传11520字节,如果距离够短,还可以提升波特率,这样传输的时间短,使用DMA接收;可以扩展一个SRAM临时存储数据;掉电保存的话还是用Flash吧,经济

jcx0324 发表于 2017-5-3 15:46:14

芯片自身带的RAM都够了,根本没必要那么复杂,串口可以最高跑到好几M呢,主要看你的线路
页: [1] 2 3
查看完整版本: 如何使用STM32存储激光雷达串口每秒钟发送上来的4000个数