查看: 4987|回复: 0

[分享] LPC55S69之ADC

[复制链接]
  • TA的每日心情
    开心
    2025-7-10 13:07
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    56

    主题

    548

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1528

    热心会员

    最后登录
    2025-7-23
    发表于 2020-4-7 10:06:42 | 显示全部楼层 |阅读模式
    LPC55S69之ADC


    NXP提供的LPC55S69资料不是十分的完善,给的例子是单通道ADC,运行没问题,但是多通道ADC采样就有点问题了。


    多通道ADC需要按照以下配置方式。


    一、引脚。
    1.png
    二、外设。


    添加ADC外设。
    2.png
    通用配置。
    3.png
    命令1。
    4.png
    命令2。
    5.png
    命令3。
    6.png
    触发0。
    7.png
    触发1。
    8.png
    触发2。
    9.png
    触发3。
    10.png
    中断配置默认即可。
    11.png
    说明。


    一个命令对应一个触发,触发中的Target Comand ID就是对应于命令中的Comand ID。


    理论上3个命令是对应3个触发,但是这里用了4个触发(可能是固件库的问题)。


    第4个触发和第3个触发是一样的功能,只是触发号不同。


    三、代码。


    在上一步配置完成了,需要点击“更新源代码”。
    12.png
    这样,peripherals.c会按照之前的配置更新,这个是只读文件,不能直接在该文件中修改,需要在”外设“、”引脚“、”时钟“、”TEE“,四个配置窗口中修改,再更新过来。
    13.png
    第一个图片是开发,就是写代码的界面,第二个是”引脚“,第三个是”时钟“,第四个是”外设“,第五个是”TEE“。
    14.png
    修改工程中Source中的源文件,根据你的工程名不同而不同。
    15.png
    1. <font size="3" face="微软雅黑">#include "fsl_debug_console.h"
    2. #include "board.h"
    3. #include "fsl_lpadc.h"
    4. #include "peripherals.h"
    5. #include "clock_config.h"
    6. #include "pin_mux.h"
    7. #include "fsl_power.h"

    8. int main(void) {
    9.     lpadc_conv_result_t mLpadcResultConfigStruct;

    10.     CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
    11.     BOARD_InitPins();
    12.     BOARD_BootClockPLL150M();
    13.     BOARD_InitDebugConsole();
    14.     BOARD_InitBootPeripherals();
    15.     CLOCK_SetClkDiv(kCLOCK_DivAdcAsyncClk, 16U, true);
    16.     CLOCK_AttachClk(kMAIN_CLK_to_ADC_CLK);
    17.     POWER_DisablePD(kPDRUNCFG_PD_LDOGPADC);

    18.     PRINTF("Please press any key to get user channel's ADC value.\r\n");
    19.         while (1) {
    20.         GETCHAR();

    21.         LPADC_DoSoftwareTrigger(ADC0_PERIPHERAL, 1U); /* 1U对应触发0*/
    22.         while (!LPADC_GetConvResult(ADC0_PERIPHERAL, &mLpadcResultConfigStruct, 0U)) {}
    23.         if(mLpadcResultConfigStruct.triggerIdSource == 0) { /*触发0的结果*/
    24.                 PRINTF("CH0 ADC0_P PIO0_23: %d\r\n", ((mLpadcResultConfigStruct.convValue) >> 3U));
    25.         }

    26.         LPADC_DoSoftwareTrigger(ADC0_PERIPHERAL, 2U); /* 2U对应触发1*/
    27.         while (!LPADC_GetConvResult(ADC0_PERIPHERAL, &mLpadcResultConfigStruct, 0U)) {}
    28.         if(mLpadcResultConfigStruct.triggerIdSource == 1) {
    29.                 PRINTF("CH2 PIO0_15_GPIO_ARD PIO0_15: %d\r\n", ((mLpadcResultConfigStruct.convValue) >> 3U));
    30.         }

    31.         LPADC_DoSoftwareTrigger(ADC0_PERIPHERAL, 4U); /* 4U对应触发3*/
    32.         while (!LPADC_GetConvResult(ADC0_PERIPHERAL, &mLpadcResultConfigStruct, 0U)) {}
    33.         if(mLpadcResultConfigStruct.triggerIdSource == 2) {
    34.                 PRINTF("CH12 PIO1_9_GPIO_ARD PIO1_9: %d\r\n", ((mLpadcResultConfigStruct.convValue) >> 3U));
    35.         }
    36.     }
    37. }</font>
    复制代码
    点击Debug,调试。
    16.png
    在控制台中,输入个回车。
    17.png
    得到ADC采样的数据,这里没有转换为电压。参考电压是3.3V。


    四、其它问题。


    笔者尝试ADC0的通道8,但是在NXP的开发板上,采不到数据。


    LPC55S69的内部温度传感器也是用ADC实现的,可以使用官方提供的例子,只有在例子中的工程才能打印浮点数。


    自己新建工程打印不了浮点数,尽管配置和代码一样。






    文章出处:点击


    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-12 04:08 , Processed in 0.079055 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表