本题要求实现波形的采集于重放,采样率达到10Msps,且要求双通道同时采集和显示,经简单计算可知,如果要完整传输10Msps采样的信号数据,及时8bit的采样深度,对带宽要求也要至少16MBytes/s,超过100Mbps以太网的上限,大量输出传输对MCU的算力也不能满足要求,所以直接传输数据是不现实的.
因此我们采用了类似示波器的采集方案,即连续采样+DMA缓存+波形识别+传输显示的技术。通过识别波形的上升沿,作为信号的触发点,直到采集到第二个触发点,将两个触发点中间的数据作为一段有效波形数据,进行打包传输到显示终端。
显示终端根据收到的波形数据,填充到波形发生器里,并触发DMA循环模式,让DAC循环播放该段信号,从而在示波器上显示出连续的波形。
本题目基于三块STM32F767开发板进行制作,代码基于官方提供示例“LwIP_HTTP_Server_Netconn_RTOS”,示例代码提供了基本的以太网底层驱动和LWIP协议栈,直接实现ADC数据采集、DAC信号还原即可。
ADC使用的是STM32F7内置的ADC,虽然官方标称这个ADC的采样率不到4M,但是实测可以超频到10M且很稳定。
DAC使用的也是内置DAC,F6相比F1的DAC提升很多,而且带有输出缓冲器,可以显著提升信号的驱动力,同样可以超频到10M的输出刷新率,但是由于DAC输出电路的压拜率有限,实际输出带宽大约是1M左右,超过1M速率,波形幅值会衰减超过3db,但是应对几百K的信号还是很轻松复原的。
ADC和DAC均使用DMA进行连续输出,确保波形的连续性。代码均可以参考官方例程“ADC_DMA_Transfer”“DAC_GenerateWaveform_TriggerHW”。
视频演示:https://www.bilibili.com/video/BV1w4411Q7k2/
E题方案具体实现步骤:
1、安装keil 5.2以上的开发环境
Keil.STM32F7xx_DFP.2.9.0.pack 打上固件库的安装包 必须是2.9版本的库
链接: https://pan.baidu.com/s/1s4qePuD0DS4fiQ-LIMKHQQ 提取码: rytw
官网:https://www.keil.com/dd2/pack/
2、LwIP.7z 压缩包解压到目录下 必须是这个目录
\Keil_v5\ARM\Pack\Keil\STM32F7xx_DFP\2.9.0\Projects\STM32F767ZI-Nucleo\Applications\LwIP
- 分别烧录三个固件Palyback、sample1、sample2
其中:Sample做采样、playback回放数据
网络拓扑:
接线
上图可以直接调试,
由于题目要求电压是1-5V,输出信号也要到5V,因此需要额外加分压和放大
上电、接好线、开启信号源后,等1、2秒钟,就可以在示波器上看到回放信号
板上PA4的针脚
电脑也接入交换机,ip设置成192.168.0.5
分别ping 192.168.0.1和192.168.0.10、192.168.0.11 能ping通说明正常工作
设置信号源offset 1.5V 幅值3V,频率100K任意波形 接入到sample的PA4脚上,等一下应该能看到playback上输出波形
把playback板上的PE5接地和悬空对应两个通道,悬空显示sample1 接地显示sample2
如果信号出现毛刺,问题一般在采样那边,信号传输要用同轴线,接到单片机上的杜邦线尽量短,实在不行可以在PA4引脚上对GND焊一个1nf左右小电容
分压电阻
5V信号分压成2.5V输入单片机
输出负载放大电路
按照此图设计一个2倍的同相比例放大器电路
如果输出电阻是需要电路上串联一个50R电阻,则运放电源电压要提升到12V~15左右,放大4倍,才能在负载的50R电阻上采到5V信号。
写在最后:虽然电赛延期,举办时间待定,但是也给了大家更多的准备时间,尝试各种方向,想必今年的国一竞争会更加激烈,我也会在这段时间内发布一些模拟押题的方向,帮大家一起备赛.
加QQ群879225223 电赛交流答疑,获取项目工程源码