寻源宝典单片机测电压电流全攻略
扬州苏电电气,2005年成立于宝应县城南工业区,主营电气相关设备,产品多样,专业权威,经验丰富,服务多元。
本文揭秘单片机如何精准读取电压电流,涵盖硬件选择、采样技巧及代码实现,助你轻松掌握电子测量的核心技能。
一、硬件准备:选对传感器是关键
想让单片机“看懂”电压电流,先得给它配副“眼镜”——合适的传感器。测量电压时,常用电阻分压法或专用电压传感器,比如将10V电压通过10kΩ和1kΩ电阻分压,单片机就能读取1V的输入信号。电流测量则更依赖霍尔传感器或采样电阻,比如用0.1Ω采样电阻串联在电路中,1A电流会产生0.1V电压,单片机通过测量这个电压就能反推电流值。
电压测量:电阻分压法适合低电压场景,专用传感器(如LM393)适合需要高精度的场合。
电流测量:霍尔传感器(如ACS712)能隔离测量,避免干扰;采样电阻法则成本低,但需注意散热问题。
二、采样技巧:让数据更“干净”
传感器输出的信号可能带有噪声,直接读取会导致测量误差。这时候就需要“过滤”信号:
硬件滤波:在传感器输出端加RC低通滤波器,滤除高频噪声。比如用10kΩ电阻和0.1μF电容组成滤波电路,截止频率约160Hz,能有效抑制开关电源产生的干扰。
软件滤波:在单片机代码中实现平均值滤波或中值滤波。比如连续采样10次,去掉最大最小值后取平均,能显著提升数据稳定性。
采样频率:根据信号变化速度选择合适频率。比如测量50Hz市电,采样频率至少要100Hz(奈奎斯特定理),但实际建议用1kHz以上以避免混叠。
三、代码实现:从模拟到数字的转换
单片机通过ADC(模数转换器)将模拟信号转为数字量,再通过计算得到实际电压电流值。以STM32为例:
c
// 电压采样代码示例
float read_voltage() {
uint16_t adc_value = 0;
for(int i=0; i<10; i++) { // 多次采样取平均
adc_value += HAL_ADC_GetValue(&hadc1);
HAL_Delay(1);
}
adc_value /= 10;
float voltage = adc_value * (3.3 / 4095.0) * 11.0; // 假设分压比为1:10
return voltage;
}
// 电流采样代码示例
float read_current() {
uint16_t adc_value = 0;
for(int i=0; i<10; i++) {
adc_value += HAL_ADC_GetValue(&hadc1);
HAL_Delay(1);
}
adc_value /= 10;
float current = adc_value * (3.3 / 4095.0) / 0.1; // 假设采样电阻0.1Ω
return current;
}
关键点:ADC参考电压、分辨率(如12位对应4095)、传感器比例系数需根据实际硬件调整。
优化建议:使用DMA传输减少CPU占用,或启用ADC内置滤波功能(如STM32的过采样)。
各位老板想要了解更多相关产品,不妨来爱采购试试吧~爱采购信息全面,能够满足你的大量需求!




