# can-iot-system **Repository Path**: End-ING/can-iot-system ## Basic Information - **Project Name**: can-iot-system - **Description**: 基于CAN总线的物联网嵌入式系统。 项目实现了多节点协同工作: - MCU端:STM32L431采集温湿度,STM32F407通过CAN总线控制电机与舵机; - 网关端:基于IGKBoard实现CAN数据与网络协议的转换; - 云端:部署于阿里云服务器,实现设备状态监控与远程控制。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-23 - **Last Updated**: 2026-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式IoT控制系统 基于STM32与i.MX6ULL构建的一套分布式嵌入式控制系统,支持CAN 总线节点通信、MQTT云端交互、FreeRTOS多任务调度,以及VOFA+上位机实时监控。 ## 一、项目简介 本项目构建基于 STM32 的分布式节点网络:L431传感器节点负责温湿度采集(支持周期上报与云端即时触发)、舵机开环角度调节及LED状态控制;F407执行节点负责直流电机速度控制与编码器反馈。各节点通过CAN总线实现低延迟通信,并由i.MX6ULL网关经由MQTT协议对接阿里云,支持VOFA+实时监控。 系统采用 FreeRTOS 进行任务调度,实现: - 电机闭环PID与S型加减速控制,解决启停冲击与高速堵转; - 舵机PWM开环控制,支持按指令执行预设角度单圈旋转; - 温湿度双模式上报机制(周期性采集 + 云端指令即时触发); - 编码器溢出保护、RTOS实时性抖动优化及CAN/MQTT协议桥接。 ## 二、系统架构 ```mermaid graph TD %% ================= 样式定义 ================= classDef cloud fill:#e1bee7,stroke:#8e24aa,stroke-width:2px; classDef gateway fill:#bbdefb,stroke:#1e88e5,stroke-width:2px; classDef node fill:#c8e6c9,stroke:#43a047,stroke-width:2px; classDef tool fill:#fff9c4,stroke:#fbc02d,stroke-width:2px; %% ================= 云端平台 ================= subgraph Cloud [服务器平台 / 阿里云] MQTT_Broker[MQTT Broker / IoT Core] DB[(数据库 & 日志存储)] Cloud_UI[云端控制台] end %% ================= 网关层 ================= subgraph Gateway [物联网网关] iMX6ULL[i.MX6ULL 网关] BRIDGE[CAN/MQTT 协议桥接] end %% ================= 终端节点 ================= subgraph Nodes [分布式节点网络] L431[L431 传感器节点
温湿度 / 舵机 / LED] F407[F407 执行节点
直流电机 + 编码器] end %% ================= 调试工具 ================= subgraph Tools [监控与调试] VOFA[VOFA+ 上位机] end %% ================= 核心业务链路 ================= %% 云端 ↔ 网关 MQTT_Broker <==>|MQTT| iMX6ULL %% 网关 → 节点 iMX6ULL -->|CAN Bus| L431 iMX6ULL -->|CAN Bus| F407 %% L431 内部任务 L431 -->|周期/触发采集| T1[温湿度上报] L431 -->|PWM 开环| T2[舵机预设角度] L431 -->|GPIO 控制| T3[LED 状态切换] %% F407 内部任务 F407 -->|PID 闭环| T4[速度控制] F407 -->|S型规划| T5[加减速平滑] %% ================= 调试链路 ================= VOFA <==>|UART| F407 %% ================= 数据存储 ================= MQTT_Broker --> DB MQTT_Broker --> Cloud_UI %% ================= 样式应用 ================= class MQTT_Broker,iMX6ULL,Cloud_UI,DB cloud; class L431,F407,BRIDGE gateway; class VOFA tool; ``` 系统采用 **“终端节点 – 边缘网关 – 云平台”** 的分层架构,数据流向清晰、职责分离: * **终端层**:L431 与 F407 节点通过 **CAN 总线**与网关通信,负责本地采集、执行控制指令及闭环运算。 * **边缘层**:**i.MX6ULL 网关**作为协议转换中枢,实现 **CAN 与 MQTT 的双向桥接**,打通本地嵌入式网络与互联网。 * **平台层**:数据经网关上传至 **阿里云服务器**,实现远程监控、指令下发与数据存储;同时可通过 **VOFA+ 上位机**连接节点 **UART 调试串口**,实时查看电机转速曲线并整定 PID 参数。 *注:温湿度采集、舵机预设角度、LED 控制及电机 PID 算法等具体实现,详见硬件组成与软件设计章节。* ## 三、硬件组成与开发环境 ### 1、硬件平台 | **层级** | **核心设备** | **关键外设 / 模块** | **核心职责** | | :----------------- | :-------------- | :------------------------------------------------ | :--------------------------------------------- | | **终端层** | **STM32L431** | 温湿度传感器、舵机、LED | 环境感知、舵机预设角度旋转、状态指示 | | **终端层** | **STM32F407** | H 桥驱动板(TB6612FNG)、直流减速电机、正交编码器 | 输出 PWM + 方向信号控制 H 桥,实现电机闭环调速 | | **边缘层**(网关) | **i.MX6ULL** | CAN 收发器 (SN65HVD230DR)、以太网 | CAN/MQTT 协议桥接、云端通信 | | **调试层** | **PC / 上位机** | 板载 CH340 串口 | VOFA+ 实时监控、PID 参数整定 | ### 2、硬件连接拓扑 **CAN 总线网络**: 系统采用**双路独立 CAN 通道**设计,实现传感与执行链路的物理隔离: - **L431 节点**挂载至 **网关 A(i.MX6ULL CAN1)**,构成独立的传感数据通道; - **F407 节点**挂载至 **网关 B(i.MX6ULL CAN0)**,构成独立的运动控制通道; 两路 CAN 网络在物理与逻辑上完全隔离,节点之间无直接通信,互不干涉。 **调试串口**: F407 节点利用开发板板载的 CH340 串口(USB-SLAVE 接口),连接至 PC 端的 VOFA+ 上位机,用于独立监控各节点的电机转速曲线与 PID 参数整定。 **执行与传感**: - **L431 节点**:板载 SHT20、LED,外接 SG90 舵机,实现环境数据采集与状态指示。 - **F407 节点**:输出 PWM 与方向信号至 **H 桥驱动板**(TB6612FNG),驱动直流减速电机;电机自带正交编码器 A/B 相回连至 F407 定时器接口,用于速度闭环反馈。 ### 3、开发环境 | **类型** | **工具 / 平台** | **用途说明** | | :------------ | :---------------------- | :------------------------------------ | | **MCU 固件** | STM32CubeIDE / Keil MDK | STM32L431 / F407 代码编写、编译与调试 | | **RTOS** | FreeRTOS | 多任务调度、信号量与互斥锁管理 | | **网关开发** | Ubuntu / 交叉编译工具链 | i.MX6ULL 网关程序编译与部署 | | **MQTT 服务** | Mosquitto | 网关端 MQTT 客户端实现 | | **上位机** | VOFA+ | 电机转速曲线绘制、PID 参数调试 | | **版本控制** | Git | 代码版本管理 | ### 4、关键硬件特性说明 **分布式节点**:L431 与 F407 均独立运行 FreeRTOS,通过各自的 CAN 接口仅与所连网关通信;节点间无耦合,任务调度互不阻塞,系统实时性高。 **编码器处理**:F407 使用硬件定时器接口模式(Encoder Mode)采集正交编码器信号,支持 16 位溢出截断保护。 **实时调试**:VOFA+ 通过 UART 以高波特率实时接收节点发布的转速与位置数据,用于算法验证。 ## 四、核心功能说明 本系统实现了从终端感知、边缘决策到云端可视化的全链路闭环控制,核心功能模块如下: ### 1、 分布式数据采集与执行 * **环境感知 (L431节点)**:通过 SHT20 传感器实时采集环境温度与湿度,支持单次/周期两种上报模式。 * **运动控制**: * **PID 闭环调速 (F407节点)**:基于增量式 PID 算法控制直流电机转速,通过编码器反馈实现高精度调速。 * **执行机构控制 (L431节点)**:通过 PWM 信号驱动 SG90 舵机,实现 0°~180° 范围内的开环角度动作,模拟云台或阀门的物理联动。 ### 2、 边缘网关与协议转换 * **CAN ↔ MQTT 桥接**:网关作为核心枢纽,通过 SocketCAN 接口读取底层 CAN 总线数据,解析后将标准 JSON 格式数据通过MQTT协议发布到阿里云服务器;同时订阅云端下行指令并转换为 CAN 帧下发。 * **多路 CAN 管理**:利用 i.MX6ULL 的双路 CAN 接口(CAN0/CAN1),分别管理 F407 运动节点与 L431 传感节点,实现物理隔离与逻辑分组。 ### 3、上位机实时调参与调试 * **波形可视化**:通过 串口 (UART) 将 MCU 内部计算的 电机实际速度 与 累计圈数 以JustFloat 协议发送给 VOFA+,实时绘制动态波形图,直观监控电机运行状态。 * **便捷调参**:利用 VOFA+ 的滑块控件,直接在 PC 端拖动设定电机目标速度,下行指令支持 文本指令或 JustFloat 浮点数据,通过串口实时下发至 MCU 执行,免去反复烧录代码的麻烦。