120|0

131

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【MCXA156开发板测评】-2-ADC [复制链接]

本帖最后由 慕容雪花 于 2025-1-9 10:25 编辑

MCXA156具有非常强大的模拟外设ADC (2路16 bit ADC0与ADC1)与一路12 bit DAC,还配有一路运放单元,2路LPCMP,还有一个温度传感器。

 

ADC有ADC0与ADC1.

   

 

 

开发板的mikro-bus接口上引出了I2C接口可以后续驱动OLED,还有个ADC引脚P3_30: ANALOG-ADC1_A21,可以作为数据采集入口。

 

 

 

温度传感器TMP235介绍
Adafruit退出的TMP235温度传感器有三个引脚,分别是GND, VCC和模拟温度信号。其中,模块可以3v-5v供电,在外界温度为-50°C时,模拟温度信号的输出为0v;在外界温度为125°C时,模拟温度信号的输出为1.75v
此外,手册还提供了一个通过电压计算温度的公式: Temp °C = 100*(reading in V) - 50。因此,接下来通过ADC获取温度值后,可以方便的进行温度监测等后续功能开发。

 

 

硬件实物连接图:

 

 

在代码中指定使用ADC1_A21通道:

#define DEMO_LPADC_BASE                  ADC1
#define DEMO_LPADC_USER_CHANNEL          21U
#define DEMO_LPADC_USER_CMDID            1U                          /* CMD1 */
#define DEMO_LPADC_VREF_SOURCE           kLPADC_ReferenceVoltageAlt3 /* VDDA */
#define DEMO_LPADC_DO_OFFSET_CALIBRATION true
#define DEMO_LPADC_USE_HIGH_RESOLUTION   true

使用ADC模块的第一步是初始化一个ADC默认配置结构体。

    LPADC_GetDefaultConfig(&mLpadcConfigStruct);
    mLpadcConfigStruct.enableAnalogPreliminary = true;
#if defined(DEMO_LPADC_VREF_SOURCE)
    mLpadcConfigStruct.referenceVoltageSource = DEMO_LPADC_VREF_SOURCE;
#endif /* DEMO_LPADC_VREF_SOURCE */
#if defined(FSL_FEATURE_LPADC_HAS_CTRL_CAL_AVGS) && FSL_FEATURE_LPADC_HAS_CTRL_CAL_AVGS
    mLpadcConfigStruct.conversionAverageMode = kLPADC_ConversionAverage128;
#endif /* FSL_FEATURE_LPADC_HAS_CTRL_CAL_AVGS */
    LPADC_Init(DEMO_LPADC_BASE, &mLpadcConfigStruct);

其中,enableAnalogPreliminary是预先使能ADC相关的模拟电路从而快速开始转换,代价是较高的电流消耗。

    bool enableAnalogPreliminary; /*!< ADC analog circuits are pre-enabled and ready to execute conversions without
                                       startup delays(at the cost of higher DC current consumption). */

其次,mLpadcConfigStruct.conversionAverageMode = kLPADC_ConversionAverage128,是在存储转换结果之前在硬件电路上进行均值处理。

 
 

接下来配置ADC转换命令:

    LPADC_GetDefaultConvCommandConfig(&mLpadcCommandConfigStruct);
    mLpadcCommandConfigStruct.channelNumber = DEMO_LPADC_USER_CHANNEL;
#if defined(DEMO_LPADC_USE_HIGH_RESOLUTION) && DEMO_LPADC_USE_HIGH_RESOLUTION
    mLpadcCommandConfigStruct.conversionResolutionMode = kLPADC_ConversionResolutionHigh;
#endif /* DEMO_LPADC_USE_HIGH_RESOLUTION */
    LPADC_SetConvCommandConfig(DEMO_LPADC_BASE, DEMO_LPADC_USER_CMDID, &mLpadcCommandConfigStruct);

设置触发方式:

    /* Set trigger configuration. */
    LPADC_GetDefaultConvTriggerConfig(&mLpadcTriggerConfigStruct);
    mLpadcTriggerConfigStruct.targetCommandId       = DEMO_LPADC_USER_CMDID;
    mLpadcTriggerConfigStruct.enableHardwareTrigger = false;
    LPADC_SetConvTriggerConfig(DEMO_LPADC_BASE, 0U, &mLpadcTriggerConfigStruct); /* Configurate the trigger0. */

获取ADC转换结果并打印:

        while (!LPADC_GetConvResult(DEMO_LPADC_BASE, &mLpadcResultConfigStruct))
        {
        }
        static uint32_t tempAdcRaw;
		static float tempAdcVolt;
		static float Temp;
		tempAdcRaw = ((mLpadcResultConfigStruct.convValue) >> g_LpadcResultShift);
		tempAdcVolt = 3.3*tempAdcRaw/65536;
		Temp = (100.0*tempAdcVolt-50);
        PRINTF("ADC value: %d, Voltage: %.3f Volt, Temperature_C: %.2f degree_C\r\n", tempAdcRaw, tempAdcVolt, Temp);

烧录测试:

 

 

采样电压值跟温度均为浮点数,没有正常显示,猜测是跟浮点数打印相关的开关没有使能。在fsl_debug_console.h中:

/*! [url=home.php?mod=space&uid=159083]@brief[/url] Definition to printf the float number. */
#ifndef PRINTF_FLOAT_ENABLE
#define PRINTF_FLOAT_ENABLE 1U
#endif /* PRINTF_FLOAT_ENABLE */

再次测试,能够正常获取温度:

 

 

 

此帖出自NXP MCU论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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