1. 风向标信号基础
做嵌入式信号处理这些年,我接触最多的传感器之一就是风向标。说实话,它看起来简单——一个转动的箭头,几根线,但真正要把信号处理好,里面的门道可不少。今天我就把这块内容掰开了讲。
1.1 风向标工作原理
风向标的核心原理,说白了就是利用风对尾翼的推力。风从哪个方向来,箭头就指向哪个方向。但这里有个关键点——风向标输出的不是角度本身,而是某种物理量的变化。
我见过三种主流方案:
- 电位计式:风向标转轴连着电位计,角度变化引起电阻变化。便宜,但有磨损问题。
- 编码器式:用光电或磁编码器直接输出数字角度。精度高,我项目里最爱用这种。
- 霍尔式:利用霍尔效应感应磁场变化。无接触,寿命长,但需要校准。
关键点:风向标输出的是相对角度,不是绝对方向。你需要一个基准——通常是北向。所以安装时,箭头指向正北,输出0°就是北风。
1.2 信号类型:模拟 vs 数字
这个问题我经常被问到。其实选哪种,完全看你的应用场景。
模拟信号
电位计式风向标输出的是电压或电阻。比如0~5V对应0~360°。优点是简单,ADC一读就行。但缺点也很明显——容易受干扰,线损会影响精度。
我记得有一次在野外测试,信号线长了50米,电压掉了将近0.3V,算下来角度偏差了20多度。后来我加了差分传输才解决。
数字信号
编码器直接输出数字量,常见的有:
- 并行输出:多根线同时输出二进制角度值。速度快,但线多。
- 串行输出:如SPI、I2C。线少,适合远距离。
- 脉冲输出:输出PWM或脉冲数,通过脉宽或计数换算角度。
我的建议:如果距离超过10米,优先选数字信号。别问我怎么知道的——都是教训换来的。
1.3 常见传感器接口
接口这块,我把它分成三类来讲。你想想看,实际项目中你大概率会遇到其中一种。
| 接口类型 | 信号范围 | 传输距离 | 抗干扰 | 典型应用 |
|---|---|---|---|---|
| 电压输出 | 0~5V / 0~10V | <10m | 低 | 室内、短距离 |
| 电流输出 | 4~20mA | <1000m | 高 | 工业现场、远距离 |
| RS485 | 差分信号 | <1200m | 极高 | 气象站、风电 |
电压接口
最简单,三根线:电源、地、信号。但要注意,电压信号在长距离传输时压降明显。我曾经用0.5mm²的线传100米,信号衰减了15%。
电流接口
4~20mA是工业标准。为什么是4mA而不是0mA?因为4mA可以用来检测断线——如果读到0mA,说明线断了。这个设计很巧妙,我特别喜欢。
RS485接口
这是我最推荐的远距离方案。差分传输,抗共模干扰能力强。而且可以挂多个设备,组网方便。协议上常用Modbus RTU,读取风向数据就是发一条指令的事。
注意:RS485要接终端电阻,一般是120Ω。不接的话,信号反射会导致数据错误。我曾经因为这个排查了整整两天。
1.4 信号特性分析
拿到风向标信号后,第一件事不是滤波,而是分析它的特性。我一般看这几个方面:
噪声特性
风向标信号里的噪声主要有三种:
- 机械噪声:轴承摩擦、风杯抖动。频率低,一般在1Hz以下。
- 电气噪声:电源纹波、电磁干扰。频率高,50Hz工频及其谐波。
- 量化噪声:ADC量化误差。幅度小,但高频成分多。
动态特性
风向变化有多快?这决定了你的采样率。我测过一些数据:
- 微风天气:风向变化率约 1~5°/s
- 大风天气:可达 10~30°/s
- 阵风时:瞬间变化能超过 50°/s
所以采样率一般设在10~50Hz就够用了。太高了反而引入更多噪声。
角度跳变问题
这个坑我踩过。风向是0~360°循环的,当风向从359°变到1°时,直接相减得到-358°,但实际只变化了2°。处理这种跳变,我习惯用角度差归一化:
// 角度差归一化
float angle_diff(float a1, float a2) {
float diff = a2 - a1;
while (diff > 180) diff -= 360;
while (diff < -180) diff += 360;
return diff;
}
核心要点:处理风向数据时,永远不要直接对角度做算术平均。要先转换成矢量分量(sin/cos),平均后再算回角度。否则0°和360°的平均会得到180°,这显然是错的。
知识体系总览
下面这张图是我自己整理的,把风向标信号的基础知识串起来了。你可以把它当作一个快速索引。
嗯,到这里风向标信号的基础就讲完了。这些内容看着简单,但都是我在项目里一点点踩坑总结出来的。下一节我们会深入讲滤波技术,到时候你会看到,理解了信号特性,滤波才能做到有的放矢。