一、ADC简介
ADC(Analog-Digital Converter)模拟-数字转换器。ADC可以将引脚上连续变化模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路桥梁。
12位逐次逼近型ADC,1us转换时间(分辨率:12位,频率:1MHz)。输入电压0-3.3v,转换结果0-4095(2^12-1)。
STM32F103系列,一共有18输入通道,16个外部,2个内部。STM32F103C8T6芯片的ADC资源,ADC1、ADC2,10个外部输入通道。
规则组、注入组连个转换单元,模拟电子看门狗自动检测输入电压范围。
二、逐次逼近型ADC
1.ADC0809逐次逼近型
地址锁存和译码控制通道选择开关,到电压比较器。
DAC到比较器。 DAC的Vref连接Vcc和GND。
当两个输入到比较器的值近似相等时,输出至8位三态锁存缓冲区,OE使能。
定时与控制,EOC结束,START开始,CLOCK时钟。
2.STM32 ADC框图
ADCx_INx外部输入引脚16个,温度传感器、Vrefint内部输入引脚2个,至多路选择开关,选择进入注入通道或规则通道,数据进入相应数据寄存器,读取数据寄存器的值,就读出转换的数据。(注入组4*116位;规则组1*16位,需要配合DMA数据搬运)
开始转换,触发分软件触发、硬件触发。软件触发在程序中调用一个函数,硬件触发通过EXTI_11或EXTI_15。(EXTI_11控制规则组,EXTI_15控制注入组)
Vref正负连接到Vdda和Vssa。
DMA请求由DMA申请。
规则组数据寄存器和注入组数据寄存器至EOC、JEOC、AWD,中断会置一个标志位,中断使能,至NVIC的ADC中断。(EOC规则组中断,JEOC注入组中断,AWD模拟电子看门狗)
三、ADC基本结构
1.输入通道
2.转换模式
单次转换、连续转换:决定触发用几个。
非扫描模式、扫描模式:决定ADC通道数量。
①单次转换,非扫描模式
只用到序列1,把转换通道写入序列1,触发开始转换,转换数据放到数据寄存器,同时EOC置1,判断EOC是否置1,置1就去读出数据。
②连续转换,非扫描模式
只需要一次触发,它就自动自己扫描。
③单次转换,扫描模式
④连续转换,扫描模式
3.触发控制
4.数据对齐
5.转换时间
6.校准
7.硬件电路
电位器、传感器。
四、实验
1.单路AD
①实验现象
OLED上第一行显示ADC转换值,第二行显示电压值。调节电位器,对应值有相应变化。
②硬件设计
③软件设计
用到OLED、Delay模块。
AD.c
AD.h
main.c
④用到函数
外设时钟使能:RCC_APB2PeriphClockCmd
ADC时钟配置:RCC_ADCCLKConfig
GPIO结构体重定义:GPIO_InitTypeDef
GPIO初始化:GPIO_Init
规则组通道配置:ADC_RegularChannelConfig
ADC结构体重命名:ADC_InitStructure
ADC单元初始化:ADC_Init
ADC使能:ADC_Cmd
校准:ADC_ResetCalibration、ADC_GetResetCalibrationStatus、ADC_StartCalibration、ADC_GetCalibrationStatus
软件触发开始转换配置:ADC_SoftwareStartConvCmd
采样值读取:ADC_GetConversionValue
2.多路AD
①实验现象
OLED第一行显示AD1:xxxx;第二行显示AD2:xxxx;第三行显示AD3:xxxx;第四行显示AD4:xxxx。
②硬件设计
③软件设计
用到OLED、Delay模块。
AD.c
AD.h
main.c
④用到函数
外设时钟使能:RCC_APB2PeriphClockCmd
ADC时钟配置:RCC_ADCCLKConfig
GPIO结构体重定义:GPIO_InitTypeDef
GPIO初始化:GPIO_Init
ADC结构体重命名:ADC_InitStructure
ADC单元初始化:ADC_Init
ADC使能:ADC_Cmd
校准:ADC_ResetCalibration、ADC_GetResetCalibrationStatus、ADC_StartCalibration、ADC_GetCalibrationStatus
规则组通道配置:ADC_RegularChannelConfig
软件触发开始转换配置:ADC_SoftwareStartConvCmd
采样值读取:ADC_GetConversionValue