打印
[开发生态]

【N32G401征文】+室内热水循环系统

[复制链接]
323|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yinxiangxv|  楼主 | 2024-1-3 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何用N32G401 MCU制作室内热水循环系统

1. 硬件准备:
     N32G401 MCU
     电源
     继电器
     流量传感器
     温度传感器
     显示屏
     按键

2. 硬件连接:
     将N32G401 MCU的电源引脚连接到电源的正极和负极。
     将N32G401 MCU的继电器控制引脚连接到继电器的控制引脚。
     将流量传感器的输出引脚连接到N32G401 MCU的模拟输入引脚。
     将温度传感器的输出引脚连接到N32G401 MCU的模拟输入引脚。
     将显示屏的数据引脚连接到N32G401 MCU的数字输出引脚。
     将按键的引脚连接到N32G401 MCU的数字输入引脚。

3. 软件开发:
     在N32G401 MCU上编写程序,实现室内热水循环系统的功能。
     程序应包括以下功能:
         读取流量传感器和温度传感器的值。
         根据流量传感器和温度传感器的数据,控制继电器的开关,以控制热水的循环。
         在显示屏上显示热水循环系统的工作状态。
         通过按键控制热水循环系统的运行。

4. 调试及测试:
     将程序烧录到N32G401 MCU上。
     给N32G401 MCU上电,并连接好所有硬件。
     运行程序,并测试热水循环系统的功能是否正常。
     根据测试结果,对程序进行修改和完善。

相关代码:

c
// 定义流量传感器和温度传感器的引脚
#define FLOW_SENSOR_PIN PB1
#define TEMP_SENSOR_PIN PB2

// 定义继电器的控制引脚
#define RELAY_CONTROL_PIN PA0

// 定义显示屏的数据引脚
#define DISPLAY_DATA_PINS PA1-PA7

// 定义按键的引脚
#define KEY1_PIN PB3
#define KEY2_PIN PB4

// 定义程序的状态变量
enum state {
    STATE_IDLE,
    STATE_RUNNING,
    STATE_PAUSED
};

// 定义全局变量
volatile uint16_t flow_sensor_value = 0;
volatile uint16_t temp_sensor_value = 0;
volatile uint8_t relay_state = RELAY_OFF;
volatile enum state system_state = STATE_IDLE;

// 中断服务程序
void TIMER1_Handler() {
    // 读取流量传感器和温度传感器的值
    flow_sensor_value = ADC_GetConversionValue(ADC1, FLOW_SENSOR_PIN);
    temp_sensor_value = ADC_GetConversionValue(ADC1, TEMP_SENSOR_PIN);

    // 根据流量传感器和温度传感器的数据,控制继电器的开关
    if (flow_sensor_value > FLOW_SENSOR_THRESHOLD) {
        relay_state = RELAY_ON;
    } else {
        relay_state = RELAY_OFF;
    }

    // 在显示屏上显示热水循环系统的工作状态
    Display_ShowStatus(system_state, relay_state, flow_sensor_value, temp_sensor_value);

    // 清除中断标志位
    TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
}

// 按键1的中断服务程序
void EXTI3_IRQHandler() {
    // 切换系统状态
    switch (system_state) {
        case STATE_IDLE:
            system_state = STATE_RUNNING;
            break;
        case STATE_RUNNING:
            system_state = STATE_PAUSED;
            break;
        case STATE_PAUSED:
            system_state = STATE_IDLE;
            break;
    }

    // 清除中断标志位
    EXTI_ClearITPendingBit(EXTI_Line3);
}

// 按键2的中断服务程序
void EXTI4_IRQHandler() {
    // 重置流量传感器和温度传感器的值
    flow_sensor_value = 0;
    temp_sensor_value = 0;

    // 清除中断标志位
    EXTI_ClearITPendingBit(EXTI_Line4);
}

// 主程序
int main() {
    // 初始化硬件
    SystemInit();
    RCC_Config();
    GPIO_Config();
    ADC_Config();
    TIM1_Config();
    EXTI_Config();
    Display_Init();

    // 进入主循环
    while (1) {
        // 根据系统状态,控制热水循环系统的运行
        switch (system_state) {
            case STATE_IDLE:
                relay_state = RELAY_OFF;
                break;
            case STATE_RUNNING:
                relay_state = RELAY_ON;
                break;
            case STATE_PAUSED:
                relay_state = RELAY_OFF;
                break;
        }

        // 在显示屏上显示热水循环系统的工作状态
        Display_ShowStatus(system_state, relay_state, flow_sensor_value, temp_sensor_value);
    }
}


使用特权

评论回复
沙发
huquanz711| | 2024-1-4 08:05 | 只看该作者
原来是模拟仿真,实际要复杂的多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

291

帖子

0

粉丝