STM32控制气泵和电磁阀实现

一、功能简介

     使用STM32控制气泵和电磁阀的开和关,气泵和电磁阀的供电电压为12V。

二、实现过程

1、气泵和电磁阀的开和关均为开关量,实现控制方法有多种,比如继电器,但是继电器动作有噪声且体积较大,更好的方法为使用mos管。

2、mos管的选型:mos管选择主要注意两个参数即可,一是导通的电流,二是耐压值,并且常用NMOS管,根据要求,气泵和电磁阀供电电压为12V,所以选择的mos管耐压值要大于12V,这里选用耐压值为30V的MOS管,并且导通电流为5.8A,如下图

3、控制电路:

4、程序代码

/* 引脚 定义 */

#define LED0_GPIO_PORT                  GPIOB
#define LED0_GPIO_PIN                   GPIO_PIN_0
#define LED0_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)             /* PB口时钟使能 */

#define LED1_GPIO_PORT                  GPIOB
#define LED1_GPIO_PIN                   GPIO_PIN_1
#define LED1_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)             /* PB口时钟使能 */
void led_init(void)
{
    GPIO_InitTypeDef gpio_init_struct;
    LED0_GPIO_CLK_ENABLE();                                 /* LED0时钟使能 */
    LED1_GPIO_CLK_ENABLE();                                 /* LED1时钟使能 */

    gpio_init_struct.Pin = LED0_GPIO_PIN;                   /* LED0引脚 */
    gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */
    gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */
    
    gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */
    HAL_GPIO_Init(LED0_GPIO_PORT, &gpio_init_struct);       /* 初始化LED0引脚 */

    gpio_init_struct.Pin = LED1_GPIO_PIN;                   /* LED1引脚 */
    HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_struct);       /* 初始化LED1引脚 */
    

    LED0(1);                                                /* 关闭 LED0 */
    LED1(1);                                                /* 关闭 LED1 */
}
int main(void)
{
    uint8_t key; 

    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    led_init();                             /* 初始化LED */
    key_init();                             /* 初始化按键 */
    LED0(0);                                /* 先点亮LED0 */
    
    while(1)
    {
        key = key_scan(0);                  /* 得到键值 */

        if (key)
        {
            switch (key)
            {
                case WKUP_PRES:             /* 控制蜂鸣器 */
                    LED0_TOGGLE();          /* LED0状态取反 */
                    break;

                case KEY1_PRES:             /* 控制LED1(GREEN)翻转 */
                    LED1_TOGGLE();          /* LED1状态取反 */
                    break;

                case KEY0_PRES:             /* 同时控制LED0, LED1翻转 */
                    LED0_TOGGLE();          /* LED0状态取反 */
                    LED1_TOGGLE();          /* LED1状态取反 */
                    break;
            } 
        }
        else
        {
            delay_ms(10);
        }
    }
}

最终实现单片机控制气泵和电磁阀的开和关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/434198.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Xilinx 7系列FPGA配置(ug470)

Xilinx 7系列FPGA配置(ug470) 配置模式串行配置模式接口从-连接方式主-连接方式串行菊花链(非同时配置)串行配置(同时配置)时序 主SPI配置模式SPIx1/x2 连接图SPIx1模式时序SPIx4 连接图SPI操作指令操作fla…

php反序列化字符逃逸

php反序列化和序列化 PHP序列化:serialize() 序列化是将变量或对象转换成字符串的过程,用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。“序列化”是一种把对象的状态转化成字节流的机制 类似于这样的结构: O:4:&quo…

【Linux】Linux网络故障排查与解决指南

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 检查网络连接状态: 检查路由表: 检查DNS配置: 检查网络连接状态: 检查防火墙设…

类与对象(三)--构造函数体中的赋值和初始化列表的区别

🎧1构造函数体赋值 🔎在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 ⭐️就像上述代码中的构造函数,其函数体的语句只能被称为赋予初值而不能称为初始化。因为初始化是在定义的同时赋…

解决WordPress更新插件或者更新版本报WordPress 需要访问您网页服务器的权限的问题

文章目录 前言一、原因二、解决步骤总结 前言 当对WordPress的插件或者版本进行更新时报错:要执行请求的操作,WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录凭据以继续。 如果您忘记了您的登录凭据(如用户名、密码&#xff09…

前端面试拼图-原理源码

摘要:最近,看了下慕课2周刷完n道面试题,记录下... 1. JS内存泄漏如何检测?场景有哪些? 1.1 垃圾回收 GC 垃圾回收是一种自动管理内存的机制,它负责在运行时跟踪内存的分配和使用情况,并在不再需要的对象…

Python 开发图形界面程序

用 Python 语言开发图形界面的程序,有2种选择: Tkinter 基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:浮层)

设置组件的遮罩文本。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 overlay overlay(value: string | CustomBuilder, options?: { align?: Alignment; offset?: { x?: number; y?: number } })…

6. Gin集成redis

文章目录 一:连接Redis二:基本使用三:字符串四:列表五:哈希六:Set七:管道八、事务九:示例 代码地址:https://gitee.com/lymgoforIT/golang-trick/tree/master/14-go-redi…

跨境电商选品API商品采集API接入指南

选品是每个电商卖家的必经之路,产品的好坏将直接决定店铺的盈利、发展方向。选择合适的产品可以让卖家事半功倍,快速爆单。 用API实现代购系统和1688淘宝等平台的商品信息对接,可以免去很多选品工作。 item_get 获得淘宝商品详情item_get_p…

Maven入门(作用,安装配置,Idea基础maven,Maven依赖,Maven构建项目)【详解】

目录 一. Maven的作用 1.依赖管理 2.统一项目结构 3.项目构建 二.Maven安装配置 1. Maven的仓库类型 2 加载jar的顺序 3. Maven安装配置 4.安装Maven 5.配置仓库 三.idea集成maven 1.给当前project集成maven 2.给新建project集成maven 3.创建maven项目 4.pom…

闫震海:腾讯音乐空间音频技术的发展和应用 | 演讲嘉宾公布

一、3D 音频 3D 音频分论坛将于3月27日同期举办! 3D音频技术不仅能够提供更加真实、沉浸的虚拟世界体验,跨越时空的限制,探索未知的世界。同时,提供更加丰富、立体的情感表达和交流方式,让人类能够更加深入地理解彼此&…

Spring——Bean的作用域

bean的作用域 Bean Scope Scope说明singleton(默认情况下)为每个Spring IoC容器将单个Bean定义的Scope扩大到单个对象实例。prototype将单个Bean定义的Scope扩大到任何数量的对象实例。session将单个Bean定义的Scope扩大到一个HTTP Session 的生命周期…

Linux之cd、pwd、mkdir 命令

cd命令,切换目录 1)当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录。 2)我们可以通过cd命令,更改当前所在的工作目录。 3)cd命令来自英文:C…

LeetCode-第67题-二进制求和

1.题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 2.样例描述 3.思路描述 将两个二进制字符串转换成整型,然后相加后的整型转为二进制字符串 4.代码展示 class Solution(object):def addBinary(self, a, b):# 将字符串…

11. C语言标准函数库

C语言制定了一组使用方式通用的函数,称为C语言标准函数库,用于实现编程常用功能,标准函数库由编译器系统提供,并按功能分类存储在不同源代码文件中,调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…

操作教程|使用MeterSphere对恒生UFX系统进行压力测试

恒生UFX(United Finance Exchange,统一金融交换)系统(以下简称为“UFX系统”),是一款帮助证券公司统一管理外部接入客户的系统,该系统整体上覆盖了期货、证券、基金、银行、信托、海外业务等各类…

【CSP试题回顾】201604-1-折点计数

CSP-201604-1-折点计数 解题代码 #include <iostream> #include <vector> #include <algorithm> using namespace std;int n, pointSum;int main() {cin >> n;vector<int>myData(n);for (int i 0; i < n; i){cin >> myData[i];}// 统…

LinkedList集合源码分析

LinkedList集合源码分析 文章目录 LinkedList集合源码分析一、字段分析二、构造函数分析三、方法分析四、总结 看到实现了Deque 就要联想到这个数据结构肯定是属于双端队列了。Queue 表示队列&#xff0c;Deque表示双端队列。 一、字段分析 LinkedList 字段很少&#xff0c;就…

Python影像分析-根据卫星图像估算土壤湿度

在这篇文章中,我将讨论用于估计土壤湿度的最流行的模型,称为梯形模型。该模型源自卫星,这些卫星以一致的比例和分辨率提供地表温度和植被指数,例如归一化植被指数 (NDVI)。” 目录 🌟简介📥下载 Sentinel-3 表面温度和 NDVI 图像📉绘制 NDVI 与 LST(梯形空间)的图�…