3005|4

170

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

TI【LP_MSPM0L1306开发板】测评——ADC使用以及示例学习 [复制链接]

  本帖最后由 EPTmachine 于 2023-10-15 13:47 编辑

ADC使用和示例学习

MSPM0L1306在TI的产品推荐中时针对低功耗的模拟增强型产品,其ADC模块的特性包括:

• 12 位输出分辨率,速率高达 1.45MSPS 且 ENOB 大于 11 位

• 多达 10 个外部输入通道

• 内部通道用于温度检测、电源监测和模拟信号链(与 OPA、GPAMP 或其他的互连)

• 软件可选基准:

– 1.4V 和 2.5V 的可配置内部专用 ADC 基准电压 (VREF)

– MCU 电源电压 (VDD)

– 通过 VREF+和 VREF- 引脚为 ADC 提供外部基准

• 在运行、睡眠和停止模式下运行,并支持从待机模式触发

硬件概述

在数据手册中可以确定各个通道的信号映射关系如下图

在TI提供的示例程序中,对ADC在不同配置模式下的使用给出了示例代码,这可以帮助我们快速上手ADC的使用。关于具体原理可以参考MSPM0的用户手册。

ADC单次采样

代码示例adc12_single_conversion_vref_internal演示了使用ADC进行单次采样,采样完成后,读取转接结果寄存器中的值,当测量值大于参考电压的一半时,点亮LED1,当测量值小于参考电压的一半时,熄灭LED1。

ADC的参考电压选择为内部参考电压2.5V。

由于代码示例在上电后使用默认时钟频率

默认 CPU 时钟为 MCLK = SYSOSC ~32MHz。默认 LFCLK = LFOSC ~32kHz。ADCCLK 通过 ADC 模块初始化设置为 SYSOSC。

在原理图上可以确定LED1连接在PA0上,PA0为低电平时,LED1点亮。

在SysConfig中对PA0的配置如下图所示

在SysConfig中对ADC0的参数进行配置,时钟源选择为SYSISC,对其进行8分频,采样时间设置为500ADCCLK。采样模式为单次采样,触发方式为软件触发。

ADC转换时使用控制块0,转换通道为12,分辨率选择为12位分辨率,开启转换结果完成中断,具体的配置如下图所示。

通过查看数据手册可知,该通道对应的管脚为PA25。

主程序的实现逻辑位等待ADC采样中断函数置位相关的控制变量,然后读取转换结果寄存器中的ADC采样值,由于分辨率位12,采样值的变化范围为0-4096,所以量程范围内的中间值为0x7FF(2047),采样结果与该值对比,大于该值点亮LED1,小于该值熄灭LED1。然后启动下一次ADC采样。代码如下所示:

#include "ti_msp_dl_config.h"

volatile bool gCheckADC;

uint16_t adcResult;

int main(void)
{
    adcResult=0;

    SYSCFG_DL_init();

    NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

    gCheckADC = false;

    /* Confirm VREF has settled before triggering ADC12 conversion */
    while (DL_VREF_CTL1_READY_NOTRDY == DL_VREF_getStatus(VREF))
        ;

    while (1) {
        DL_ADC12_startConversion(ADC12_0_INST);

        while (false == gCheckADC) {
            //__WFE();
        }

        adcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);

        if (adcResult > 0x7ff) {
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        } else {
            DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        }
        gCheckADC = false;
        DL_ADC12_enableConversions(ADC12_0_INST);
    }
}

void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
        case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
            gCheckADC = true;
            break;
        default:
            break;
    }
}

使用信号发生器在PA25引脚输入模拟信号,示例的效果视频如下:

adc_ref

 

ADC窗口比较模式

MSPM0的ADC模块具有比较器功能,设置比较器的上限值和下限值,完成采样后的采样值与这两个值进行对比。在SysConfig中,控制LED1的PA0的配置如图所示。

ADC的采样时钟为SYSOSC,分频系数设置为4,采样模式为软件自动触发的单次采样。

ADC的转换控制块选择为0,参考电压选择为VDDA(3.3V),启用比较器模式。

设置比较器的上限值和下限值为同一数值,同时开启比较器阈值判断中断。

主程序的逻辑在初始化外设并开启ADC采样后,等待比较器中断发生,并在中断函数改变LED1控制引脚的状态。主程序的源代码如下:

#include "ti_msp_dl_config.h"

int main(void)
{
    SYSCFG_DL_init();

    NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

    DL_ADC12_startConversion(ADC12_0_INST);

    DL_SYSCTL_enableSleepOnExit();

    while (1) {
        __WFI();
    }
}

void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
        case DL_ADC12_IIDX_WINDOW_COMP_HIGH:
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
            break;
        case DL_ADC12_IIDX_WINDOW_COMP_LOW:
            DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
            break;
        default:
            break;
    }
}

程序的演示效果如视频所示:

adc_single

 

总结

MSPM0的ADC模块除了基本的ADC采样功能外,提供了额外的高级比较功能,可以以更少的CPU资源来实现相同的功能,目前对其功能进行了简单的了解,网站上丰富的示例工程展示了不同的ADC应用,可以帮助用户快速上手ADC的使用。

此帖出自MSPM0 MCU论坛

最新回复

有没有朋友实现多个采样通道+DMA传输的呢   详情 回复 发表于 2024-8-18 18:31
点赞 关注
 
 

回复
举报

6872

帖子

11

TA的资源

版主

沙发
 

网站上丰富的示例工程展示了不同的ADC应用,可以帮助用户快速上手ADC的使用。

认真学习了其中的一个。

此帖出自MSPM0 MCU论坛

点评

TI的文档做的确实很贴心,结合开发手册和示例程序,开发者可以很快地实现相应地功能。  详情 回复 发表于 2023-10-15 21:29
 
 
 

回复

170

帖子

3

TA的资源

一粒金砂(高级)

板凳
 
lugl4313820 发表于 2023-10-15 20:46 网站上丰富的示例工程展示了不同的ADC应用,可以帮助用户快速上手ADC的使用。 认真学习了其中的一个。

TI的文档做的确实很贴心,结合开发手册和示例程序,开发者可以很快地实现相应地功能。

此帖出自MSPM0 MCU论坛

点评

分布讲解的也很细致,重要的是还有中文文档,就是有时候在线查询那里连接不稳定  详情 回复 发表于 2023-10-16 08:27
 
 
 

回复

6247

帖子

9

TA的资源

版主

4
 
EPTmachine 发表于 2023-10-15 21:29 TI的文档做的确实很贴心,结合开发手册和示例程序,开发者可以很快地实现相应地功能。

分布讲解的也很细致,重要的是还有中文文档,就是有时候在线查询那里连接不稳定

此帖出自MSPM0 MCU论坛
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

39

帖子

2

TA的资源

一粒金砂(中级)

5
 

有没有朋友实现多个采样通道+DMA传输的呢

此帖出自MSPM0 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表