ADC外设
总结stm32中的ADC设备
概述
ADC:模数转换器,其是一个片上外设
STM32f103 系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道, ADC3根据CPU引脚的不同通道数也不同,一般都有8个外部通道。
其主要包含的内容有:
- 测量的范围
- 准备工作
- 如何触发转换
- 如何处理转换
- 数据如何传入
- 数据如何传出
- 中断
测量的范围
在stm32zet6的ADC中,电压的测量范围是0v~3.3V,想要测量扩大范围,只需要使用外部电路进行升、降压至0~3.3v即可。
已知单片机内置10位精度ADC,工作电压1.8V,ADC基准电压1.8V,则ADC采样的最小电压分辨率是多少,如果ADC输入口电压是0.9V,那么采样得到的值是多少,请给出结果和过程
单片机内置的ADC为 10 位精度,这意味着它能分辨 2^10 = 1024 个不同的数字值。由于ADC的基准电压是 1.8 V,这表示整个 1.8V 的电压范围会被均匀地分成 1024 份。因此,最小电压分辨率(即每个ADC单位对应的实际电压)可以通过将基准电压除以ADC的最大数字值来计算:
最小电压分辨率 = 基准电压 / ADC最大数字集 = 1.8 / 2^10(1024) = 0.0017578 V 就是 1.76 mV
所以,当 ADC 输入电压是 0.9 V 时,采样的值是:
采样值 = 0.9 / 0.0017578 = 512 (10 位精度)
如何触发
ADC的触发源包括了:
- ADC转换可以由ADC控制寄存器2: ADC_CR2的ADON这个位来控制, 写1的时候开始转换,写0的时候停止转换.其实就是软件触发
1
ADC_SoftwareStartConvCmd(ADCx, ENABLE);
- 内部定时器触发
1
- 外部IO触发
1 |
|
1 |
|
输入通道
信号输入的通道,STM32的ADC多达18个通道,这18个通道又分为外部通道和内部通道。
其中外部的16个通道就是框图中的ADCx_IN0、ADCx_IN1…ADCx_IN5。这16个通道对应着不同的IO口,具体是哪一个IO口可以从手册查询到。
其中ADC1/2/3还有内部通道:ADC1的通道16连接到了芯片内部的温度传感器,Vrefint连接到了通道17。 ADC2的模拟通道16和17连接到了内部的VSS。ADC3的模拟通道9、14、15、16和17连接到了内部的VSS。
外部的16个通道之中又分为了规则通道和注入通道
规则通道
规则通道可以有16个,规则通道就是守规则的、按顺序来的通道。
注入通道
注入通道最多占用4个通道。注入,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种通道。 如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。 这点跟中断程序很像,都是不安分的主。所以,注入通道只有在规则通道存在时才会出现。
如何处理转换
转换顺序
转换时间
ADC时钟
ADC输入时钟ADC_CLK由PCLK2经过分频产生,最大是14M,分频因子由RCC时钟配置寄存器RCC_CFGR的位15:14 ADCPRE[1:0]设置, 可以是2/4/6/8分频,注意这里没有1分频。一般我们设置PCLK2=HCLK=72M,所以经过ADC预分频器能分频到最大的时钟只能是12M。
1 |
|
采样时间
ADC使用一些ADC_CLK周期来进行采样,每个通道都可以配置不同的采样时间。
1 |
|
数据输出
ADC转换后的数据根据转换组的不同,规则组的数据放在ADC_DR寄存器,注入组的数据放在JDRx。
ADC模式
ADC有六种基本模式:
如果不使用双ADC的话就是使用独立模式
与其他外设之间
中断
ADC有三种中断:
- 顺序中断
- 注入中断
- 看门狗中断
其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。
看门狗中断
如果设置了看门狗中断的话,当ADC高于或者是低于设定的值时,会发生中断。
DMA请求
顺序中断和注入中断可以请求DMA,直接将数据存储到DMA中。
**DMA请求实际上是
编程
初始化结构体定义
1 |
|