深入ADC采样

同步采样

需要同时采集多个信号怎么办,有没有一种方式可以让两个ADC同时开始转换,同时得到采样信息,这样的采样能更好的固定信号的相位差异
有的,兄弟有的
请看同步采样

同步采样的简单实现

基于一个ADC采集交流信号,TIM同时触发两个ADC进行采样

graph LR A[TIM] -->|TRGO触发|B[ADC1] A --> |TRGO触发|C[ADC2]

学习文章

同步采样的一般实现

ADC配置

ADC_Mode

  1. Independent mode 独立模式
  2. 双ADC模式
  • Dual Combined regular simultaneous mode
    同步规则组模式:两个ADC同步采样同一个规则通道(常用于差分输入或提高采样精度)
  • Dual Combined interleaved mode
    交叉模式:两个ADC交替采样同一个规则通道(ADC1转换时ADC2采样下一数据,实现单通道采样率翻倍)
  • Dual Combined alternate trigger mode
    交替触发模式:两个ADC轮流响应同一个触发信号(每次触发仅启动一个ADC,提高触发资源利用率)
  • Dual Combined injected simultaneous mode
    同步注入组模式:两个ADC同步采样同一个注入通道
  • Dual Injected simultaneous only mode
    仅注入组同步模式:只有注入通道使用同步模式,规则通道仍各自独立工作
  • Dual Regular simultaneous + injected simultaneous mode
    规则通道和注入通道都使用同步模式
  • Dual Interleaved + injected simultaneous mode
    规则通道使用交替模式(追求极高采样率),注入通道使用同步模式

学习文章

同步采样
请先食用上述主食再继续以下的饭后甜点
文中将ADC配置为双ADC规则同步模式。在这种模式下,ADC1和ADC2同时采样不同的通道(但使用同一个触发),然后将两个结果合并成一个32位数据(ADC1在低16位,ADC2在高16位)
ADC1 扫描通道CH0,CH1,CH2和CH3
ADC2 扫描通道CH4
双ADC同步模式下的转换过程
在双ADC规则同步模式下,每次触发(软件触发)会同时启动ADC1和ADC2的转换。转换规则如下:

  1. 第一次触发:
    • ADC1转换Rank1(Channel0,PA0)
    • ADC2同时转换Rank1(Channel4,PA4)
      转换完成后,数据组合成一个32位数据:
    • 低16位:ADC1的转换结果(PA0)
    • 高16位:ADC2的转换结果(PA4)
      这个32位数据被DMA传输到内存数组的第一个元素(ADC_result[0])。
  2. 第二次触发:
    • ADC1转换Rank2(Channel1,PA1)
    • ADC2同时转换Rank2(Channel4,PA4)-> 再次采样PA4
      转换结果组合后存入ADC_result[1]:
    • 低16位:ADC1结果(PA1)
    • 高16位:ADC2结果(PA4)
  3. 第三次触发:
    • ADC1转换Rank3(Channel2,PA2)
    • ADC2转换Rank3(Channel4,PA4)-> 再次采样PA4
      存入ADC_result[2]。
  4. 第四次触发:
    • ADC1转换Rank4(Channel3,PA3)
    • ADC2转换Rank4(Channel4,PA4)-> 再次采样PA4
      存入ADC_result[3]。
  5. 由于配置了连续转换模式,且DMA为循环模式,上述过程会不断重复。
*************这样的检验方式属于作者的别出心裁,希望不要再有其他兄弟纠结在这里*****************

ADC与DMA

  • 在多通道中,我们设置ADC为扫描,这样的设置会使得ADC会不断扫描所有的规则组通道,转换的结果会都会储存在ADC转换
    寄存器中,后一个转换结果覆盖前一个转换结果,所以不能直接读取寄存器。
    一个好的办法是使用DMA(normal模式即可),ADC转换完成,ADC状态寄存器修改,DMA开始搬运,保存每次转换结果。

  • 同步采样中我们还设置ADC为连续转换,当ADC规则组通道全部转换完成,ADC会返回转换第一个通道,循环往复
    此时,我们的DMA也要配置为循环模式,不断覆盖之前的采样值。
    ADC设置连续模式时,ADC的触发方式应该设置为软件触发,结束一次转换后会重新转换。
    再之前的例子中博主直接设置扫描和连续转换,实属于一步到位了
    具体调用函数

采样方法

  • 多通道扫描 + 连续转换 + DMA循环模式
  • 单通道 + 连续转换 + DMA循环模式
  • 多通道扫描 + 单次转换 + DMA普通模式

超频采样

简单做个锚点,我向来不是极端玩家
等有需要再用

再谈ADC采样精度

在之前的文章中,我提到ADC的精度和其12位的设计有关,
因为电压的不确定,所以其有效位只是8-9位,也就是说,
有15(0000 0000 1111)是无效的,15*3.3/4096 = 0.012084
,即0.02V的误差
这只是很简单的理解,详情点击
那么如何提高其精度呢?(坑+1,待俺再学学)

posted @ 2025-07-28 16:36  loong2525  阅读(164)  评论(0)    收藏  举报