N16 ARM--ADC

张开发
2026/5/23 18:16:33 15 分钟阅读
N16 ARM--ADC
一、ADC模拟量连续变化的物理量数字量离散、不连续的数值只能是固定状态。模拟量 →ADC→ 数字量计算机处理数字量 →DAC→ 模拟量驱动物理设备比较器 工作原理差分输入同相端 () 接输入信号反相端 (-) 接阈值放大比较内部运放放大两个输入的差值输出判决差值 0 → 输出高电平差值 0 → 输出低电平无量化过程直接输出二值结果无中间数值精度12位 量程2^12转换速率量程(参考电压Vref)0~3.3VADC 电压换算的通用公式为V 最大量化值/采样值​×Vref​多个模拟输入通道通过硬件多路选择器轮流接入同一个 ADC 转换核心实现 “一个 ADC 测多个信号”。DMA让硬件自己在存储器之间搬运数据解放 CPU提高速度。二、ADC调试ADC 通道选择位 ADCH外部通道 0 ~ 15选择对应 ADC 引脚进行采样我们只用0-9。ADC有一个自己的ADACK时钟用的话不用分频需要单独使能一下。int adc_init(ADC_Type *base) { 1. 配置引脚为ADC功能 2. 配置ADC精度12位 3. 配置时钟源为ADACK 4. 打开ADC 5. 启动ADC校准 6. 等待校准完成 7. 成功返回0失败返回-1 }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; }unsigned short adc_read(ADC_Type *base) { unsigned short adc_value 0; base-HC[0] | (0x1f 0); //关闭 ADC 通道、关闭采样 base-HC[0] (0x1 0); //选择 ADC 通道 1CH1 // 1 while (!(base-HS (1 0))) //等 ADC 把电压转换成数字 ; adc_value base-R[0] 0xfff; //R[0] ADC 结果寄存器里面存的就是 转换好的 data,0xFFF 12 位掩码因为 ADC 是 12 位 return adc_value; }

更多文章