【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块

2024-07-19 1709阅读

一、电位器模块

(1)资源介绍

        🔅原理图 

        蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2,所有拓展模块均可直接安装在 Lora 终端上使用;

【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块 图1        拓展接口

         电位器模块电路原理图如下所示:

【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块 图2        电位器模块电路原理图

         通过两张电路图连接可知,引脚资源配置情况为:

表1 引脚资源配置情况
Pot & LEDMCU
AIN1PB1
AIN2PB0
LD1PB6
LD2PB7
        🔅采集原理

        在 STM32L071 系列微控制器中嵌入了原生的12位模数转换器,通过硬件过采样扩展到16位模数转换器。它有多达19个多路复用通道,允许它测量来自16个外部和3个内部来源的信号。各种通道的 A/D 转换可以在单、连续、扫描或不连续模式下进行。ADC的结果存储在左对齐或右对齐的16位数据寄存器中。

        16个外部通道在转换时分为注入通道和规则通道:

  • 规则通道:

            最多有16路,相当于正常运行的程序,平时ADC的转换都是使用规则通道来实现的;

    • 注入通道:

              最多有4路,相当于中断,当注入通道需要转换时,规则通道的转换就会停止,优先执行注入通道的转换,当注入通道转换完成后,再继续执行规则通道的转换。

      (2)STM32CubeMX 软件配置

      🔅“工程建立、时钟树配置、Debug 串行线配置、代码生成配置” 在下文中有讲解,这里不再赘述❗️

      【蓝桥杯——物联网设计与开发】基础模块1- GPIO输出【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块https://blog.csdn.net/m0_63116406/article/details/135604705?spm=1001.2014.3001.5502

      1️⃣点击 "Analog" → 点击 "ADC"→勾选通道 "IN8" 和 "IN9";

      【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块 图3        ADC通道配置

      2️⃣在 "ADC" 的参数设置栏中,找到 "Low Power Auto wait" 并选择 "Enabled" 进行使能;

      【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块 图4        修改ADC配置

      3️⃣初始化 OLED;(配置步骤在下文中有讲解,这里不再赘述);

      【蓝桥杯——物联网设计与开发】基础模块6 - OLED

      4️⃣生成代码即可;

      (3)代码编写

      🟢️main 函数

      /* USER CODE BEGIN Includes */
      #include 
      #include "oled.h"
      /* USER CODE END Includes */
      /* USER CODE BEGIN PV */
      uint8_t puc_oled[17];	// OLED显示数组
      uint16_t pui_adc[2];	// ADC采集数组
      /* USER CODE END PV */
      /**
        * @brief  The application entry point.
        * @retval int
        */
      int main(void)
      {
        /* USER CODE BEGIN 1 */
        /* USER CODE END 1 */
        /* MCU Configuration--------------------------------------------------------*/
        /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
        HAL_Init();
        /* USER CODE BEGIN Init */
        /* USER CODE END Init */
        /* Configure the system clock */
        SystemClock_Config();
        /* USER CODE BEGIN SysInit */
        /* USER CODE END SysInit */
        /* Initialize all configured peripherals */
        MX_GPIO_Init();
        MX_ADC_Init();
        MX_I2C3_Init();
        /* USER CODE BEGIN 2 */
      	/* OLED初始化 */
      	OLED_Init();
      	/* ADC校正 */
      	HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);
        /* USER CODE END 2 */
        /* Infinite loop */
        /* USER CODE BEGIN WHILE */
        while (1)
        {
      		/* 启动ADC */
      		HAL_ADC_Start(&hadc);
      		/* ADC转换 */
      		if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
      			pui_adc[1]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
      		if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
      			pui_adc[0]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
      		/* OLED显示 */
      		sprintf((char*)puc_oled, "RP1:%.2fV", pui_adc[0] * 3.3 / 4095);
      		OLED_ShowString(0, puc_oled);
      		sprintf((char*)puc_oled, "RP2:%.2fV", pui_adc[1] * 3.3 / 4095);
      		OLED_ShowString(2, puc_oled);
      		HAL_Delay(200);
          /* USER CODE END WHILE */
          /* USER CODE BEGIN 3 */
        }
        /* USER CODE END 3 */
      }

      (4)实验现象

              旋转旋钮,对应的电压值发生变化。


      二、ADC接口函数封装

      🟡️ADC初始化校正

      /* ADC校正 */
      HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED);

              ⚠️该函数调用放在ADC初始化函数中。若不进行校正,会导致采集的电压值有误!

      🟡️ADC采集函数

      void ADC_Colt(uint16_t *puc_adc)
      {
      	/* 启动ADC */
      	HAL_ADC_Start(&hadc);
      	/* ADC转换 */
      	if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
      		puc_adc[1]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
      	if(HAL_ADC_PollForConversion(&hadc, 10) == HAL_OK)
      		puc_adc[0]= HAL_ADC_GetValue(&hadc);		// 读取ADC值
      }

      🔴ADC采集接口函数调用实例

      /* 采集任务函数 */
      void Task_Colt(void)
      {
      	/* 200ms进入一次 */
      	if(cnt_colt  
      

      三、踩坑日记

      (1)LowPowerAutoWait模式

              🔅LowPowerAutoWait:配置是否使用低功耗自动延迟等待模式,*可选参数为 ENABLE 和DISABLE,当使能时,仅当一组内所有之前的数据已处理完毕时,才开始新的转换,适用于低频应用。该模式仅用于 ADC 的轮询模式,不可用于 DMA 以及中断。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]