STM32学习-基于STM32F1具有控制菜单的温控小风扇

这篇具有很好参考价值的文章主要介绍了STM32学习-基于STM32F1具有控制菜单的温控小风扇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

本文仅作个人学习记录,非教程,内容不完整,仅供参考,请勿用于商业用途。

二、概述

使用ADC读取环境温度,根据环境温度设置PWM占空比,从而控制FAN转速。控制菜单功能:1.设置特定转速,2.切换为手动模式任意控制FAN转速。

三、系统框图

STM32学习-基于STM32F1具有控制菜单的温控小风扇

整个系统并不复杂:MCU负责运行代码并输出信号;NTC是温变电阻,阻值随温度变化;电位器用于手动任意控制FAN转速;按键;L298N是电机驱动模块,单片机IO口无法直接驱动Motor;Motor。

四、软硬件设计

4.1 设置定时器输出PWM&驱动电机

4.1.1 软件设置

使用TIM3的CH1输出PWM

频率计算公式:STM32学习-基于STM32F1具有控制菜单的温控小风扇

占空比计算公式:STM32学习-基于STM32F1具有控制菜单的温控小风扇

__HAL_TIM_SetCompare(&htimx,TIM_CHANNEL_x,xx);    //占空比设置函数

这里频率设很高是因为低于16kHz时电机的电感会响并且无法工作

只设置PSC & ARR & 初始占空比,其他默认即可

STM32学习-基于STM32F1具有控制菜单的温控小风扇

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输出电压计算公式:STM32学习-基于STM32F1具有控制菜单的温控小风扇

IN1

IN2

OUT

A Channel

0

0

制动

1

0

正转

0

1

反转

1

1

制动

STM32学习-基于STM32F1具有控制菜单的温控小风扇

信泰微电子淘宝截图,侵删

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传输,这样可以将读取到的电压值全部保存到一个数组里,在中断服务函数里输出;开启传输完成中断。

STM32学习-基于STM32F1具有控制菜单的温控小风扇

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

STM32学习-基于STM32F1具有控制菜单的温控小风扇

4.2.2 代码

ADC实际电压值计算公式:STM32学习-基于STM32F1具有控制菜单的温控小风扇 (12位ADC,3.3V参考电压)

内部温度传感器温度计算公式:STM32学习-基于STM32F1具有控制菜单的温控小风扇

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口设置为上拉模式,直接接开关,按键识别低电平有效。

上拉电阻:上电高电平 下拉电阻:上电低电平

STM32学习-基于STM32F1具有控制菜单的温控小风扇
STM32学习-基于STM32F1具有控制菜单的温控小风扇

4.3.2 代码

HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5);         //读取IO口点评状态

4.4 手动控制转速设计

串联电阻分压原理,通过ADC读取电位器的电压值判断此时设置了多少转速。

4.5 菜单设计

采用索引法,具体实现方法:STM32简易多级菜单(数组查表法)

菜单设计这方面没有特别的好讲,方法的差异而已

五、最后效果

STM32学习-基于STM32F1具有控制菜单的温控小风扇

总览

STM32学习-基于STM32F1具有控制菜单的温控小风扇

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

STM32学习-基于STM32F1具有控制菜单的温控小风扇

进入菜单

STM32学习-基于STM32F1具有控制菜单的温控小风扇

选择特定转速

STM32学习-基于STM32F1具有控制菜单的温控小风扇

使用电位器任意改变转速

手上没有电位器,直接接高电平了

嵌入式小白,有错请大佬指正,respect文章来源地址https://www.toymoban.com/news/detail-464328.html

到了这里,关于STM32学习-基于STM32F1具有控制菜单的温控小风扇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F1系列简单介绍及入门学习

    1.什么是STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星。 STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。AR

    2023年04月19日
    浏览(45)
  • STM32项目设计:基于stm32f1的智能门锁(附项目视频全套教程)

      最近假期比较闲,拿着之前剩下的模块做了一个小玩具, 先制定一下此次玩具的规划,也可以理解为简易项目书。 开发软件:keil 硬件选型:STM32F103C8T6、RFID读卡器、oled屏幕、按键模块、蓝牙通信模块、蜂鸣器、舵机; 上位机: 1.上位机可以对密码进行设置、重置 2.上位机可以

    2024年02月10日
    浏览(36)
  • 基于STM32F1和MLX90640的红外热像仪

    STM32F103RCT6使用IIC接口与MLX90640采集数据,采集数据后使用LCD将温度转换为像素点输出到TFT-LCD屏幕,温度达到指定数值自动蜂鸣器报警,使用按键关闭报警声,源码文件文末自取。 默认参数时,MLX90640的工作流程如下: (1)上电,内部初始化(约40ms) (2)读取工作参数到控制

    2024年02月02日
    浏览(36)
  • 基于STM32F103C8T6的温控散热器实践,软硬件开源!!!

    大家好!今天我要给大家分享一款基于STM32F103C8T6的温控散热器。在炎热的夏天,我们经常会遇到电子设备因高温而过热的问题。为了解决这一问题,我设计了这款温控散热器,它能根据环境温度智能控制风扇的开关,确保设备的稳定运行。让我们一起来看看它的构成和工作原

    2024年02月05日
    浏览(39)
  • 基于STM32F1以及STM32CubeMx实现串口中断通讯(字符串发送与接收)

    首先选好自己的板子并打开软件设置,本实验基于STM32F103ZET6实现,打开软件后如图: 打开外部高速晶振,然后接着配置时钟: 将时钟频率修改为72MHz,接着设置接线方式为SW 接下来需要使用串口中断通讯,打开我们的串口设置并打开中断 这里波特率设置为115200,数据位为

    2024年02月09日
    浏览(37)
  • 学习GY906(GY906-DCI)与STM32F1版程序

    目录 模块介绍 工作原理: 代码介绍: 1.一些宏定义: 2.起始条件与终止条件: 3.发送一个字节: 4.发送一位: 5.接收一个字节: 6.接收一位: 7.初始化 8. 读取数据: 9.计算接收字节: 10,计算并返回温度值: 11.主函数: 演示:​ GY906是一款红外热像仪传感器模块,可测量目标

    2024年02月07日
    浏览(35)
  • STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    📌相关篇《【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕》 ✨驱动效果就不做演示了,和上面的相关篇一样,主要是为了方便使用MDK Keil开发的使用。所以花了点时间从上面的工程当中做了分离,重新使用STM32CubeMX配置一个方便二次开发移植使用和配置的工程。本

    2024年02月03日
    浏览(39)
  • 70、基于STM32单片机的蓝牙智能热水器控制系统设计温度温控水温水位检测

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、硬件框图 七、程序源码 八、资料包括 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气

    2024年02月05日
    浏览(94)
  • 【STM32】基于STM32F103C8T6的水质检测系统设计(声光报警、多级菜单)

    1.检测参数:水温、TDS、浊度、PH 2.超出阈值声光报警 3.LCD显示目标参数的测量结果 4.测量模式:单参数测量、所有参数表同时测量 切换方式:按键切换 单总线技术 单总线技术采用单根信号线实现时钟、数据的传输,且数据的传输是双向的,能够控制一个或多个从机设备。主

    2024年02月01日
    浏览(36)
  • STM32F1 - 中断系统

    NVIC:Nested Vectored Interrupt Controller【嵌套向量中断控制器】 管理内核外设和片上外设的所有中断功能; EXTI:External Interrupt 【外部中断控制器】 管理GPIO的中断; STM32F103ZET6总共19个外部中断 PA0~PG0,7个引脚中只有一个可以映射到EXTI0; 外部中断EXTI 9 ~ 5 合并为EXTI9_5中断; 外部

    2024年02月22日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包