Advertisement

STM32控制气泵和电磁阀实现

阅读量:

一、功能简介

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

二、实现过程

气泵以及电磁阀的开启与关闭状态属于开关量,在工业自动化领域中实现控制手段多种多样。其中一种常见方案是采用继电器来完成控制功能;然而这种方案存在动作噪声较大及体积占据明显优势的问题。相比之下,则是采用mos管则能有效避免上述问题

2、Mos管选型:在选择 Mos 管时需重点关注两个关键参数:导电电流与承受电压;通常采用 NMOS 管类目;基于本场景中气泵与电磁阀供电电压均为 12 V 的前提条件,则所选 Mos 管必须具备超过 12 V 的额定电压;具体采用额定电压 30 V 的 MOS 管实例;其工作时的最大导通电流达到 5.8 A(如图所示)。

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);
    
     }
    
     }
    
 }
    
    
    
    
    代码解释

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

全部评论 (0)

还没有任何评论哟~