11.4 ADC项目:单通道电压采样

# 11.4 ADC项目:单通道电压采样

本实验通过STM32的ADC模块实现单通道电压采集,结合OLED实时显示电压值,覆盖独立模式与连续模式两种采样方式。核心功能

  • 独立模式:手动触发单次采样,适用于低功耗或精准触发场景。
  • 连续模式:自动循环采样,适合实时监测动态信号。

# 11.4.1 硬件电路设计

# 电位器连接与ADC通道

  • 电位器电路:开发板集成滑动变阻器,动触点连接至ADC1通道6(PA6),输出0~3.3V模拟电压。
  • 电压转换公式

开发板电位器部分原理图

# 11.4.2 STM32CubeMX配置

# 1. 基础配置

  • 工程设置:芯片型号 STM32F103C8T6,主频72MHz,调试接口SWD。
  • ADC1配置
    • 通道:PA6(ADC1_IN6)
    • 分辨率:12位
    • 采样时间:239.5 Cycles
配置ADC1

# 2. I²C配置(OLED驱动)

  • 模式:Speed Mode
  • 引脚:PB6(SCL)/PB7(SDA)

# 11.4.3 软件设计

# 独立单通道模式

# 1. ADC初始化(代码清单11-3)

static void MX_ADC1_Init(void) {
  hadc1.Instance = ADC1;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;   // 12位分辨率
  hadc1.Init.ScanConvMode = DISABLE;           // 禁用扫描模式
  hadc1.Init.ContinuousConvMode = DISABLE;     // 单次转换模式
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
  // ...其他参数保持默认
  if (HAL_ADC_Init(&hadc1) != HAL_OK) {
    Error_Handler();
  }
}
1
2
3
4
5
6
7
8
9
10
11

# 2. 主循环采样与显示(代码清单11-4)

while (1) {
  HAL_ADC_Start(&hadc1);                        // 启动转换
  HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); // 阻塞等待
  uint32_t value = HAL_ADC_GetValue(&hadc1);    // 读取原始值
  float voltage = (value / 4095.0) * 3.3;       // 计算电压
  sprintf(Message, "ADC: %d %.2fV", value, voltage);
  OLED_NewFrame();
  OLED_PrintString(0, 0, Message, &font16x16, OLED_COLOR_NORMAL);
  OLED_ShowFrame();
  HAL_Delay(500);                               // 延时500ms
}
1
2
3
4
5
6
7
8
9
10
11

# 连续单通道模式

# 1. 配置差异

  • CubeMX设置:启用 Continuous Conversion Mode<img src="/images/11/media/image5.png" alt="使能连续转换模式" style="width: 75%; height: auto; display: block; margin: 0 auto;"/>

# 2. 主循环逻辑(代码清单11-6)

while (1) {
  uint32_t value = HAL_ADC_GetValue(&hadc1);    // 直接读取数据
  float voltage = (value / 4095.0) * 3.3;       // 计算电压
  sprintf(Message, "ADC: %d %.2fV", value, voltage);
  OLED_NewFrame();
  OLED_PrintString(0, 0, Message, &font16x16, OLED_COLOR_NORMAL);
  OLED_ShowFrame();
  HAL_Delay(500);                               // 刷新间隔
}
1
2
3
4
5
6
7
8
9

# 11.4.4 下载验证

# 步骤与现象

  1. 硬件连接
    • 确保电位器正确接入PA6,OLED通过I²C连接。
  2. 烧录程序
    • 独立模式:需手动触发采样(调用 HAL_ADC_Start)。
    • 连续模式:上电后自动开始采样。
  3. 功能验证
    • 旋转电位器,OLED实时显示ADC原始值及电压(如 ADC: 1899 1.53V)。
硬件实现结果

关键说明

  • ADC参考电压需与实际供电电压一致(默认3.3V)。
  • 浮点运算需启用FPU支持(CubeMX中配置)。
  • 连续模式无需频繁触发,适合实时监测场景。