我目前正在从事一个关于“传感器信号数字化”的项目。传感器信号将与ADC数字化,并通过接口(例如USB或以太网)传递给PC。理想情况下,ADC以2兆采样/秒和12位的连续模式工作。持续数字化过程中发生的数据量很可能只能通过以太网来管理。或者,间断记录,每记录5毫秒,暂停45毫秒。
目前我使用的是Nucleo-F429ZI。编程可以通过HAL或Matlab/Simulink完成。Matlab为编程提供了一个合适的GUI,其中包括以太网。然而,GUI并不适用于所有的Nucleo板。不幸的是,不支持F429ZI。
我目前正在考虑如何最好地执行该项目。我想以后也用Matlab来处理数字化的数据。在这方面,在Simulink中进行程序设计是有意义的。为此,我也愿意转到另一个董事会。
我已经有使用Matlab的经验,但在HAL编程方面的经验较少。你能给我什么建议?你还有其他窍门吗?
非常感谢!
发布于 2022-06-14 11:47:03
如果您的ADC以12位分辨率以2MSa/s工作,如果您使用uint16_t存储数据样本,则需要与PC连接4MB/s (或32 12bit /s)。STM32F429有一个用于USB高速的硬件外设,理论上可以达到480 much /s,远远超出了所需的范围。
就我个人而言,我会尝试在VCP (Virtual )模式下使用USB,这是作为一个简单的COM端口在PC中检测到的,就像Arduino或任何具有串口的设备一样,但是速度要快得多。然后可以将数据实时读取到Matlab脚本中,或者将其保存在日志文件中以供进一步处理。
最有效的方法是在双缓冲的DMA模式下启动ADC。当一个缓冲器被ADC+DMA填充时,第二个缓冲器通过USB传输。这给CPU留下了足够的时间来处理数据传输,但是它必须等到整个缓冲区被填满。您可以触发模数转换器转换与定时器,因此采样时间将是一致的,只有数据传输将发生块。
如果你有可能得到的董事会,是兼容的环境,你有经验-绝对去做它。启动USB、ADC、DMA和计时器对那些缺乏低层次编程经验的人来说并不简单。
这一切都取决于你在嵌入式编程方面的个人技能,以及你可以在这个项目上花费的时间。
https://stackoverflow.com/questions/72609339
复制相似问题