这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【FRDM-MCXA366试用】温控风扇

共1条 1/1 1 跳转至

【FRDM-MCXA366试用】温控风扇

高工
2026-09-20 00:44:08     打赏

之前的两个帖子分别完成了开发环境的搭建和温度采集与显示,接下来就让我们完成一个完整的作品

基于 NXP FRDM-MCXA366 开发板,实现温控风扇系统:

  • P3T1755 I3C温度传感器,实时采集环境温度,精度0.01°C

  • GDH-1247WP 6位段码LCD屏,显示温度和风速档位

  • BLDC无刷电机驱动板,通过串口控制转速,温度越高转速越快

LCD屏每2秒交替显示温度值(两位小数)和当前风速档位。

5088272e396de3aab30db8d1f070d242.jpg

硬件连接

I3C温度传感器(板载不可调整,方便代码对应)

MCU引脚功能
P1_8I3C0_SCL
P1_9I3C0_SDA

段码LCD屏(板载不可调整,方便代码对应)

MCU引脚LCD引脚功能
P0_12~P0_23LCD_P16~LCD_P27段码驱动
P0_24~P0_27COM1~COM4背板

电机驱动板(串口驱动)

MCU引脚驱动板功能
P4_5 (LPUART3_TX)RX发送控制指令
P4_2 (LPUART3_RX)TX接收驱动板回传
GNDGND共地

电机驱动板IO接口(备用,本次使用串口进行调速,实际也可使用IO进行调整)

7c084d68a4b828b13a0ab18df167cf6b.png

引脚功能
VSPPWM调速(1-20KHz,3.3-5V)或 0-5V模拟调速
DIR方向(高/悬空=正转,低=反转)
BRK急停(接地刹车)
FG转速反馈脉冲

电机驱动板串口控制协议

基本参数

  • 波特率:38400(固定,不可更改)

  • 数据格式:8N1

  • 通信方式:半双工,MCU→驱动板单向发送指令

帧格式

每条指令固定 14字节,结构如下:

┌────────┬──────────┬──────────┬──────────┬─────────────────────┬──────────┬────────┐
│ 起始位  │ Cmd_Ctrl1│ Cmd_Ctrl2│   Len    │     Data[8]         │   CS     │ 结束位  │
│  0xBC  │  0x66    │  0x03    │  0x08    │ D1 D2 D3 D4 D5 D6 D7 D8 │  1byte  │  0x16  │
└────────┴──────────┴──────────┴──────────┴─────────────────────┴──────────┴────────┘
字段值说明
起始位0xBC固定帧头
Cmd_Ctrl10x66 (102)写命令
Cmd_Ctrl20x03 (3)设置数据
Len0x08 (8)数据区长度
Data[0]~Data[7]见下文控制参数
CS前12字节累加 & 0xFF校验和
结束位0x16固定帧尾

完整代码实现

#define MOTOR_FRAME_START   0xBCU
#define MOTOR_FRAME_END     0x16U
#define MOTOR_CMD_WRITE     102U
#define MOTOR_CMD_SETDATA   3U
#define MOTOR_DATA_LEN      8U

static void Motor_SendCmd(uint8_t data1, uint8_t data2, uint8_t data3, uint8_t data4)
{
    uint8_t frame[14];
    uint32_t i, sum;

    frame[0]  = MOTOR_FRAME_START;
    frame[1]  = MOTOR_CMD_WRITE;
    frame[2]  = MOTOR_CMD_SETDATA;
    frame[3]  = MOTOR_DATA_LEN;
    frame[4]  = data1;        // 控制位
    frame[5]  = data2;        // 延时L
    frame[6]  = data3;        // 延时H
    frame[7]  = data4;        // 占空比
    frame[8]  = 0x7CU;        // 保留
    frame[9]  = 0xF9U;
    frame[10] = 0x19U;
    frame[11] = 0x00U;

    // 校验和
    sum = 0;
    for (i = 0; i < 12; i++) sum += frame[i];
    frame[12] = (uint8_t)(sum & 0xFFU);
    frame[13] = MOTOR_FRAME_END;

    // 逐字节发送
    for (i = 0; i < 14; i++) {
        LPUART_WriteByte(MOTOR_LPUART, frame[i]);
        while (!(kLPUART_TxDataRegEmptyFlag & LPUART_GetStatusFlags(MOTOR_LPUART)));
    }
}

温控调速逻辑

#define TEMP_THRESHOLD   30.0
#define SPEED_DUTY_LOW   10U    // 低温: 10%占空比
#define SPEED_DUTY_HIGH  100U   // 高温: 100%全速

static void Motor_UpdateByTemperature(double temperature)
{
    if (temperature >= TEMP_THRESHOLD) {
        // Data1=0x01: 串口控制+正转+不刹车
        Motor_SendCmd(0x01U, 0x00U, 0x00U, SPEED_DUTY_HIGH);
    } else {
        Motor_SendCmd(0x01U, 0x00U, 0x00U, SPEED_DUTY_LOW);
    }
}

串口输出

P3T1755 + SLCD + Motor (I3C)
P3T1755 dynamic address set OK
P3T1755 sensor initialized
Motor UART init OK, set serial control mode
System running.
Temp: 28.50 C  Duty: 10%
Temp: 29.12 C  Duty: 10%
Temp: 30.25 C  Duty: 100%
Temp: 30.19 C  Duty: 100%

总结

这个项目整合了 MCXA366 的 I3C、SLCD、LPUART 三个外设。串口控制电机驱动板的关键在于读懂电机驱动配套的命令结构。





关键词: FRDM-MCXA366     温控     风扇    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]