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)
还没有任何评论哟~
