stm32 ADC学习(补充一:注入组)

一、ADC模数转换器

1)ADC进阶知识(注入组)

  • 注入通道组的优先级高于规则通道组,注入通道组会中断规则通道组中的当前通道
  • 应用场景:电机控制应用中,晶体管切换时会对ADC测量产生噪声影响,转换数据容易出错。结合定时器和注入组,可以在晶体管切换后延时一段时间再进行ADC切换
  • 注入分为自动注入和触发注入,前者会等待当前规则组采样完,后者不等
  • 注入组和规则组都有单独的寄存器
  • 规则组可以在读值之后自动清除标志位,注入组必须手动清除

二、实验

1)开发板实现电机运放偏置电压的采样

  • 采用单次规则采样 ADC1 的 channel0、 channel1,连续触发 256 次,将 channel0、channel1 的 256 次的采样数值取平均值,得到偏置电压。 在得到偏置电压后,将 channel0、channel1 改为注入采样,自动注入采样功能选取任意一个定时器实现;增加 channel2、channel3、channel4的规则采样,采样结果由 DMA 传输。
  • 关键代码:
ADC_InjectedSequencerLengthConfig(ADC1, 2);  //配置注入组长度
ADC_InjectedChannelConfig(ADC1, ADC_Channel_0, 1,ADC_SampleTime_55Cycles5); //配置注入通道
ADC_InjectedChannelConfig(ADC1, ADC_Channel_1, 2,ADC_SampleTime_55Cycles5);
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T2_TRGO);  //配置注入由TIM2计时器触发
ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE); //使能硬件触发注入
ADC_AutoInjectedConvCmd(ADC1, DISABLE); //在规则组运行后自动开启注入组,这个一般不要开

TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); //计时器配置硬件触发模式

ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1); //获取注入组值
ADC_ClearFlag(ADC1, ADC_FLAG_JEOC); //清除注入组标志位,要手动清除

在这里插入图片描述

  • 实现代码见资源绑定

附学习参考网址

  1. STM32入门教程-2023版 细致讲解 中文字幕
  2. ADC多通道注入组教学
  3. STM32 ADC寄存器1 :ADC_ISR 控制寄存器-CSDN博客

欢迎大家有问题评论交流 (* ^ ω ^)

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐