
捕获5KHZ频率的正弦波,使用的是100khz定时器2溢出事件触发ADC采样,采样144cyc,使用DMA方式传输ADC采样数据(软件触发和连续采样都试过没有对波形产生帮助)。之后通过高速USB带内置PHY功能的模拟串口通信把数据上报。上报方式是每次adc采样存下一个点,累计达到1000个点进行一次HS上报。 上位机最好收到的波形如下: 之前通过标准的信号发生器输出1khz正弦波也会存在这样的波形,测试固定数据USB上报不存在数据丢失问题。请问是ADC采样存在数据丢失问题吗?要如何改进?还是数据上报和ADC采集有冲突? |
stm32F723ZET6使用ADC捕获正弦波,adc采样频率过高导致主函数无法运行,要怎么优化?
stm32cubemax
stm32cubemax
ADC差分采样
STM32H745启动与烧录问题
STM32G0b1 USB device cdc显示设备描述符请求失败
STM32CUBEMX最新版本6.14.1出现BUG
请问 cubemx 有计划支持生成基于 ATfE 编译器的 cmake 项目吗
设置RDP等级为2的同时,有什么办法可以确保后续还能够烧录程序
工程移植都有哪些需要注意的地方?
1、先用示波器查看ADC采样引脚上波形是否如图所示;
2、再把频率降低一点是否有改善,这样去排除一下是否是软件问题
你说采样时钟144cyc,不知你单指ADC的采样时间还是包含了转换时间,总之,总的转换时间要保证短于定时器的触发周期。
这个地方是TIMER的定期触发频率决定了最终采样频率。将这里的几个数据确认好。
我不知你的ADC时钟到底是多少,假设是27MHz,总转换时间在140~160cycle的话,TIMER以100KHz频率
触发采样的话,参数方面应该没什么问题。
你可以考虑在ADC采样通道前加一个低通滤波,截止频率可以设置得比5KHz稍高点,比方设置在6K~7Khz。
再就是要保证每次的数据都及时拿走了,这点也很重要。
ADC采样频率是54Mhz,应该足够定时器进行采样,之后通过中断方式从DMA中取得数据,应该也不存在取不到数据,但是怀疑USB上报的时候占用cpu资源,导致ADC采样不全,会有这个可能吗?
[md]示波器上看到的都是完整的正弦波,软件里面发现ADC捕获的数据确实存在不符合正弦曲线的特异点。
[md]把USB关掉,ADC采集完数据之后,把数据通过串口直接发出来,然后再EXCEL表格拉一下
是个好建议。
可以这样先行验证一下。
[md]现在ADC的触发及工作不会被别人影响,DMA的搬运的话,除非你系统很繁忙,尤其在用DMA传输通道多时,不然应该也不会受到影响。
USB传输及处理可能会影响DMA中断的响应及处理,但这个影响我认为应该发生在DMA又搬完一批数据了,CPU还没有机会来处理,新的数据搬运又开始了。
这点你可以自己评估一下。必要的话,可以考虑使用DMA双缓冲模式。
试验过发现是USB上报的时候把ADC的采集工作打断了,导致有一小部分的波形未采集到,有什么方法解决这个问题吗?我目前是在ADC采集完成的回调函数中进行USB上报数据的工作,怎么把两者分开独立工作?
试验过发现是USB上报的时候把ADC的采集工作打断了,导致有一小部分的波形未采集到,有什么方法解决这个问题吗?我目前是在ADC采集完成的回调函数中进行USB上报数据的工作,怎么把两者分开独立工作?
[md]我认为你可以将采样率降低点,这样每次传输的数据可以降下来,可以减少USB处理时间;
还有,DMA可以采用双缓冲模式;
你说采集完成后采集完成后才上传数据,此时何不暂停ADC呢,等数据上传完成后再来重启ADC的采集呢?
[md]功能要求的实时性很高,需要能捕获到每一个正弦波。我把ADC的数据放到dma中断里面都会被USB打断,因为我采集1000个点,每次都在两次上报之间出现数据丢失的问题,已经把USB的中断优先级降低到4了,DMA和ADC都是0,但依旧出现丢失数据的情况。
现在正在采用串口DMA方式传输,看看能不能解决问题