news 2026/4/14 17:01:25

别再只测电源电压了!用GD32的ADC读取电位器、光敏电阻,做个简易传感器采集系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再只测电源电压了!用GD32的ADC读取电位器、光敏电阻,做个简易传感器采集系统

用GD32构建智能传感器采集系统:从电位器到光敏电阻的实战指南

在嵌入式开发中,ADC(模数转换器)常被简化为电压测量工具,但它的真正价值在于将现实世界的连续变化转化为数字系统的可处理信号。想象一下:通过旋转电位器控制设备参数,或是让系统自动感知环境光照变化——这些场景远比测量固定电源电压更有意义。本文将带您突破基础ADC应用的局限,用GD32构建一个完整的传感器采集系统,涵盖电路设计、代码实现到数据可视化的全流程。

1. 传感器与分压电路设计

1.1 电位器连接方案

电位器作为最基础的模拟输入设备,其阻值变化可转化为电压信号。典型连接方式如下:

3.3V ────┬─────── ADC输入 │ [R1] 电位器上半部分 │ ┌┴┐ │ │ 电位器滑动端 └┬┘ │ [R2] 电位器下半部分 │ GND ─────┴───────

关键参数计算

  • 当电位器旋转至中点时:Vout = 3.3V × (R2)/(R1+R2) = 1.65V
  • ADC分辨率:3.3V/4096 ≈ 0.8mV(12位ADC)

提示:选择10kΩ线性电位器可平衡功耗与信号稳定性,避免使用低于1kΩ的型号以防电流过大。

1.2 光敏电阻应用电路

光敏电阻的阻值随光照强度变化,典型值从黑暗时的几MΩ到强光下的几百Ω。推荐分压电路:

// 光敏电阻与固定电阻的分压计算 const float R_fixed = 10.0; // 固定电阻值(kΩ) float Vout = adc_value * 3.3 / 4095; float R_ldr = R_fixed * (3.3 - Vout) / Vout; // 光敏电阻值(kΩ)

实际电路连接示例:

元件参数连接方式
光敏电阻GL5528一端接3.3V
固定电阻10kΩ 1%与光敏电阻串联接地
滤波电容100nF并联在ADC输入对地

2. GD32多通道ADC配置

2.1 硬件初始化

以下代码展示如何配置两个ADC通道(电位器和光敏电阻):

void ADC_Config(void) { // 时钟配置 rcu_periph_clock_enable(RCU_ADC1); rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6); // ADC时钟=18MHz // GPIO初始化 gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5); // ADC基础配置 adc_deinit(ADC1); adc_mode_config(ADC_MODE_FREE); adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE); adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT); // 多通道扫描配置 adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 2); adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5); // PA4 adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5); // PA5 // 校准与使能 adc_enable(ADC1); delay_1ms(1); adc_calibration_enable(ADC1); adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL); }

2.2 数据采集流程

采用DMA传输可提高效率,避免CPU频繁中断:

// DMA配置示例 void DMA_Config(void) { dma_parameter_struct dma_init_struct; rcu_periph_clock_enable(RCU_DMA0); dma_deinit(DMA0, DMA_CH0); dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY; dma_init_struct.memory_addr = (uint32_t)&adc_values; dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT; dma_init_struct.number = 2; dma_init_struct.periph_addr = (uint32_t)&ADC_RDATA(ADC1); dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; dma_init_struct.priority = DMA_PRIORITY_HIGH; dma_init(DMA0, DMA_CH0, &dma_init_struct); dma_circulation_enable(DMA0, DMA_CH0); dma_channel_enable(DMA0, DMA_CH0); adc_dma_mode_enable(ADC1); }

3. 数据转换与校准技术

3.1 原始值到物理量的映射

对于电位器,可直接转换为百分比:

uint16_t pot_value = adc_values[0]; float position_percent = (pot_value * 100.0f) / 4095.0f;

光敏电阻需要更复杂的处理,建议建立光照强度对照表:

ADC值范围光照等级典型场景
0-500黑暗夜间无照明
501-1500弱光室内灯光
1501-3000中等阴天/窗边
3001-4095强光直射日光

3.2 提高精度的技巧

  1. 软件滤波算法

    #define SAMPLE_SIZE 8 uint16_t filtered_adc(uint16_t channel) { uint32_t sum = 0; for(uint8_t i=0; i<SAMPLE_SIZE; i++) { sum += adc_values[channel]; delay_ms(1); } return (sum + SAMPLE_SIZE/2) / SAMPLE_SIZE; // 四舍五入 }
  2. 参考电压校准

    float vrefint_cal = *(uint16_t*)0x1FFFF7BA; // 出厂校准值 float vrefint_data = read_adc(ADC_CHANNEL_17); // 读取内部参考电压 float vdda = 1.2f * vrefint_cal / vrefint_data; float real_voltage = raw_value * vdda / 4095.0f;

4. 数据可视化实现方案

4.1 串口输出格式化

使用printf输出传感器数据:

printf("Pot: %4d (%.1f%%) | LDR: %4d (%.1fkΩ)\r\n", pot_value, position_percent, ldr_value, r_ldr);

示例输出:

Pot: 2048 (50.0%) | LDR: 3276 (1.2kΩ) Pot: 3072 (75.0%) | LDR: 4095 (0.8kΩ)

4.2 OLED显示界面

SSD1306 OLED基础显示函数:

void show_sensors(void) { OLED_Clear(); OLED_ShowString(0, 0, "Sensor Monitor", 16); // 电位器进度条 OLED_ShowString(0, 2, "Pot:", 16); OLED_DrawProgressBar(40, 2, 80, 16, position_percent); // 光敏电阻数值 char buf[20]; sprintf(buf, "LDR:%.1fkΩ", r_ldr); OLED_ShowString(0, 4, buf, 16); // 光照等级图标 if(ldr_value < 500) OLED_ShowChar(120, 4, 0xDB, 16); // 月亮图标 else OLED_ShowChar(120, 4, 0xD8, 16); // 太阳图标 OLED_Refresh(); }

4.3 扩展应用:阈值触发

实现光照强度触发动作:

if(ldr_value < LDR_DARK_THRESHOLD) { gpio_bit_set(LED_PORT, LED_PIN); // 开灯 } else { gpio_bit_reset(LED_PORT, LED_PIN); // 关灯 }

5. 系统优化与故障排查

5.1 常见问题解决方案

现象可能原因解决方法
ADC值跳动大电源噪声/未滤波增加0.1μF滤波电容靠近ADC引脚
读数始终为0引脚配置错误检查GPIO是否设置为模拟输入(AIN)
值卡在4095分压电阻开路检查电位器/光敏电阻连接
多通道数据错位DMA缓冲区溢出确保DMA配置与通道数匹配

5.2 低功耗优化策略

  1. 间歇采样模式:

    void enter_low_power_mode(void) { adc_disable(ADC1); gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, GPIO_PIN_4|GPIO_PIN_5); pwr_deepsleep_mode_enter(); // 唤醒后重新初始化ADC }
  2. 动态调整采样率:

    void adjust_sample_rate(uint8_t speed) { // speed: 0-慢速 1-中速 2-快速 uint8_t sample_time = speed==0 ? ADC_SAMPLETIME_239POINT5 : speed==1 ? ADC_SAMPLETIME_55POINT5 : ADC_SAMPLETIME_13POINT5; adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_4, sample_time); adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_5, sample_time); }

在实际项目中,我发现GD32的ADC在连续模式下工作稳定,但需要注意电源质量。使用独立的LDO为模拟部分供电,配合适当的软件滤波,可以获得优于1%的测量精度。对于需要更高精度的场合,建议采用外部基准电压芯片如REF3030,可将系统精度提升到0.5%以内。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 17:00:29

小马智行世界模型进化史,PonyWorld方案解析......

点击下方卡片&#xff0c;关注“自动驾驶之心”公众号戳我-> 领取自动驾驶近30个方向学习路线编辑 | 自动驾驶之心>>自动驾驶前沿信息获取→自动驾驶之心知识星球自从18年世界模型开始进入大众视野以来&#xff0c;已经逐渐烟花成“学习环境规律 — 推演未来 — 再优化…

作者头像 李华
网站建设 2026/4/14 16:55:27

万象视界灵坛入门指南:Bright-Pixel UI国际化(i18n)与多语言支持

万象视界灵坛入门指南&#xff1a;Bright-Pixel UI国际化&#xff08;i18n&#xff09;与多语言支持 1. 产品概述 万象视界灵坛&#xff08;Omni-Vision Sanctuary&#xff09;是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的语义对齐过程转化为直观的像素风…

作者头像 李华
网站建设 2026/4/14 16:55:17

Wan2.2-I2V-A14B效果实测:1080P下人物微表情与肢体动作自然度分析

Wan2.2-I2V-A14B效果实测&#xff1a;1080P下人物微表情与肢体动作自然度分析 1. 测试环境与模型概述 Wan2.2-I2V-A14B是一款专注于文生视频任务的高性能模型&#xff0c;特别擅长处理人物动作和表情的生成。本次测试基于私有部署镜像&#xff0c;硬件配置如下&#xff1a; …

作者头像 李华
网站建设 2026/4/14 16:54:10

【权威实证】:92.7%的视觉-语言幻觉源于跨模态注意力偏移——来自CMU+清华联合实验室的14万样本审计报告

第一章&#xff1a;多模态大模型幻觉问题研究 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型在融合文本、图像、音频与视频等异构信息时&#xff0c;其推理路径高度依赖跨模态对齐机制与联合表征空间的稳定性。当模态间语义映射存在偏差、训练数据分布不均衡或指…

作者头像 李华
网站建设 2026/4/14 16:53:24

突破Cursor Pro限制:免费体验AI编程助手的终极指南

突破Cursor Pro限制&#xff1a;免费体验AI编程助手的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial …

作者头像 李华