STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)

<总目录>

一、ADC的基本定义

二、ADC的主要特征

2.1、特征

2.2、通道

三、ADC转换方式

3.1、单次转换模式

3.2、连续转换模式

3.3、扫描模式

四、ADC常用功能以及电路设计

4.1、采集电压

4.1.1、基本原理

4.1.2、电路设计

4.1.3、算法分析

4.2、采集温度

4.2.1、基本原理

4.2.2、电路设计

4.2.3、算法分析

4.3、采集电流

4.3.1、基本原理

4.3.2、电路设计

4.3.3、算法分析


一、ADC的基本定义

Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。

二、ADC的主要特征

2.1、特征

12位逐次逼近型的模拟数字转换器;
    最多带3个ADC控制器,可以单独使用,也可以使用双重模式提高采样率;
    最多支持23个通道,可最多测量21个外部和2个内部信号源;
    支持单次和连续转换模式;
    转换结束,注入转换结束,和发生模拟看门狗事件时产生中断;
    通道0到通道n的自动扫描模式;
    自动校准;
    采样间隔可以按通道编程;
    规则通道和注入通道均有外部触发选项;
    转换结果支持左对齐或右对齐方式存储在16位数据寄存器;
    ADC转换时间:最大转换速率 1us(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到);
    ADC供电要求:2.4V-3.6V;
    ADC输入范围:VREF- ≤  VIN  ≤  VREF+。

2.2、通道

STM32F10x系列芯片ADC通道和引脚对应关系

STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)_第1张图片

由上图中可以看出,STM32F103ZET6带3个ADC控制器,一共支持23个通道,包括21个外部和2个内部信号源;但是每个ADC控制器最多只可以有18个通道,包括16个外部和2个内部信号源。

三、ADC转换方式

STM32的ADC的各通道可以组成规则通道组或注入通道组,但是在转换方式还可以有单次转换、连续转换、扫描转换模式。

3.1、单次转换模式

单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。

STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)_第2张图片

3.2、连续转换模式

在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。

STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)_第3张图片

3.3、扫描模式

此模式用来扫描一组模拟通道。

扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。一旦这个位被设置,ADC扫描所有被ADC_SQRX寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所有通道。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

这里需要注意的是:如果在使用扫描模式的情况下使用中断,会在最后一个通道转换完毕后才会产生中断。而连续转换,是在每次转换后,都会产生中断。

如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。而注入通道转换的数据总是存储在ADC_JDRx寄存器中。

STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)_第4张图片

四、ADC常用功能以及电路设计

4.1、采集电压

4.1.1、基本原理

我们可以知道ADC采样得到的是一串数据,当我们设置的采样精度是12位时,也就是最大值是0xFFF = 4096;当我们设置的采样精度是10位时,也就是最大值是0x3FF = 1024。也就是说我们能够获取到的最大值就是4095或者1023。这个值表示的是什么意思呢?其实就是满量程,而我们有一个ADC的基准电压,就是满量程状态下的电压是多大,这个基准电压取决于 VREF引脚,而在STM32系列的芯片这个引脚一般连接到3.3V,为什么不是5V呢,这是因为STM32芯片是3.3V电压供电,5V会对引脚、内核产生烧毁状况。然后我们得到ADC通道里面的值,和满量程的比例关系,在乘以3.3V,就得到对应的电压关系。

4.1.2、电路设计

STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)_第5张图片

我们要测量A点的电压,而在实际产品中,A点的电压一般都是超过5V,比方说这里A点电压是12V,已经超过电压测量的量程了,那这个时候我们怎么测量呢?还记的串联分压,并联分流吗!这里就是用到这个基础原理。A点到GND是12V,作用到510千欧和62千欧上面,也就是说12V整个是作用到572千欧上了,而在这个电路上我们测量的呢实际上是62千欧的电阻电压,然后根据分压比计算出A点的电压。

4.1.3、算法分析

  1. ADC电压 = ADC通道值/ADC满量程 *3.3V;
  2. A点电压/(510+62) = ADC电压/62   -> A点电压

4.2、采集温度

4.2.1、基本原理

我们可以知道ADC采样得到的是一串数据,当我们设置的采样精度是12位时,也就是最大值是0xFFF = 4096;当我们设置的采样精度是10位时,也就是最大值是0x3FF = 1024。也就是说我们能够获取到的最大值就是4095或者1023。这个值表示的是什么意思呢?其实就是满量程,而我们有一个ADC的基准电压,就是满量程状态下的电压是多大,这个基准电压取决于 VREF引脚,而在STM32系列的芯片这个引脚一般连接到3.3V,为什么不是5V呢,这是因为STM32芯片是3.3V电压供电,5V会对引脚、内核产生烧毁状况。然后我们得到ADC通道里面的值,和满量程的比例关系,在乘以3.3V,就得到对应的电压值。然后根据电压比,算出对应的电阻,根据温度电阻的特性查表得到温度。

4.2.2、电路设计

STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度)_第6张图片

采集温度的电路和采集电压的电路设计基本一样,唯一一点的区别是未知量恰恰相反。在采集电压的电路里,未知量是带采集的电压;而在采集温度的电路里,未知量是ADC段的电阻,所有的变量我们都已知,唯一不确定的是温度电阻的大小,这个需要我们来求解。求解出来温度电阻的大小,然后我们根据温度电阻的特性进行查表,就能够知道对应的温度值了。

4.2.3、算法分析

  1. ADC电压 = ADC通道值/ADC满量程 *3.3V;

  2. 5V电压/(10+温度电阻值) = ADC电压/温度电阻值   -> 温度电阻值;

  3. 对温度电阻表进行查询,得到温度值。

  4.  

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

1、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我,嘻嘻。

 

<总目录>

你可能感兴趣的:(STM32CUBE+自平衡车原理篇2.1-电池电压检测原理(ADC如何测量电压、温度))