STM32学习-基于STM32F1具有控制菜单的温控小风扇
一、前言
本文仅作个人学习记录,非教程,内容不完整,仅供参考。
二、概述
使用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.42Temp = ((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简易多级菜单(数组查表法)
菜单设计这方面没有特别的好讲,方法的差异而已
五、最后效果
总览
上电初始菜单,自动读温控速
进入菜单
选择特定转速
使用电位器任意改变转速
手上没有电位器,直接接高电平了
嵌入式小白,有错请大佬指正,respect
STM32学习-基于STM32F1具有控制菜单的温控小风扇相关推荐
- STM32学习 基于STM32F103C8t6
STM32学习 基于STM32F103C8T6 STM32F103C8T6命名规则 先对自己使用的芯片命名有所了解,才能更好的宏观掌控 STM32F103C8t6引脚命名 Keil仿真 hex文件烧录 ...
- STM32学习总结之IO控制
学习目标: 掌握 STM32 基础知识 学习STM32单片机之------IO控制 数据缩写 ODR : Output data register;数据输出寄存器 RCC(reset and cloc ...
- MVC基于角色权限控制--菜单展示
在用户成功登陆后台页面后,我们需要将当前用户拥有的权限通过菜单的形式展现出来,将未具备的权限隐藏 新建一个HomeController,用于展示后台首页和获取用户权限数据 namespace CZBK ...
- STM32学习之旅④ USART串口和上位机通信
STM32系列博客: STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...
- 基于STM32F1系列和LDV5语音模块的语音控制LCD屏幕的点亮
本文章是基于野火指南者F103板载LCD屏的控制,如有不妥之处,欢迎指正交流! 基于STM32F1系列和LDV5语言模块的语音控制LCD屏幕的点亮 前言 一.STM32外部中断EXTI 1.什么是外部 ...
- stm32采集正弦波峰峰值_科研项目 | 基于STM32的永磁同步电机SVPWM控制设计
点击上方蓝字,记得关注我们! 一.师资背景 指导老师毕业于中国985高校,毕业后留校工作至今,现为该校电气工程及自动化专业的教授.硕士研究生导师,多家企业研发技术顾问. 主要研究方向包括电力电子拓扑及 ...
- STM32学习:按键控制LED
STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...
- 【STM32】基于HAL库的中断详细学习
目录 1.中断概述 1.1中断相关概念 1.2 STM32中断系统 2 .HAL库的中断处理 2.1 HAL 库的中断封装 2.2 外部中断处理流程 3.外部中断的HAL库定义 3.1. 外部中断的数 ...
- 【基于stm32 FreeRtos的智能台灯控制】
基于stm32 FreeRtos的智能台灯控制 之前做了一个裸机版本的智能台灯,最近刚好复习一下FreeRto的一些基础知识,朋友发给了我一个功能需求刚好用来实践一下,需要的朋友可以自行下载. 完整工 ...
最新文章
- Angular开山篇
- python电脑版微信-python如何实现远程控制电脑(结合微信)
- .NET速度的问题,不是最重要的
- c语言程序二级考试题,2016年计算机二级考试C语言程序设计真题
- prototype.js 让你更深入的了解javascript的面向对象特性
- 用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序
- for循环的break和continue
- 前端H5 使用百度统计进行埋点
- 使用UOS微信桌面版协议登录,wechaty免费版web协议又可以用了
- Sublime Text3 插件 拾色器
- 计算机网络工程教程:基于cisco路由器和交换机,计算机网络工程教程—基于cisco路由器和交换机教学课件作者陆魁军chap7思科路由器的高级功能.ppt...
- matlab图论软件包,MATLAB_bgl_toolbox 图论通用工具箱总汇:GraphTheory for St 247万源代码下载- www.pudn.com...
- python excel超链接_在Python中保留Pandas中的超链接 – Excel到数据帧
- RFI射频干扰、谐波、基波
- Java反射机制的原理及作用
- 使用Javascript制作声音按钮
- 【社招和校招】格灵深瞳合肥研发中心计算机视觉算法岗招聘
- 类图,类与类之间的关系
- 从SOD到OOD(spi_flash模块)
- Learning Policies for Adaptive Tracking with Deep Feature Cascades(深度增强学习、目标跟踪)