一、前言

本文仅作个人学习记录,非教程,内容不完整,仅供参考。

二、概述

使用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具有控制菜单的温控小风扇相关推荐

  1. STM32学习 基于STM32F103C8t6

    STM32学习 基于STM32F103C8T6 STM32F103C8T6命名规则 先对自己使用的芯片命名有所了解,才能更好的宏观掌控 STM32F103C8t6引脚命名 Keil仿真 hex文件烧录 ...

  2. STM32学习总结之IO控制

    学习目标: 掌握 STM32 基础知识 学习STM32单片机之------IO控制 数据缩写 ODR : Output data register;数据输出寄存器 RCC(reset and cloc ...

  3. MVC基于角色权限控制--菜单展示

    在用户成功登陆后台页面后,我们需要将当前用户拥有的权限通过菜单的形式展现出来,将未具备的权限隐藏 新建一个HomeController,用于展示后台首页和获取用户权限数据 namespace CZBK ...

  4. STM32学习之旅④ USART串口和上位机通信

    STM32系列博客: STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...

  5. 基于STM32F1系列和LDV5语音模块的语音控制LCD屏幕的点亮

    本文章是基于野火指南者F103板载LCD屏的控制,如有不妥之处,欢迎指正交流! 基于STM32F1系列和LDV5语言模块的语音控制LCD屏幕的点亮 前言 一.STM32外部中断EXTI 1.什么是外部 ...

  6. stm32采集正弦波峰峰值_科研项目 | 基于STM32的永磁同步电机SVPWM控制设计

    点击上方蓝字,记得关注我们! 一.师资背景 指导老师毕业于中国985高校,毕业后留校工作至今,现为该校电气工程及自动化专业的教授.硕士研究生导师,多家企业研发技术顾问. 主要研究方向包括电力电子拓扑及 ...

  7. STM32学习:按键控制LED

    STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...

  8. 【STM32】基于HAL库的中断详细学习

    目录 1.中断概述 1.1中断相关概念 1.2 STM32中断系统 2 .HAL库的中断处理 2.1 HAL 库的中断封装 2.2 外部中断处理流程 3.外部中断的HAL库定义 3.1. 外部中断的数 ...

  9. 【基于stm32 FreeRtos的智能台灯控制】

    基于stm32 FreeRtos的智能台灯控制 之前做了一个裸机版本的智能台灯,最近刚好复习一下FreeRto的一些基础知识,朋友发给了我一个功能需求刚好用来实践一下,需要的朋友可以自行下载. 完整工 ...

最新文章

  1. Angular开山篇
  2. python电脑版微信-python如何实现远程控制电脑(结合微信)
  3. .NET速度的问题,不是最重要的
  4. c语言程序二级考试题,2016年计算机二级考试C语言程序设计真题
  5. prototype.js 让你更深入的了解javascript的面向对象特性
  6. 用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序
  7. for循环的break和continue
  8. 前端H5 使用百度统计进行埋点
  9. 使用UOS微信桌面版协议登录,wechaty免费版web协议又可以用了
  10. Sublime Text3 插件 拾色器
  11. 计算机网络工程教程:基于cisco路由器和交换机,计算机网络工程教程—基于cisco路由器和交换机教学课件作者陆魁军chap7思科路由器的高级功能.ppt...
  12. matlab图论软件包,MATLAB_bgl_toolbox 图论通用工具箱总汇:GraphTheory for St 247万源代码下载- www.pudn.com...
  13. python excel超链接_在Python中保留Pandas中的超链接 – Excel到数据帧
  14. RFI射频干扰、谐波、基波
  15. Java反射机制的原理及作用
  16. 使用Javascript制作声音按钮
  17. 【社招和校招】格灵深瞳合肥研发中心计算机视觉算法岗招聘
  18. 类图,类与类之间的关系
  19. 从SOD到OOD(spi_flash模块)
  20. Learning Policies for Adaptive Tracking with Deep Feature Cascades(深度增强学习、目标跟踪)

热门文章

  1. 基于 Iceberg 的湖仓一体架构在 B 站的实践
  2. JVM crash 异常分析
  3. win10 cpu anaconda环境安装torch
  4. Esp8266进阶之路10 【小实战下篇】Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。(带Demo)
  5. Dynamic SQL(动态SQL)
  6. 前端面经知识总结及参考回答 —— 尽量日更
  7. 视频监控知识100问
  8. Python-Flask开发微电影网站(六)
  9. 《创业大赛》—微电影影评
  10. 如何进行CAN总线高效测试?