文章目录前言1. ADC介绍1.1 什么是ADC?1.2 ADC工作原理逐次逼近型1.3 ADC特性参数2.ADC框图3. ADC的一些细节3.1 输入通道3.2 规则组/注入组3.3 转换顺序3.4 触发转换方法3.5 转换时间3.6 中断及事件3.7 校准3.8 单次转换和连续转换3.9 扫描模式4.ADC寄存器4.1 ADC状态寄存器(ADC_SR)4.2 ADC控制寄存器1(ADC_CR1)4.3 ADC控制寄存器2(ADC_CR2)4.4 ADC采样时间寄存器1(ADC_SMPR1)4.5 ADC采样时间寄存器2(ADC_SMPR2)5. ADC库函数总结前言本文介绍ADC模拟/数字转换器相关内容它是一种12位逐次逼近型模拟数字转换器建立模拟电路到数字电路的桥梁。1. ADC介绍1.1 什么是ADC?全称Analog-to-Digital Converter指模拟/数字转换器。ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量建立模拟电路到数字电路的桥梁。12位ADC是一种逐次逼近型模拟数字转换器0~4095。它有多达18个通道可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超过用户定义的高/低阈值。ADC的输入时钟不得超过14MHz它是由PCLK2经分频产生。STM32F103C8T6 ADC资源ADC1、ADC210个外部输入通道1.2 ADC工作原理逐次逼近型1.3 ADC特性参数ADC的性能指标量程能测量的电压范围分辨率ADC能辨别的最小模拟量通常以输出二进制数的位数表示比如8、10、12、16位等位数越多分辨率越高一般来说分辨率越高转化时间越长转换时间采样时间从转换开始到获得稳定的数字量输出所需要的时间称为转换时间。转换时间越长转换结果相对越准确但是转换速度就越慢。ADC特性12位精度下转换速度可高达1MHz供电电压VSSA0VVDDA2.4V~3.6VADC输入范围VREF- ≤ VIN ≤ VREF0~3.3VADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中2.ADC框图参考手册156页原图可能有点难理解看简图3. ADC的一些细节3.1 输入通道ADC说白了就是一个电压表总共2个ADCADC1ADC2每个ADC有18个转换通道16个外部通道、2个内部通道温度传感器、内部参考电压。两个通道同时用分时复用3.2 规则组/注入组规则组【16个转换】流水线注入组【最多4个转换】测量过程中有紧急的优先处理紧急的转换。【与中断很像】3.3 转换顺序每个ADC规则通道只有一个数据寄存器16个通道一起共用这个寄存器所以需要指定规则转换通道的转换顺序。规则通道中的转换顺序由三个寄存器控制SQR1、SQR2、SQR3它们都是32位寄存器。SQR寄存器控制着转换通道的数目和转换顺序只要在对应的寄存器位SQRx中写入相应的通道这个通道就是第x个转换。和规则通道转换顺序的控制一样注入通道的转换也是通过注入寄存器来控制只不过只有一个JSQR寄存器来控制控制关系如下注入序列的转换顺序是从JSQx[ 4 : 0 ]x4-JL[1:0]开始。只有当JL4的时候注入通道的转换顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序执行。3.4 触发转换方法通过向控制寄存器ADC-CR2的ADON位写1来开启ADC,再将SWSTART位置1启动规则通道转换【软件方式】通过外部事件如定时器进行转换。【硬件方式】3.5 转换时间ADC是挂载在APB2总线PCLK2上的经过分频器得到ADC时钟ADCCLK最高14MHz。转换时间采样时间12.5个周期12.5个周期是固定的一般我们设置PCLK272M经过ADC预分频器能分频到最大的时钟只能是12M采样周期设置为1.5个周期算出最短的转换时间为1.17us。72÷6 12最短转换时间是14÷12 1.1666≈1.17us(微秒)1us 1M频率3.6 中断及事件中断事件事件标志使能控制位规则通道转换结束EOCEOCIE注入通道转换结束JEOCJEOCIE设置了模拟看门狗状态位AWDAWDIEDMA请求只适用于规则组规则组每个通道转换结束后除了可以产生中断外还可以产生DMA请求我们利用DMA及时把转换好的数据传输到指定的内存里防止数据被覆盖。3.7 校准ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间在每个电容器上都会计算出一个误差修正码数字值这个码用于消除在随后的转换中每个电容器上产生的误差。通过设置ADC_CR2寄存器的CAL位启动校准。一旦校准结束CAL位被硬件复位可以开始正常转换。建议在上电时执行一次ADC校准。校准阶段结束后校准码储存在ADC_DR中。建议在每次上电后执行一次校准。3.8 单次转换和连续转换单次转换只转换一次连续转换转换一次之后立马进行下一次转换3.9 扫描模式关闭扫描模式只转换ADC_SQRx或ADC_JSQR选中的第一个通道打开扫描模式扫描所有被ADC_SQRx或ADC_JSQR选中的所有通道4.ADC寄存器4.1 ADC状态寄存器(ADC_SR)关注EOC位转换结束位 (End of conversion)流水线上所有通道转换完成后EOC位置14.2 ADC控制寄存器1(ADC_CR1)关注位8SCAN位——扫描模式Scan mode4.3 ADC控制寄存器2(ADC_CR2)所有位都需要关注TSVREFE温度传感器和VREFINT使能SWSTART开始转换规则通道【常用规则组】JSWSTART开始转换注入通道EXTTRIG规则通道的外部触发转换模式EXTSEL[2:0]选择启动规则通道组转换的外部事件——常用SWSTART软件触发模式JEXTTRIG注入通道的外部触发转换模式JEXTSEL[2:0]选择启动注入通道组转换的外部事件ALIGN数据对齐DMA直接存储器访问模式RSTCAL复位校准CALA/D校准CONT连续转换ADON开/关A/D转换器4.4 ADC采样时间寄存器1(ADC_SMPR1)每个通道进行配置通道10~174.5 ADC采样时间寄存器2(ADC_SMPR2)对通道0~9进行配置后面几个寄存器【见参考手册】ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x1…4)4个通道ADC看门狗高阀值寄存器(ADC_HTR)【做了解】ADC看门狗低阀值寄存器(ADC_LRT)ADC规则序列寄存器1(ADC_SQR1)ADC规则序列寄存器2(ADC_SQR2)ADC规则序列寄存器3(ADC_SQR3)ADC注入序列寄存器(ADC_JSQR)ADC 注入数据寄存器x (ADC_JDRx) (x 1…4)ADC规则数据寄存器(ADC_DR)最后顺序不一样5. ADC库函数// ADC工作参数配置HAL_ADC_Init()// 校准HAL_ADCEx_Calibration_Start()// Msp初始化HAL_ADC_MspInit()// 通道配置HAL_ADC_ConfigChannel()// 开始干活HAL_ADC_Start()// 通过DMA搬运出来HAL_ADC_Start_DMA()// 阻塞方式HAL_ADC_PollForConversion()HAL_ADC_GetValue()总结ADC是12位模拟数字转换器重点了解其工作原理和框图了解寄存器和一些库函数为后续三个ADC通道采集实验做准备。
STM32学习笔记【25.ADC】
文章目录前言1. ADC介绍1.1 什么是ADC?1.2 ADC工作原理逐次逼近型1.3 ADC特性参数2.ADC框图3. ADC的一些细节3.1 输入通道3.2 规则组/注入组3.3 转换顺序3.4 触发转换方法3.5 转换时间3.6 中断及事件3.7 校准3.8 单次转换和连续转换3.9 扫描模式4.ADC寄存器4.1 ADC状态寄存器(ADC_SR)4.2 ADC控制寄存器1(ADC_CR1)4.3 ADC控制寄存器2(ADC_CR2)4.4 ADC采样时间寄存器1(ADC_SMPR1)4.5 ADC采样时间寄存器2(ADC_SMPR2)5. ADC库函数总结前言本文介绍ADC模拟/数字转换器相关内容它是一种12位逐次逼近型模拟数字转换器建立模拟电路到数字电路的桥梁。1. ADC介绍1.1 什么是ADC?全称Analog-to-Digital Converter指模拟/数字转换器。ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量建立模拟电路到数字电路的桥梁。12位ADC是一种逐次逼近型模拟数字转换器0~4095。它有多达18个通道可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超过用户定义的高/低阈值。ADC的输入时钟不得超过14MHz它是由PCLK2经分频产生。STM32F103C8T6 ADC资源ADC1、ADC210个外部输入通道1.2 ADC工作原理逐次逼近型1.3 ADC特性参数ADC的性能指标量程能测量的电压范围分辨率ADC能辨别的最小模拟量通常以输出二进制数的位数表示比如8、10、12、16位等位数越多分辨率越高一般来说分辨率越高转化时间越长转换时间采样时间从转换开始到获得稳定的数字量输出所需要的时间称为转换时间。转换时间越长转换结果相对越准确但是转换速度就越慢。ADC特性12位精度下转换速度可高达1MHz供电电压VSSA0VVDDA2.4V~3.6VADC输入范围VREF- ≤ VIN ≤ VREF0~3.3VADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中2.ADC框图参考手册156页原图可能有点难理解看简图3. ADC的一些细节3.1 输入通道ADC说白了就是一个电压表总共2个ADCADC1ADC2每个ADC有18个转换通道16个外部通道、2个内部通道温度传感器、内部参考电压。两个通道同时用分时复用3.2 规则组/注入组规则组【16个转换】流水线注入组【最多4个转换】测量过程中有紧急的优先处理紧急的转换。【与中断很像】3.3 转换顺序每个ADC规则通道只有一个数据寄存器16个通道一起共用这个寄存器所以需要指定规则转换通道的转换顺序。规则通道中的转换顺序由三个寄存器控制SQR1、SQR2、SQR3它们都是32位寄存器。SQR寄存器控制着转换通道的数目和转换顺序只要在对应的寄存器位SQRx中写入相应的通道这个通道就是第x个转换。和规则通道转换顺序的控制一样注入通道的转换也是通过注入寄存器来控制只不过只有一个JSQR寄存器来控制控制关系如下注入序列的转换顺序是从JSQx[ 4 : 0 ]x4-JL[1:0]开始。只有当JL4的时候注入通道的转换顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序执行。3.4 触发转换方法通过向控制寄存器ADC-CR2的ADON位写1来开启ADC,再将SWSTART位置1启动规则通道转换【软件方式】通过外部事件如定时器进行转换。【硬件方式】3.5 转换时间ADC是挂载在APB2总线PCLK2上的经过分频器得到ADC时钟ADCCLK最高14MHz。转换时间采样时间12.5个周期12.5个周期是固定的一般我们设置PCLK272M经过ADC预分频器能分频到最大的时钟只能是12M采样周期设置为1.5个周期算出最短的转换时间为1.17us。72÷6 12最短转换时间是14÷12 1.1666≈1.17us(微秒)1us 1M频率3.6 中断及事件中断事件事件标志使能控制位规则通道转换结束EOCEOCIE注入通道转换结束JEOCJEOCIE设置了模拟看门狗状态位AWDAWDIEDMA请求只适用于规则组规则组每个通道转换结束后除了可以产生中断外还可以产生DMA请求我们利用DMA及时把转换好的数据传输到指定的内存里防止数据被覆盖。3.7 校准ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间在每个电容器上都会计算出一个误差修正码数字值这个码用于消除在随后的转换中每个电容器上产生的误差。通过设置ADC_CR2寄存器的CAL位启动校准。一旦校准结束CAL位被硬件复位可以开始正常转换。建议在上电时执行一次ADC校准。校准阶段结束后校准码储存在ADC_DR中。建议在每次上电后执行一次校准。3.8 单次转换和连续转换单次转换只转换一次连续转换转换一次之后立马进行下一次转换3.9 扫描模式关闭扫描模式只转换ADC_SQRx或ADC_JSQR选中的第一个通道打开扫描模式扫描所有被ADC_SQRx或ADC_JSQR选中的所有通道4.ADC寄存器4.1 ADC状态寄存器(ADC_SR)关注EOC位转换结束位 (End of conversion)流水线上所有通道转换完成后EOC位置14.2 ADC控制寄存器1(ADC_CR1)关注位8SCAN位——扫描模式Scan mode4.3 ADC控制寄存器2(ADC_CR2)所有位都需要关注TSVREFE温度传感器和VREFINT使能SWSTART开始转换规则通道【常用规则组】JSWSTART开始转换注入通道EXTTRIG规则通道的外部触发转换模式EXTSEL[2:0]选择启动规则通道组转换的外部事件——常用SWSTART软件触发模式JEXTTRIG注入通道的外部触发转换模式JEXTSEL[2:0]选择启动注入通道组转换的外部事件ALIGN数据对齐DMA直接存储器访问模式RSTCAL复位校准CALA/D校准CONT连续转换ADON开/关A/D转换器4.4 ADC采样时间寄存器1(ADC_SMPR1)每个通道进行配置通道10~174.5 ADC采样时间寄存器2(ADC_SMPR2)对通道0~9进行配置后面几个寄存器【见参考手册】ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x1…4)4个通道ADC看门狗高阀值寄存器(ADC_HTR)【做了解】ADC看门狗低阀值寄存器(ADC_LRT)ADC规则序列寄存器1(ADC_SQR1)ADC规则序列寄存器2(ADC_SQR2)ADC规则序列寄存器3(ADC_SQR3)ADC注入序列寄存器(ADC_JSQR)ADC 注入数据寄存器x (ADC_JDRx) (x 1…4)ADC规则数据寄存器(ADC_DR)最后顺序不一样5. ADC库函数// ADC工作参数配置HAL_ADC_Init()// 校准HAL_ADCEx_Calibration_Start()// Msp初始化HAL_ADC_MspInit()// 通道配置HAL_ADC_ConfigChannel()// 开始干活HAL_ADC_Start()// 通过DMA搬运出来HAL_ADC_Start_DMA()// 阻塞方式HAL_ADC_PollForConversion()HAL_ADC_GetValue()总结ADC是12位模拟数字转换器重点了解其工作原理和框图了解寄存器和一些库函数为后续三个ADC通道采集实验做准备。