一、前言
本文仅作个人学习记录,非教程,内容不完整,仅供参考,请勿用于商业用途。
二、概述
使用ADC读取环境温度,根据环境温度设置PWM占空比,从而控制FAN转速。控制菜单功能:1.设置特定转速,2.切换为手动模式任意控制FAN转速。
三、系统框图

整个系统并不复杂:MCU负责运行代码并输出信号;NTC是温变电阻,阻值随温度变化;电位器用于手动任意控制FAN转速;按键;L298N是电机驱动模块,单片机IO口无法直接驱动Motor;Motor。
四、软硬件设计
4.1 设置定时器输出PWM&驱动电机
4.1.1 软件设置
使用TIM3的CH1输出PWM
频率计算公式:
占空比计算公式:
__HAL_TIM_SetCompare(&htimx,TIM_CHANNEL_x,xx); //占空比设置函数
这里频率设很高是因为低于16kHz时电机的电感会响并且无法工作
只设置PSC & ARR & 初始占空比,其他默认即可

4.1.2 硬件连接
L298N共4个逻辑输入& 2个输出通道,IN1、IN2控制A OUT,IN3、IN4控制B OUT,
控制逻辑如下,B同,输入接12V位置,IN2接地,只用高电平接IN1控制正转
Note:L298N与MCU要共地以获得相同的参考电位,否则会异常,例如MCU输出100%占空比的PWM,但实际电压却不到
L298N输出电压计算公式:
IN1 |
IN2 |
OUT |
|
A Channel |
0 |
0 |
制动 |
1 |
0 |
正转 |
|
0 |
1 |
反转 |
|
1 |
1 |
制动 |

信泰微电子淘宝截图,侵删
4.1.3 控制代码
HAL_ADCEx_Calibration_Start(&hadc3); //使用前先校正
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); //使能TIM3的PWM输出
__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,Duty); //设置占空比为Duty
4.2 读取MCU温度传感器温度,自动控制FAN
4.2.1 软件设置
温度传感器也是一个温变电阻,使用ADC读取其电压值,根据官方公式转化为温度值。
ADC设置方法:【STM32】HAL库 STM32CubeMX教程九---ADC
使用ADC1的温度传感器,使用扫描模式,使用DMA传输,这样可以将读取到的电压值全部保存到一个数组里,在中断服务函数里输出;开启传输完成中断。

Note:DMA Request Mode需设置为Normal,否则会陷入中断里一直读电压值出不来

4.2.2 代码
ADC实际电压值计算公式: (12位ADC,3.3V参考电压)
内部温度传感器温度计算公式:
V25:Vsence在25℃时的数值,典型值1.43
Avg_Slope:温度与Vsence曲线的平均斜率,mv/℃,典型值4.3 mv/℃
uint16_t ADC_Voltage[1]; //储存读取的ADC值
float Voltage=0; //ADC值转化后的电压值
float Temp=0; //转化后的温度值
uint16_t PWMValue = 0; //初始化占空比
HAL_ADCEx_Calibration_Start(&hadc1); //校准ADC
int main()
{
while(1)
{
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Voltage,1); //读取ADC值,读完会跳到中断处理函数
}
}
//ADC DMA传输完成中断回调函数
//DMA Request Mode要设置为Normal,否则陷入中断
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
//内部温度传感器
if(hadc == &hadc1)
{
Voltage = (float)ADC_Voltage[0]*3.3/4096; //计算电压值,实际读出来1.42
Temp = ((1.43-Voltage)/0.0043+25); //计算温度值
printf("Temp=%.2f C\r\n",Temp);
}
}
到这里,自动读温控制已经完成
4.3 按键电路
4.3.1 电路原理图
将IO口设置为上拉模式,直接接开关,按键识别低电平有效。
上拉电阻:上电高电平 下拉电阻:上电低电平


4.3.2 代码
HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5); //读取IO口点评状态
4.4 手动控制转速设计
串联电阻分压原理,通过ADC读取电位器的电压值判断此时设置了多少转速。
4.5 菜单设计
采用索引法,具体实现方法:STM32简易多级菜单(数组查表法)
菜单设计这方面没有特别的好讲,方法的差异而已
五、最后效果

总览

上电初始菜单,自动读温控速

进入菜单

选择特定转速

使用电位器任意改变转速
手上没有电位器,直接接高电平了文章来源:https://www.toymoban.com/news/detail-464328.html
嵌入式小白,有错请大佬指正,respect文章来源地址https://www.toymoban.com/news/detail-464328.html
到了这里,关于STM32学习-基于STM32F1具有控制菜单的温控小风扇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!