一、自发电型风速传感器介绍
自发电型风速传感器,也称为风力发电型风速传感器或无源风速传感器,是一种不需要外部电源即可工作的风速测量设备。这种传感器通常利用风力来驱动内部的发电机构,从而产生电能来供电测量风速的传感器部分。以下是自发电型风速传感器的组成、原理及应用:
组成:
- 风力涡轮机:用于捕捉风能并将其转换为机械能。
- 发电机:将风力涡轮机产生的机械能转换为电能。
- 风速感应部分:可以是传统风杯或风翼结构,风速变化会导致感应部分的速度变化。
- 信号处理电路:将发电机产生的电能进行处理,并转换为与风速成比例的信号。
原理:
- 风力发电:当风吹动风力涡轮机的叶片时,叶片旋转带动发电机内部的线圈在磁场中旋转,从而产生交流电能。
- 风速检测:风杯或风翼的旋转速度与风速成正比。通过测量旋转速度,可以推算出风速。
- 信号转换:产生的电能通过信号处理电路转换为可用的电信号,这个信号可以是模拟的也可以是数字的,通常与风速成线性关系。
特点:
- 无需外部电源:适合安装在偏远或难以布线的区域。
- 环境适应性:能够在恶劣环境中稳定工作,如高山、海洋等。
- 维护成本低:由于没有电池等易耗部件,维护成本相对较低。
应用:
- 气象监测:用于气象站、风力发电场等场合的风速监测。
- 农业:监测农田的风速,用于指导灌溉和农作物保护。
- 环境监测:在环境监测站用于监测风速,作为气候变化的数据之一。
注意事项:
- 启动风速:自发电型风速传感器通常有一个最小启动风速,风速低于这个值时,传感器可能无法正常工作。
- 风速范围:传感器的风速测量范围应符合应用场合的风速变化范围。
- 环境因素:由于传感器暴露在户外,需要考虑防尘、防水、防腐蚀等环境适应性设计。
二、cubeMX配置
1、新建工程
可以参考我的新建工程系列教程
stm32-HAL库+cubeMX新建工程教程(以F103C8T6为例)https://blog.csdn.net/qq_39150957/article/details/136637881?fromshare=blogdetail&sharetype=blogdetail&sharerId=136637881&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link【STM32-HAL库】立创梁山派新建工程并点灯(GD32F470ZGT6)cubeMX+HAL库+keil5https://blog.csdn.net/qq_39150957/article/details/136637881?fromshare=blogdetail&sharetype=blogdetail&sharerId=136637881&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link【STM32-HAL库】立创梁山派天空星版新建工程并点灯(GD32F407VET6)https://blog.csdn.net/qq_39150957/article/details/137161558?fromshare=blogdetail&sharetype=blogdetail&sharerId=137161558&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link
2、配置ADC
3、配置串口
可以参考我的文章,配置串口教程以及如何重定向串口。重定向串口之后即可直接使用【printf】函数直接向串口发送数据
【STM32-HAL库】串口配置、printf函数重定向https://blog.csdn.net/qq_39150957/article/details/136638229?fromshare=blogdetail&sharetype=blogdetail&sharerId=136638229&sharerefer=PC&sharesource=qq_39150957&sharefrom=from_link
三、编写代码
风力传感器已经给出了计算公式
feng.c
#include "feng.h"
float ADC_ValueToVoltage(uint32_t adcValue) {
const uint32_t maxAdcValue = (1 << 12) - 1;
const float vRef = 3.3f;
float voltage = (float)adcValue * vRef / maxAdcValue;
return voltage;
}
float Readfeng(){
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,1);
uint32_t adcValue;
float voltage;
adcValue = HAL_ADC_GetValue(&hadc1);
voltage = ADC_ValueToVoltage(adcValue);
float fengvalue=voltage*25;
return fengvalue;
}
feng.h
#ifndef __FENG_H__
#define __FENG_H__
#include "main.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"
float ADC_ValueToVoltage(uint32_t adcValue);
float Readfeng();
#endif
main.c中代码
引入头文件
/* USER CODE BEGIN Includes */
#include "feng.h"
/* USER CODE END Includes */
主循环中
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf("风速 = %.2f M/s \r\n",Readfeng());
HAL_Delay(200);
}
/* USER CODE END 3 */
四、运行效果
当我用手轻轻转动风速传感器时串口输出数据如下
下载工程
通过百度网盘分享的文件:feng.zip 链接:https://pan.baidu.com/s/1d88CW2lrnzc6k1u_UGsQfw 提取码:6666https://pan.baidu.com/s/1d88CW2lrnzc6k1u_UGsQfw