文档介绍:STM32的ADC采样
难点:如何确定采样周期?如何配置相关寄存器??
一、基本概念:ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期STM32的ADC采样
难点:如何确定采样周期?如何配置相关寄存器??
一、基本概念:ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期一般来说=转换时间+读取时间。而转换时间=采样时间+。采样时间是你通过寄存器告诉stm32采样模拟量的时间,设置越长越精确。
STM32的ADC模块各个通道对应的IO
(注意:STM32F103系列最少都拥有2个ADC,STM32F103ZET6包含有3个ADC,STM32F103ZET6内部集成了12位的逐次逼近型模拟数字转换器,它有多大18个通道,可测量16个外部和2个内部信号源。)
二、规则组和注入组
STM32的ADC通道分为规则组和注入组。因为ADC转换模块只有一个ADC功能核心,它能够支持这么多通道的数据转换,用的是分时复用的方法。分组的目的是为了赋予特定的ADC通道优先权。
比如,ADCx_IN2被分配到规则组,ADCx_IN3被分配到注入组,在IN2通道进行数据转换的过程中,外部信号触发了IN3通道的转换,则ADC功能核心将暂停IN2的转换,转去执行IN3的转换,完成转换后在回来执行IN2的转换。由此可知,注入组的通道具有优先转换权,可以打断规则组通道正在进行的转换。
三、STM32ADC采样频率的确定
①、可编程的通道采样时间
ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过
ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位而更改。每个通道可以以
不同的时间采样。
总转换时间如下计算:
TCONV=采样时间+
例如:
当ADCCLK=
TCONV=+=14周期=1μs
?
原子哥告诉我,ST固定死了的,咱们不用关心。
②、具体分析如下:
(1)我们的输入信号是50Hz (周期为20ms),初步定为1周期200个采样点,(注:一周期最少采20个点,即采样率最少为1k),每2个采样点间隔为 20ms/200=100us
ADC可编程的通道采样时间我们选最小的  周期,则 ADC采样周期一周期大小为
100us/=66us 。 ADC 时钟频率为 1/66us=15KHz。
   周期,则 ADC采样周期一周期大小为
(100us/)。 ADC 时钟频率为 。
 
(2)接下来我们要确定系统时钟:我们用的是 8MHz 的外部晶振做时钟源(HSE),估计得经过 PLL倍频 PLL 倍频系数分别为2的整数倍,最大72MHz。为了提高数据计算效率,我们把系统时钟定为72MHz,(PLL9倍频)。则PCLK2=72MHz,PCLK1=36MHz;
 
我们通过设置时钟配置寄存器(RCC_CFGR) 中 有