请选择 进入手机版 | 继续访问电脑版
查看: 3777|回复: 11

[求助] LPC51U68 ADC问题

[复制链接]
  • TA的每日心情
    开心
    2020-12-28 15:52
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    2

    主题

    33

    帖子

    0

    注册会员

    Rank: 2

    积分
    172
    最后登录
    2020-12-29
    发表于 2020-1-10 16:22:30 | 显示全部楼层 |阅读模式
    我使用的是LPC51U68BD48(就是48PIN封装),我将使用ADC通道2(P),但发现配置后PIN脚为高电平(3.3V),怀疑是内部拉高了?时钟有问题?...现在我想知道ADC配置过程和使用方式,是否下面附上我的配置代码
    /*******************************************************************************
    * Definitions
    ******************************************************************************/
    #define DEMO_ADC_BASE ADC0
    #define DEMO_ADC_SAMPLE_CHANNEL_NUMBER 2U
    #define DEMO_ADC_CLOCK_DIVIDER 0U

    void ADC_InitPins(void)
    {
      const uint32_t port0_pin31_config = (
        IOCON_PIO_FUNC0 |                                        /* Pin is configured as ADC */
        IOCON_PIO_MODE_INACT |                                   /* No addition pin function */
        IOCON_PIO_INV_DI |                                       /* Input function is not inverted */
        IOCON_PIO_DIGITAL_OFF |                                  /* Disable digital function */
        IOCON_PIO_INPFILT_OFF |                                  /* Input filter disabled */
        IOCON_PIO_SLEW_STANDARD |                                /* Standard mode, output slew rate control is enabled */
        IOCON_PIO_OPENDRAIN_DI                                   /* Open drain is disabled */
      );
      IOCON_PinMuxSet(IOCON, PORT0_IDX, PIN31_IDX, port0_pin31_config); /* PORT0 PIN31 (coords: 9 is configured as ADC */
    }

    void ADC_Initialize(void)
    {
            /* Initialize board hardware. */
            /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
            CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

            /* Enable the power and clock for ADC. */
            ADC_ClockPower_Configuration();
            /* Calibration after power up. */
            ADC_DoSelfCalibration(DEMO_ADC_BASE);
            /* Configure the converter and work mode. */
            ADC_Configuration();
    }


    void main()
    {
      ADC_InitPins();
      ADC_Initialize();

      While(1)
      {
       ADC_DoSelfCalibration(DEMO_ADC_BASE);
       ADC_DoSoftwareTriggerConvSeqA(DEMO_ADC_BASE); /* Trigger the ADC and start the conversion. */
       /* Wait for the converter & transfer to be done. */
       while (!ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER, &adcResultInfoStruct))
       {               
       }
       ADC_Result=adcResultInfoStruct.result*330/g_Adc_12bitFullRange;
      }
    }


    最佳答案

      IOCON-&gtIO[0][31] = ((IOCON-&gtIO[0][31] &     (~(IOCON_PIO_FUNC_MASK | IOCON_PIO_MODE_MASK | IOCON_PIO_DIGIMODE_MASK))) /* Mask bits to zero which are setting */   &nb ...
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-28 15:52
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    2

    主题

    33

    帖子

    0

    注册会员

    Rank: 2

    积分
    172
    最后登录
    2020-12-29
     楼主| 发表于 2020-1-11 10:55:20 | 显示全部楼层
    emmm~没人吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    679

    主题

    6336

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    21773
    最后登录
    2024-10-12
    发表于 2020-1-13 09:57:15 | 显示全部楼层
    ADC测试结果是如何呢?!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-28 15:52
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    2

    主题

    33

    帖子

    0

    注册会员

    Rank: 2

    积分
    172
    最后登录
    2020-12-29
     楼主| 发表于 2020-1-13 13:28:19 | 显示全部楼层
    测试结果是检测值一直在跳变,不稳定,并且在PIN脚悬空状态下也有一个值存在,猜测可能是个虚假信号
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-28 15:52
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    2

    主题

    33

    帖子

    0

    注册会员

    Rank: 2

    积分
    172
    最后登录
    2020-12-29
     楼主| 发表于 2020-1-13 13:31:38 | 显示全部楼层
    小恩GG 发表于 2020-1-13 09:57
    ADC测试结果是如何呢?!


    测试结果是检测值一直在跳变,不稳定,并且在PIN脚悬空状态下也有一个值存在,猜测可能是个虚假信号
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1368 天

    [LV.10]以坛为家III

    91

    主题

    4366

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9331
    最后登录
    2024-10-9
    发表于 2020-1-13 16:49:25 | 显示全部楼层
    之前在测试时,如果ADC引脚悬空,其值是跳动的。
    即使正常连接阻性传感器,而未加电容滤波,其值也会是跳动的——无法通过软件去除
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    679

    主题

    6336

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    21773
    最后登录
    2024-10-12
    发表于 2020-1-14 10:49:12 | 显示全部楼层
    evinyi 发表于 2020-1-13 13:31
    测试结果是检测值一直在跳变,不稳定,并且在PIN脚悬空状态下也有一个值存在,猜测可能是个虚假信号 ...

    我看到你上面的代码在while里一直触发ADC采样,采样结果一直跳变是正常的,只要在一个合理的范围之内。
    即使采样一个悬空的引脚也是会有采样结果的,当然这正如你说的是一个‘虚假信号’
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-28 15:52
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    2

    主题

    33

    帖子

    0

    注册会员

    Rank: 2

    积分
    172
    最后登录
    2020-12-29
     楼主| 发表于 2020-1-14 11:44:57 | 显示全部楼层
    小恩GG 发表于 2020-1-14 10:49
    我看到你上面的代码在while里一直触发ADC采样,采样结果一直跳变是正常的,只要在一个合理的范围之内。
    ...

    感谢您的回答!
    现在我有一个疑问,当我将引脚配置成ADC模式后,引脚会处于高电平状态(外部无电平输入),是否MCU内部默认为上拉?如果是,是否需要配置成下拉->配置方法是先配成GPIO,进行下拉动作,再配成ADC模式?因为我发现如果我将电路整流为直流后无法控制引脚状态,测试值也一直处于一个范围内,无法当作条件使用。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    679

    主题

    6336

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    21773
    最后登录
    2024-10-12
    发表于 2020-1-15 09:41:42 | 显示全部楼层
    引脚的默认状态却为弱上拉,配置成ADC引脚时,你可以将其配置为Inactive (no pull-down/pull-up resistor enabled)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    843

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4088
    最后登录
    2024-9-30
    发表于 2020-1-15 15:42:18 | 显示全部楼层
      IOCON->IO[0][31] = ((IOCON->IO[0][31] &
        (~(IOCON_PIO_FUNC_MASK | IOCON_PIO_MODE_MASK | IOCON_PIO_DIGIMODE_MASK))) /* Mask bits to zero which are setting */
          | IOCON_PIO_FUNC(PIO031_FUNC_ALT0)                     /* Selects pin function.: PORT031 (pin 13) is configured as ADC0_2 */
          | IOCON_PIO_MODE(PIO031_MODE_INACTIVE)                 /* Selects function mode (on-chip pull-up/pull-down resistor control).: Inactive. Inactive (no pull-down/pull-up resistor enabled). */
          | IOCON_PIO_DIGIMODE(PIO031_DIGIMODE_ANALOG)           /* Select Analog/Digital mode.: Analog mode. */
        );

    感觉你没是能PIN上的模拟模式,见我贴的这个,最好用我们的MCUXpresso Config Tool生成Pin的配置
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-10-14 11:05 , Processed in 0.154433 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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