1.ADC
STM32f103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3根据CPU 引脚的不同通道数也不同,一般都有8个外部通道。
项目中需要采样的电压需要11个通道,包括8个温度采样通道,1个参考电压采样通道,一个计算电流的电压采样通道,一个电池电压采样通道。
项目中使用ADC1的通道1-11,通道1-11是ADC的规则通道,所有规则通道工用一个数据寄存器,也就是说每个通道的采样数值都放到该数据寄存器中,所以多通道采样时需要用到DMA将采样值传输的RAM中。
ADC的转换时间跟ADC的输入时钟和采样时间有关,公式为:
Tconv = 采样时间 + 12.5 个周期。项目中设置 PCLK2=72M,经过 ADC 预分频器分频后时钟是 12M,采样时间如果设置为 1.5 周期(最快),那么总的转换时间(最短)Tconv = 1.5 周期 + 12.5 周期 = 14 周期 = 1.17us。
为了采样精度将电池采样通道的转换时间设为239.5个周期,其他通道采样转换时间设为55.5个周期,如果想提高某个通道的采样精度,可以修改采样转换时间。
- DMA
DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU。
F103系列中只有DMA1,包含7个通道,项目使用1通道-DMA1_Channel1。将DMA的外设地址设为ADC1的数据寄存器,存储器地址是RAM中的变量。数据传输方向是外设到存储器。这样ADC每次采样后,每个通道的采样数据都通过DMA直接存储到内存中的接收缓存了。