一、功能简介
使用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);}}
}
最终实现单片机控制气泵和电磁阀的开和关。