N16 ARM--ADC

一、ADC

模拟量:连续变化的物理量

数字量:离散、不连续的数值,只能是固定状态。

模拟量 →(ADC)→ 数字量(计算机处理)

数字量 →(DAC)→ 模拟量(驱动物理设备)

比较器 工作原理

  1. 差分输入:同相端 (+) 接输入信号,反相端 (-) 接阈值
  2. 放大比较:内部运放放大两个输入的差值
  3. 输出判决:差值 > 0 → 输出高电平;差值 < 0 → 输出低电平
  4. 无量化过程:直接输出二值结果,无中间数值

精度:12位 量程/2^12

转换速率:

量程(参考电压Vref):0~3.3V

ADC 电压换算的通用公式为:V= 最大量化值/(采样值​)×Vref​

多个模拟输入通道,通过硬件多路选择器,轮流接入同一个 ADC 转换核心,实现 "一个 ADC 测多个信号"。

DMA:让硬件自己在存储器之间搬运数据,解放 CPU,提高速度。

二、ADC调试

ADC 通道选择位 ADCH:外部通道 0 ~ 15,选择对应 ADC 引脚进行采样,我们只用0-9。

ADC有一个自己的ADACK时钟,用的话不用分频,需要单独使能一下。

cs 复制代码
int adc_init(ADC_Type *base)
{
    1. 配置引脚为ADC功能
    2. 配置ADC精度12位
    3. 配置时钟源为ADACK
    4. 打开ADC
    5. 启动ADC校准
    6. 等待校准完成
    7. 成功返回0,失败返回-1
}
cs 复制代码
int adc_init(ADC_Type *base)
{
  if (ADC1 == base)
  {
    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO01_GPIO1_IO01, 1);
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, 0x10b0);
  }
  //base->HC[0] &= ~(1 << 0);

  unsigned int tmp = 0;
  base->CFG = 0;
  tmp |= (2 << 2); //12 位 ADC 精度
  tmp |= (3 << 0); //11 = 选择 异步时钟 ADACK(最稳定)
  base->CFG = tmp;

  base->GC = (0x01 << 0); //时钟,GC = 全局控制寄存器,bit0 = 1 = 使能 ADC(打开 ADC)

  base->GS |= (1 << 1); //GS = 状态寄存器,bit1 = 1 = 开始校准
  base->GC |= (0x01 << 7);
  while (base->GC & (1 << 7)) //等待中断标志清空,结束的标志
    ;
  while (base->GS & (1 << 1))  // 等待校准完成
    return -1;
  return 0;
}
cs 复制代码
unsigned short adc_read(ADC_Type *base)
{
  unsigned short adc_value = 0;
  base->HC[0] |= (0x1f << 0); //关闭 ADC 通道、关闭采样
  base->HC[0] = (0x1 << 0); //选择 ADC 通道 1(CH1)

  // 1
  while (!(base->HS & (1 << 0))) //等 ADC 把电压转换成数字!
    ;
  adc_value = base->R[0] & 0xfff; //R[0] = ADC 结果寄存器,里面存的就是 转换好的 data,0xFFF = 12 位掩码(因为 ADC 是 12 位)

  return adc_value;
}
相关推荐
sunoo-2295 小时前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Doraemomo6 小时前
IMX6ULL裸机开发——PWM
arm开发·嵌入式硬件·imx6ull
老当益壮梁奶奶7 小时前
ARM汇编学习笔记(五):从按键轮询到 GIC 中断控制器(ARM Cortex-A7 )
arm开发·笔记·单片机·嵌入式硬件
M78佐菲8 小时前
ARM学习笔记(五)
linux·arm开发·笔记·嵌入式硬件·学习
小诗懂技术10 小时前
ARM 裸机中断:从按键到 GIC 的处理流程
arm开发
从零开始的嵌入式之旅11 小时前
day46
linux·arm开发·笔记·嵌入式硬件
老当益壮梁奶奶11 小时前
ARM汇编学习笔记(四):i.MX6ULL裸机开发:从汇编点灯到C语言BSP工程管理
c语言·arm开发·单片机·嵌入式硬件·51单片机
sunoo-22911 小时前
【ARM嵌入式学习笔记Day5】一文打通GPIO中断全链路:从硬件引脚→GIC→汇编入口→C语言处理
arm开发·笔记·学习·中断·gic·裸机开发
PiaoKe___14 小时前
云手机原理与 Python 自动化实战:ADB 批量控制、任务调度与落地建议
服务器·arm开发·python·自动化
斑马1391 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm