涂鸦智能暖风机软件实现之暖风机外设驱动实现

Posted 三明治开发社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了涂鸦智能暖风机软件实现之暖风机外设驱动实现相关的知识,希望对你有一定的参考价值。

前言

上一篇文章  涂鸦智能暖风机软件实现之利用B3950实现温度采集功能已经实现了暖风机的温度采集功能,本文将实现暖风机的基本外设驱动,例如驱动继电器开关实现档位调节、驱动摇头电机、驱动蜂鸣器等。

一、智能暖风机的整体功能设定

 

  • 智能暖风机设定功能如下:
功能说明
开关

触摸按键:1个

按键控制,app控制

控制暖风机开关。

目前开发的开启有三种方式:

1.App面板控制

2:按键控制

3:定时控制

模式

触摸按键:1个

按键控制,app控制

1:风扇功能:只吹风,不制热。

2:1档加热:风扇+加热1

3:2档加热:风扇+加热2(档位更高)

定时

触摸按键:1个

按键控制,app控制

倒计时默认枚举值有cancel, 1h, 2h, 3h, 4h, 5h, 6h,7h, 8h。

倒计时功能针对暖风机开关。

app暖风机倒计时剩余时间。

灯光

触摸按键:1个

按键控制,app控制

4种照明模式: 1 rgb1 2 rgb2 3 rgb3 4 rgb4

设温

触摸按键:1个

按键控制,app控制

温度设置区间为15-40℃,客户可以自行设定温度。

温度显示

硬件:断码显示

按键控制,app控制

只是在设定的时候显示

设备上和当前温度显示复用,app单独显示

设备:温度设定时,显示设定温度,误操作3秒后显示当前室温

摇头

触摸按键:1个

按键可控制,app可控制。

开/关

待机记忆

按键,app,主动操作开关键关机为待机状态。

再开启后恢复上一次设置:

温度设置:上一次设置

温度显示:当前环境温度

灯光模式:上一次设置

设备定时关:默认关闭

app定时关:默认关闭。

app定时开:上一次设置。

断电记忆

断电后为断电状态,再上电恢复上一次设置:

开关状态:默认关

温度设置:上一次设置

温度显示:当前环境温度

灯光模式:上一次设置

设备定时关:默认关闭

app定时关:默认关闭。

app定时开:上一次设置。

二、驱动继电器控制暖风机工作档位

1.驱动原理图

驱动电路如下图,LIN和HIN分别是低加热档和高加热档的控制引脚,控制引脚电平拉高后对应的输出引脚LOUT和HOUT就会输出高电平驱动继电器开启,从而开启低档位或高档位的加热管。

在这里插入图片描述

2.软件方案设定

上一篇文章我们实现了温度采集功能,现在我们在此基础上进行开发。

  • 所用的SOC引脚图如下:

在这里插入图片描述

  • 驱动方案设定

HIN : P20   |P20引脚为高加热档控制引脚
LIN : P22   |P22引脚为低加热档控制引脚
本方案中HIN 和 LIN引脚不能同时拉高

将控制引脚配置为推挽输出模式,初始化为拉低状态,可以根据传入的函数传参执行引脚拉高和拉低,实现控制继电器功能。下面我们开始编写控制程序。

3.程序实现

由于模块化编程思想便于代码的扩展和管理。我们单独创建一个gpio_control.c文件以及其头文件,主要内容是控制IO引脚的代码。

  • gpio_control.h内容:
#ifndef __GPIO_CONTROL_H__
#define __GPIO_CONTROL_H__

#ifdef __cplusplus
    extern "C" {
#endif
/*============================ INCLUDES ======================================*/


#include "tuya_pin.h"
#include "tuya_hal_system.h"


/*============================ MACROS ========================================*/
#define relay_leve1 22 // 低加热档控制引脚
#define relay_leve2 20 // 高加热档控制引脚
#define mode0   0	//工作模式1 只吹风不加热
#define mode1   1	//工作模式2 吹风 + 加热1档
#define mode2   2 	//工作模式3 吹风 + 加热2档
/*============================ MACROFIED FUNCTIONS ===========================*/
void relay_set(int level);
void relay_init();
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif
  • gpio_control.c内容:
#include "gpio_control.h"
//Relay control pin initialization
void relay_init()
{
    tuya_pin_init(relay_leve1, TUYA_PIN_MODE_OUT_PP_LOW);
    tuya_pin_init(relay_leve2, TUYA_PIN_MODE_OUT_PP_LOW);
}
//Heating mode setting
void relay_set(int level)
{
    switch (level){

    case mode0:
        {
        tuya_pin_write(relay_leve1, TUYA_PIN_LOW);
        tuya_pin_write(relay_leve2, TUYA_PIN_LOW);
        }
        break;
    case mode1:
        {
        tuya_pin_write(relay_leve1, TUYA_PIN_HIGH);
        tuya_pin_write(relay_leve2, TUYA_PIN_LOW);
        }
        break;
    case mode2:
        {
        tuya_pin_write(relay_leve1, TUYA_PIN_LOW);
        tuya_pin_write(relay_leve2, TUYA_PIN_HIGH);
        }
        break;
        default:
        break;
    }

}

上述代码实现了暖风机两档加热的控制,relay_init()函数放在工程的初始化函数calorifier_init()中初始化,之后使用relay_set(int level)即可调整暖风机的加热模式。

三、驱动暖风机的风扇电机和摇头电机


1.驱动原理图
 

驱动电路如下图,FAN_IN和SW_IN分别是风扇电机和摇头电机的控制引脚,控制引脚电平拉高后对应的输出引脚FAN_OUT和SW_OUT就会输出高电平驱动继电器开启,从而开启风扇电机和摇头电机,实现暖风机的吹风功能和摇头功能。
在这里插入图片描述

2.软件方案设定

  • 所用的SOC引脚图如下:

在这里插入图片描述

  • 驱动方案设定

SW_IN  : P14   |摇头电机控制引脚
FAN_IN : P16   |风扇电机控制引脚
高电平有效

将控制引脚配置为推挽输出模式,初始化为拉低状态,可以根据传入的函数传参执行引脚拉高和拉低,实现电机控制。下面我们开始编写控制程序。

3.程序实现

我们在gpio_control.c和其头文件中添加代码,内容如下:

  • gpio_control.h添加的代码:
#define fan_motor   16
#define shake_motor 14

void motor_init();//电机控制引脚初始化
void fan_motor_set(IN    BOOL_T bONOFF);
void shake_motor_set(IN     BOOL_T bONOFF);
  • gpio_control.c添加的代码:
void motor_init()
{
    tuya_pin_init(fan_motor, TUYA_PIN_MODE_OUT_PP_LOW);
    tuya_pin_init(shake_motor, TUYA_PIN_MODE_OUT_PP_LOW);
}

void fan_motor_set(IN    BOOL_T bONOFF)
{
    if(bONOFF == TRUE){
    tuya_pin_write(fan_motor, TUYA_PIN_HIGH);
    }else{
    tuya_pin_write(fan_motor, TUYA_PIN_LOW);
    }

}

void shake_motor_set(IN     BOOL_T bONOFF)
{
    if(bONOFF == TRUE){
    tuya_pin_write(shake_motor, TUYA_PIN_HIGH);
    }else{
    tuya_pin_write(shake_motor, TUYA_PIN_LOW);
    }

}

上述代码实现了暖风机的风扇电机和摇头电机的控制,motor_init()函数放在工程的初始化函数calorifier_init()中初始化,之后使用fan_motor_set()和shake_motor_set()函数即可控制风扇电机和摇头电机的开启。

四、驱动蜂鸣器


1.驱动原理图

驱动电路如下图,蜂鸣器在暖风机中用作按键提示音,也是GPIO控制,本方案中选用的是有源蜂鸣器,图中Buzzer引脚输出为高电平时,蜂鸣器工作。
在这里插入图片描述

2.软件方案设定

  • 驱动引脚设定
Buzzer  : P28   |蜂鸣器控制引脚
高电平有效

将控制引脚配置为推挽输出模式,初始化为拉低状态,可以根据传入的函数传参执行引脚拉高和拉低,实现蜂鸣器控制。下面我们开始编写控制程序。

3.程序实现

我们在gpio_control.c和其头文件中添加代码,内容如下:

  • gpio_control.h添加的代码:
#define buzzer_pin  28
void buzzer_set(IN     BOOL_T bONOFF);
  • gpio_control.c添加的代码:
void buzzer_init()
{
    tuya_pin_init(buzzer_pin, TUYA_PIN_MODE_OUT_PP_LOW);
}
void buzzer_set(IN     BOOL_T bONOFF)
{
    if(bONOFF == TRUE){
    tuya_pin_write(buzzer_pin, TUYA_PIN_HIGH);
    }else{
    tuya_pin_write(buzzer_pin, TUYA_PIN_LOW);
    }
}

由于按键提示音不需要很长的时间,故使用定时器开启蜂鸣器,响100ms后关闭蜂鸣器。

  • 在timer.c中添加代码:
void timer1_init(void)
{
    timer1 = (tuya_timer_t *)tuya_driver_find(TUYA_DRV_TIMER, TUYA_TIMER1);
    //The timer uses cycle mode
    TUYA_TIMER_CFG(timer1, TUYA_TIMER_MODE_PERIOD, tuya_timer1_cb, NULL);
    tuya_timer_init(timer1);
    //Start the timer, 1ms is a counting cycle
    tuya_timer_start(timer1, 1000);
    buzzer_set(1);
}
void tuya_timer1_cb(void *arg)
{
    static uint32_t s_tick;
    if (s_tick++ >= 100) {
        s_tick = 0;
        tuya_timer_stop(timer1);
        buzzer_set(0);
    }
}

上述代码实现了蜂鸣器的控制,buzzer_init()函数放在工程的初始化函数calorifier_init()中初始化,之后使用timer1_init函数即可实现按键提示音功能。

技术支持

您可以通过以下方法获得涂鸦的支持:

以上是关于涂鸦智能暖风机软件实现之暖风机外设驱动实现的主要内容,如果未能解决你的问题,请参考以下文章

涂鸦智能暖风机软件实现之LED驱动和断电记忆功能

涂鸦智能暖风机软件实现之云端控制(完结)

涂鸦智能暖风机软件实现之利用TC309实现触摸按键控制功能

涂鸦智能暖风机软件实现之利用B3950实现温度采集功能

涂鸦智能暖风机改造——硬件搭建

涂鸦智能暖风机嵌入式系统创建