ARM 下的 ADC(模数转换器)
ADC(Analog to Digital Converter,模数转换器)是嵌入式系统中非常重要的一个模块,负责将连续变化的模拟信号(如温度、电压、电流等)转换为数字信号,供 CPU 和程序进行处理。
ADC 基本概念
模拟量(Analog Quantity):模拟量是连续变化的物理量,比如温度、湿度、光照强度、电压等。它们的变化是连续的,无法直接被数字处理器理解。
数字量(Digital Quantity):数字量是离散的、不连续的。数字处理器只能处理数字量,比如 1 和 0 的组合。
转换:ADC 模块负责将模拟信号(比如电压信号)转换为相应的数字量,使处理器能够读取和处理。
工作原理
在 ARM 系统中的 ADC 模块通常是一个基于电压的转换器,它通过对输入电压信号的采样,将其转换为对应的数字值。
例如,在 12 位 ADC 中,输入电压的范围通常为 0 - Vref,其中 Vref 是参考电压。输入电压 Vx 可以通过以下公式转换为数字值 B L = V x V r e f × 4095 BL = \frac{V_x}{V_{ref}} \times 4095 B L = V re f V x × 4095
BL 是 ADC 转换得到的数字值,12 位 ADC 的最大值是 4095(即 2^12 - 1)
Vx 是输入的电压值
Vref 是参考电压,通常为 3.3V 或 5V
ARM下的ADC特点
分辨率:ADC 的分辨率决定了它能将模拟量细分为多少个数字值。例如,12 位分辨率的 ADC 能将输入电压分成 4096 个离散的数字量(即 0 - 4095)
采样速度:这是 ADC 每秒能够执行的转换次数,通常以 Samples Per Second(SPS,样本/秒)为单位
参考电压(Vref):这是 ADC 转换时的参考电压,通常由外部或者内部的电压源提
ADC编程步骤
配置 GPIO 引脚为模拟输入模式: 在一些 ARM Cortex-M 系列的 MCU 中,ADC 通道与特定的 GPIO 引脚绑定,在使用 ADC 之前需要将 GPIO 配置为模拟模式。
配置 ADC 模块:
配置分辨率和采样速度(如 12 位,1 MSPS)。
设置参考电压(Vref)。
启动转换: 启动 ADC 转换,等待 ADC 模块完成采样并将结果存储在数据寄存器中。
读取 ADC 数据寄存器: 一旦转换完成,ADC 数据寄存器将存储转换后的数字值,可以通过访问寄存器读取这个值。
ARM 典型寄存器配置(伪代码)
void ADC_Init ( void )
{
GPIO_PinConfig ( GPIOA, PIN1, GPIO_MODE_ANALOG) ;
ADC1-> CR1 = 0 ;
ADC1-> SQR1 = 0 ;
ADC1-> SMPR2 |= ADC_SMPR2_SMP10;
ADC1-> CR2 |= ADC_CR2_ADON;
}
uint16_t ADC_Read ( void )
{
ADC1-> CR2 |= ADC_CR2_SWSTART;
while ( ! ( ADC1-> SR & ADC_SR_EOC) ) ;
return ADC1-> DR;
}
ARM 下的 ADC 实际应用
温度测量:读取热敏电阻输出的模拟电压值,将其转换为数字值,再根据转换结果计算温度。
电压监测:通过电压分压电路,监测电池或电源的电压值,进而判断电源状态。
光强度检测:读取光电二极管或光敏电阻的模拟信号,转换为数字量后判断环境光照强度。
ARM的ADC编程实例(main.c)
第一步:UART初始化 目的:初始化串口通信模块,使 CPU 可以通过 UART 向外部设备发送字符数据(例如,输出 ADC 转换得到的电压值
# define GPA1CON * ( volatile long * ) 0x11400020
# define ULCON2 * ( volatile long * ) 0x13820000
# define UCON2 * ( volatile long * ) 0x13820004
# define UTRSTAT2 * ( volatile long * ) 0x13820010
# define UTXH2 * ( volatile long * ) 0x13820020
# define UBRDIV2 * ( volatile long * ) 0x13820028
# define UFRACVAL2 * ( volatile long * ) 0x1382002C
void uart_init ( void )
{
GPA1CON = GPA1CON & ~ 0xF ;
GPA1CON = GPA1CON | ( 1 << 1 ) ;
GPA1CON = GPA1CON & ~