IMX6ULL裸机-4-ADC控制器

发布者:PeacefulAura最新更新时间:2024-07-03 来源: elecfans关键字:ADC控制器 手机看文章 扫描二维码
随时随地手机看文章

ADCx_CFG(x=1~2) 配置寄存器


OVWREN (bit16):数据复写使能位,为 1 的时候使能复写功能,为 0 的时候关闭复写功能。 AVGS(bit15:14):硬件平均次数,只有当 ADC1_GC 寄存器的 AVGE 位为 1 的时候才有效

ADTRG(bit13):转换触发选择。为 0 的时候选择软件触发,为 1 的时候,不选择软件触发。 REFSEL(bit12:11):参考电压选择,为 00 时选择 VREFH/VREFL 这两个引脚上的电压为参考电压,正点原子 ALPHA 开发板上 VREFH 为 3.3V,VREFL 为 0V。 ADHSC(bit10):高速转换使能位,当为 0 时为正常模式,为 1 时为高速模式。 ADSTS(bit9:8):设置 ADC 的采样周期,与 ADLSMP 位一起决定采样周期:

ADLSMP(bit4):长采样周期使能位,当值为 0 时为短采样周期模式,为 1 时为长采样周期模式。搭配 ADSTS 位一起控制 ADC 的采样周期。 MODE(bit3:2):选择转换精度:

ADICLK(bit1:0):输入时钟源选择,为 00 的时候选择 IPG Clock,为 01 的时候选择 IPG Clock/2,为 10 的时候无效,为 11 的时候选择呢 ADACK。本教程我们设置为 11,也就是选择ADACK 为 ADC 的时钟源。

ADCx_GC 通用控制寄存器


CAL(bit7):当该位写入 1 时,硬件校准功能将会启动,校准过程中该位会一直保持 1,校准完成后会清 0,校准完成后需要检查一下ADC_GS[CALF]位,确认校准结果。 ADCO(bit6):连续转换使能位,只有在开启了硬件平均功能时有效,为 0 时只能转换一次或一组,当 ADCO 为 1 时可以连续转换或多组。 AVGE(bit5):硬件平均使能位。为 0 时关闭,为 1 时使能。 ACFE(bit4):比较功能使能位。为 0 时关闭,为 1 时使能。 ACFGT(bit3):配置比较方法,如果为 0 的话就比较转换结果是否小于 ADC_CV 寄存器值,如果为 1 的话就比较装换结果是否大于或等于 ADC_CV 寄存器值。 ACREN(bit2):范围比较功能使能位。为 0 的话仅和 ADC_CV 里的 CV1 比较,为 1 的话和 ADC_CV 里的 CV1、CV2 比较。 ACREN(bit2):范围比较功能使能位。为 0 的话仅和 ADC_CV 里的 CV1 比较,为 1 的话和 ADC_CV 里的 CV1、CV2 比较。 DMAEN(bit1):DMA 功能使能位,为 0 是关闭,为 1 是开启 ADACKEN(bit0):异步时钟输出使能位,为 0 是关闭,为 1 时开启

ADCx_GS 通用状态寄存器


AWKST(bit2):异步唤醒中断状态,为 1 时表示发生了异步唤醒中断。为 0 时没有发生异步中断。 CALF(bit1):校准失败标志位,为 0 的时候表示校准正常完成,为 1 的时候表示校准失败。 ADACT(bit0):转换活动标志,为 0 的时候表示转换没有进行,为 1 的时候表示正在进行转换。

ADCx_HS 状态寄存器(COCO0表示转换完成)

COCO0(bit0):每次转换完成此位就会被置 1。

ADCx_HC0 控制寄存器


AIEN(bit7):转换完成中断控制位,为 1 的时候打开转换完成中断,为 0 的时候关闭。 ADCH(bit4:0):转换通道选择,可以设置为 00000~01111 分别对应通道 0~15。11001 为内部通道,用于 ADC 自测。

ADCx_R0 数据寄存器


流程代码

1、初始化 ADC1_CH1

//初始化 ADC1_CH1,配置 ADC 位数,时钟源,采样时间等。

2、校准 ADC

//ADC 在使用之前需要校准一次。

3、使能 ADC

//配置好 ADC 以后就可以开启了。

4、读取 ADC 值

//ADC 正常工作以后就可以读取 ADC 值。

初始化和使能

void adc1ch1_init(void) {

    ADC1->CFG = 0;

    ADC1->CFG |= (2 << 2) | (3 << 0);

    ADC1->GC = 0;

    ADC1->GC |= 1 << 0;

}

/ CFG寄存器 * bit16 0 关闭复写功能 * bit15:14 00 硬件平均设置为默认值,00的时候4次平均, * 但是得ADC_GC寄存器的AVGE位置1来使能硬件平均 * bit13 0 软件触发 * bit12:1 00 参考电压为VREFH/VREFL,也就是3.3V/0V * bit10 0 正常转换速度 * bit9:8 00 采样时间2/12,ADLSMP=0(短采样)的时候为2个周期 * ADLSMP=1(长采样)的时候为12个周期 * bit7 0 非低功耗模式 * bit6:5 00 ADC时钟源1分频 * bit4 0 短采样 * bit3:2 10 12位ADC * bit1:0 11 ADC时钟源选择ADACK / / GC寄存器 * bit7 0 先关闭校准功能,后面会校准 * bit6 0 关闭持续转换 * bit5 0 关闭硬件平均功能 * bit4 0 关闭比较功能 * bit3 0 关闭比较的Greater Than功能 * bit2 0 关闭比较的Range功能 * bit1 0 关闭DMA * bit0 1 使能ADACK /


自动校准

status_t adc1_autocalibration(void) {

    status_t ret  = kStatus_Success;


    ADC1->GS |= (1 << 2);   /* 清除CALF位,写1清零 */

    ADC1->GC |= (1 << 7);   /* 使能校准功能 */


    /* 校准完成之前GC寄存器的CAL位会一直为1,直到校准完成此位自动清零 */

    while((ADC1->GC & (1 << 7)) != 0) { 

        /* 如果GS寄存器的CALF位为1的话表示校准失败 */

        if((ADC1->GS & (1 << 2)) != 0) {

            ret = kStatus_Fail;

            break;

        }

    }


    /* 校准成功以后HS寄存器的COCO0位会置1 */

    if((ADC1->HS  & (1 << 0)) == 0) 

        ret = kStatus_Fail;


    /* 如果GS寄存器的CALF位为1的话表示校准失败 */

        if((ADC1->GS & (1 << 2)) != 0) 

        ret = kStatus_Fail;

    return ret;

}

获取ADC原始值

unsigned int getadc_value(void) {

    /* 配置ADC通道1 */

    ADC1->HC[0] = 0;            /* 关闭转换结束中断    */

    ADC1->HC[0] |= (1 << 0);     /* 通道1            */


    while((ADC1->HS & (1 << 0)) == 0);  /* 等待转换完成 */


    return ADC1->R[0];    /* 返回ADC值 */

}

获取ADC原始值(多次取平均)

unsigned short getadc_average(unsigned char times)

{

    unsigned int temp_val = 0;

    unsigned char t;

    for(t = 0; t < times; t++){

        temp_val += getadc_value();

        delayms(5);

    }

    return temp_val / times;

}

获取模数转换后的电压

由于精度为12 bit, ADC范围为[0, 4095]。同时电压满输出时为3.3v,因此当ADC数据拉满,得到3300mv,也就是3.3v


unsigned short getadc_volt(void)

{

    unsigned int adcvalue=0;

    unsigned int ret = 0;

    adcvalue = getadc_average(5);

    ret = (float)adcvalue * (3300.0f / 4096.0f);        /* 获取计算后的带小数的实际电压值 */

    return  ret;

}


关键字:ADC控制器 引用地址:IMX6ULL裸机-4-ADC控制器

上一篇:通用裸机-arm汇编和cpu运行模式
下一篇:IMX6ULL裸机-3.1-SPI应用-6轴陀螺仪加速度传感器ICM-20608-G

推荐阅读最新更新时间:2026-03-14 00:59

解决方法:编译IMX6ULL裸机串口程序提示错误arm-none-eabi-ld: cannot find -lgcc: 没有那个文件或目
一、问题 编译IMX6ULL野火裸机串口程序出现错误: make : 进入目录“/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/device” arm-none-eabi-gcc -fno-builtin -I/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/include -c led.c arm-none-eabi-gcc -fno-builtin -I/home/leung/embed_linux_driver_tutorial_i
[单片机]
解决方法:编译<font color='red'>IMX6ULL</font><font color='red'>裸机</font>串口程序提示错误arm-none-eabi-ld: cannot find -lgcc: 没有那个文件或目
数字电源控制器UCD3138的数字比较器与模数转换器的应用说明
数字电源 控制器UCD3138 内部集成有 4 个 数字比较器 ,可以灵活配置其输入端和参考值。模拟前端(AFE)模块的绝对值量和EADC 的输出都可以作为 数字比较器 的输入,因此使用 数字比较器 可以实现对系统输出电压的故障响应与保护。UCD3138 内部集成有 16 个模数转换器(ADC),其中名称为 ADC15 的模数转换器不对外部开放,可以用来检测 3 个AFE 模块中任何一个的 EAP 或 EAN 引脚,实现对系统输出电压的精确采集,最终可以实现对输出电压的故障响应与保护。 1、UCD3138 的数字比较器 UCD3138 内部集成有4数字比较器,可以以AFE 的绝对值量或者误差值为输入端,灵活配置参考值,最终
[电源管理]
数字电源<font color='red'>控制器</font>UCD3138的数字比较器与<font color='red'>模数转换器</font>的应用说明
触摸屏控制器芯片中的高精度低功耗ADC设计
引言    ADC 采用逐次逼近型(SAR)结构,具有125kHz采样速率,12位精度。电容电荷重新分布D/A技术采用电荷按比例缩放子DAC组合,进而大大减小了芯片电容面积,也避免了采用像电阻阵列结构所带来的固有直流功耗,通过对DAC级间 耦合电容 值的优化设计,提高了ADC精度。 比较器 采用自消除 失调电压 的 开关电容 比较器。   据调研,市场上现有 触摸屏控制器 芯片主要来自ADI公司(如AD7843、AD7873、AD7877)和TI公司(如ADS7843、TSC2046、TSC2003),对其性能进行对比,如表1所示。 表1触摸屏控制器芯片性能对比结果   通过对ADC电路进行优
[家用电子]
触摸屏<font color='red'>控制器</font>芯片中的高精度低功耗<font color='red'>ADC</font>设计
MAX1169 ADC与PIC微控制器的接口
MAX1169是一款16位、低功耗ADC,具有I 2 C兼容的2线串行接口。MAX1169的接口可支持快速模式(400kHz)和高速模式(高达1.7MHz)。 本应用笔记包括实例应用电路和用于PIC18F442的软件。该软件提供了利用内部MSSP I 2 C端口,以400kHz速率连接ADC至PIC微控制器的函数调用。因为其它微控制器具有类似的片上外围设备,所以实例中所提供的I 2 C通信程序被有意拆分为单独的I 2 C函数调用,以便快速移植到其它微控制器。表1所示为汇编程序范例中用到的单独的I 2 C接口函数调用。 这里讨论的应用电路采用了MAX1169EVKIT,包括:MAX1169、输入缓冲器(MAX4430)和经过验证
[应用]
凌特推出具有板载ADC的四通道I2C热插拔控制器
凌特公司推出的新型四电源热插拔(Hot Swap)控制器LTC4245具有8位片上ADC和I2C兼容接口。LTC4245拥有支持3.3V、5V和±12V CompactPCI或12V、3.3V和辅助3.3V PCI Express的灵活性,通过测量板卡电压、电流和记录故障状态提供集成的数字电源监视功能。 在这样的高可用性系统中,仔细监视电源分配网络是否处于正常状态及其统一性是至关重要的。对于每个电源而言,ADC寄存器中的信息均可以通过I2C总线来查询,以确定板卡的工作状态是否正常。LTC4245对凌特公司的单通道LTC4215以及高压正和负48V热插拔控制器LTC4260和LTC4261起到了补充作用,这两款高压器件也具有片上A
[新品]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved