• STM32F412应用开发笔记之七:片上ADC的应用测试


    在我们的应用项目中需要采集一些模拟量,这些量使用MCU自带的ADC就可以满足要求。在NUCLEO-F412ZG实验板上的STM32F412ZG有一个16通道的ADC,我们试验用它采集几个数据。

    在NUCLEO-F412ZG实验板上,ADC1的第10通道(PC0)和第13通道(PC3)分别引到了CN9-3和CN9-5上。如下图红框所示:

    我们利用这两个通道采集信号,一个定义为24VDC电源的检测,一个定义为5VDC电源的检测。同时采集MCU集成的内部温度传感器采集和内部参考电压采集。具体通道选择如下:

     

    为了方便操作,我们在STM32CubeMX中进行ADC1的配置,打开“ADC1 Configuration”界面,选择“GPIO Settings”标签,配置对应的GPIO如下:

     

    由于我们使用DMA来进行ADC1的采集,所以我们打开DMA标签进行DMA配置:

     

    配置完成后,我们生成项目源码,发现配置文件如下:

    /* ADC1 init function */

    static void MX_ADC1_Init(void)

    {

      ADC_ChannelConfTypeDef sConfig;

        /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)

        */

      hadc1.Instance = ADC1;

      hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;

      hadc1.Init.Resolution = ADC_RESOLUTION_12B;

      hadc1.Init.ScanConvMode = DISABLE;

      hadc1.Init.ContinuousConvMode = DISABLE;

      hadc1.Init.DiscontinuousConvMode = DISABLE;

      hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

      hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

      hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

      hadc1.Init.NbrOfConversion = 1;

      hadc1.Init.DMAContinuousRequests = DISABLE;

      hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

      if (HAL_ADC_Init(&hadc1) != HAL_OK)

      {

        Error_Handler();

      }

        /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.

        */

      sConfig.Channel = ADC_CHANNEL_10;

      sConfig.Rank = 1;

      sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;

      if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)

      {

        Error_Handler();

      }

    }

    在这段初始化代码中,通过HAL_ADC_Init函数来初始化,在HAL_ADC_Init函数中有调用了HAL_ADC_MspInit函数。这个函数需要我们自己编写,然后共系统回调。其内容主要是对通道10和通道13的GPIO引脚进行初始化配置。

    配置完成后我们便写数据处理相关的函数,比如数据平滑处理、量程转化等。其实我们2个通道的采集信号是一样的,都是采用5V的信号分要产生。由于在NUCLEO-F412ZG实验板上ADC的参考电压接到电源,也就是3.3VDC所以输入信号不能超多3.3VDC。我们使用电阻分压将信号转为2.5VDC然后采集。完成后运行调试:

     

    最后来看一看采集到的结果,我们将通道10的物理量程设为24,通道13的物理量程设为5,加上MCU内核温度和内核参考电压,共4个信号:

     

    由上图我们可以看到STM32F412ZG自带的ADC采集精度还是非常高的,在大多数情况下已经足够了。

  • 相关阅读:
    testng 控制case运行顺序
    0518 Scrum 项目 5.0
    0506团队项目Scrum 项目1.0
    0429团队项目Scrum团队成立
    0429团队项目对师姐的软件的一些改进
    0422团队项目:二次开发
    0511团队项目2.0产品product backlog
    实验三进程调度模拟程序
    0517 SCRUM团队项目4.0
    0512 SCRUM团队项目3.0
  • 原文地址:https://www.cnblogs.com/foxclever/p/6261698.html
Copyright © 2020-2023  润新知