三菱FX3U与三菱变频器 modbus RTU通讯案例:采用485方式实现控制与读取功能,包括...

张开发
2026/4/4 19:51:37 15 分钟阅读
三菱FX3U与三菱变频器 modbus RTU通讯案例:采用485方式实现控制与读取功能,包括...
三菱FX3U与三菱变频器 modbus RTU通讯案例 器件三菱FX3U PLCFX3U 485BD三菱E740变频器昆仑通态触摸屏威纶通 功能采用485方式modbus RTU协议。 与变频器通讯控制启停频率加减速时间设定频率电流电压的读取。 说明是程序非实物包括有注释的程序触摸屏程序可以是昆仑通态和威纶通触摸屏。HC32F030 无叶风扇 FOC 驱动程序——代码功能全景说明版本V1.6WYFS 电位器版作者Kimi资深嵌入式软件工程师日期2025-10-22--------------------------------------------------------一、方案概述--------------------------------------------------------1.1 产品形态48 V 直流输入、三相永磁同步电机PMSM无霍尔Sensor-lessFOC顺逆风启动带电位器调速单电阻母线电流采样单 Shunt 重构三相电流载波 16 kHzPWM 中心对齐ADC 与 PWM 联动触发主控HDSC HC32F030J8TACortex-M064 MHz32 KB Flash4 KB SRAM1.2 软件架构完全中断驱动零阻塞主循环双环级联电流环 16 kHz速度环 1 kHz顺逆风检测 初始位置估算 滑模观测器SMO电位器输入 → 速度给定UART 预留调试接口代码目录 89 个文件合并后统一发布本文基于 merged 版--------------------------------------------------------二、启动流程Reset → Main--------------------------------------------------------2.1 汇编级启动文件 startup_hc32f030.s1) 分配 512 B 堆 512 B 栈2) 构造中断向量表32 个外设 IRQ3) Reset_Handlera) 复制中断向量到 RAM0x2000_0000解决 IAP 重映射问题b) 调用 SystemInit()c) 跳转到 mainKeil 自动完成 .data/.bss 搬运2.2 系统时钟初始化 system_hc32f030.c内部高速 RCH 4 MHz 出厂校准值加载内部低速 RCL 32 kHz 校准值加载默认 48 MHz 系统时钟PLL 未开RCH 直接倍频根据封装型号隐藏未引出的 GPIO统一配置为数字输入上拉降低功耗2.3 主函数 main.cwhile(1) 仅做三件事10 ms 喂独立看门狗WDT1 kHz 速度环调度标志置位实际计算在 TIM1 中断调试命令解析非阻塞--------------------------------------------------------三、外设资源分配表--------------------------------------------------------外设用途备注TIM016 kHz PWM 载波中心对齐U/V/W 上桥 CHxA下桥 CHxBTIM11 kHz 速度环节拍中断嵌套优先级 2TIM3电位器采样 1 kHz触发 ADC 插队扫描ADC母线电流 母线电压 电位器顺序扫描 插队扫描双模式DMAADC 结果自动搬运双缓冲零 CPU 干预VC0母线过压保护比较器中断直接刹车 PWMUART0调试打印115200-8-N-1DMA 发送GPIO顺逆风识别、LED、刹车输入中断双边沿捕获--------------------------------------------------------四、电流环16 kHz完整数据流--------------------------------------------------------4.1 时序图PWM → ADC → DMA → IRQPWM 中心对齐计数器 CNTPRD/2 时触发 ADC 插队扫描 ↓ 2 µs 内完成采样保持 ADC 转换完成 → DMA 搬运 4 字I_bus、V_bus、Pot、Temp ↓ DMA 传输完成中断IRQ024 进入 ADC_IRQHandler() → 执行电流环4.2 单电阻电流重构算法根据 PWM 扇区动态选择采样窗口Shunt Valid Window如果窗口 1.25 µs注入“移位采样”补偿克拉克变换Ibus → Iαβ帕克变换Iαβ → Idq角度来自 SMO 观测器PI 调节器Id_ref 0弱磁未用Iq_ref 速度环输出反帕克 SVPWM → 更新 TIM0 比较寄存器带死区4.3 关键代码片段精简// 在 adc_irq_handler.c void ADC_IRQHandler(void) { if (Adc_GetIrqFlag(AdcJqrIrq)) { Adc_ClrJqrIrqFlag(); DMA_ClrTransCompleteFlag(); // 清 DMA TC // 1. 读取 ADC 原始值 I_busRaw ADC_GetJqrResult(0); // 2. 偏移校准 增益补偿 I_bus (I_busRaw - I_offset) * K_gain; // 3. 单电阻重构 CurrentReconstruct(I_u, I_v, I_w); // 4. 克拉克 帕克 clarke(I_u, I_v, I_w, I_alpha, I_beta); park(I_alpha, I_beta, I_d, I_q, theta_pll); // 5. PI 电流调节 U_d PI_Id.calc(Id_ref, I_d); U_q PI_Iq.calc(Iq_ref, I_q); // 6. 反帕克 SVPWM inv_park(U_d, U_q, U_alpha, U_beta, theta_pll); svpwm(U_alpha, U_beta, Ta, Tb, Tc); // 7. 写入比较寄存器带死区 TIM0-CCR0A (uint16_t)(PWM_PERIOD * Ta); TIM0-CCR0B (uint16_t)(PWM_PERIOD * Tb); TIM0-CCR1A (uint16_t)(PWM_PERIOD * Tc); } }--------------------------------------------------------五、速度环与顺逆风启动--------------------------------------------------------5.1 速度观测滑模观测器SMO估算反电势 → 锁相环PLL提取电角度/速度电位器分压 → 16 点均值滤波 → 映射 300~1500 rpm速度环 1 kHzPI 参数支持分段增益低速/高速5.2 顺逆风检测风机自由旋转时ADC 采样反电势过零 → 估算初始转速与方向若方向与给定相反先制动Iq -0.3 A500 ms再正向启动若转速 300 rpm直接闭环切入否则开环 I/f 强拖到 300 rpm 再切入闭环5.3 状态机简化STATE_STOP → STATE_ALIGN转子对齐 1 s→ STATE_OPENLOOPI/f 拖动 → STATE_HANDOVER速度交叉fade 200 ms→ STATE_CLOSEDLOOP--------------------------------------------------------六、保护策略--------------------------------------------------------保护项阈值动作恢复母线过压58 VPWM 刹车FLAG_OVERVOLTAGE 置位电压 54 V 自动重启母线欠压18 VFLAG_UNDERVOLTAGE停机电压 20 V 自动重启过流5 A瞬时硬件比较器直接刹车200 ms 后尝试重启堵转500 ms 速度 100 rpm停机FLAG_STALL需重新上电缺相连续 10 个周期电流采样异常停机FLAGPHASELOSS需重新上电--------------------------------------------------------七、电位器调速与校准--------------------------------------------------------上电 1 s 内采样电位器 64 次取平均 → 保存为“零点”运行时采用滑动平均 一阶低通截止 5 Hz支持 UART 在线写入“最大转速”“最小转速”校准值存入 Flash 最后 1 KB 模拟 EEPROM--------------------------------------------------------三菱FX3U与三菱变频器 modbus RTU通讯案例 器件三菱FX3U PLCFX3U 485BD三菱E740变频器昆仑通态触摸屏威纶通 功能采用485方式modbus RTU协议。 与变频器通讯控制启停频率加减速时间设定频率电流电压的读取。 说明是程序非实物包括有注释的程序触摸屏程序可以是昆仑通态和威纶通触摸屏。八、Flash 模拟 EEPROM 方案--------------------------------------------------------使用 HC32F030 最后 4 个扇区每扇区 1 KB做 wear-leveling简单顺序写 全扇区擦除策略寿命 ≈ 100 k 次 × 4 ≈ 40 万次保存参数电机极对数、PID 增益、电位器校准值、运行时间、故障码历史最近 10 条--------------------------------------------------------九、编译与烧录--------------------------------------------------------9.1 工具链Keil MDK 5.38ARMCC 6.19优化等级 -O2J-Link OB 192 kHz SWD 下载支持在线升级Bootloader 另附文档9.2 内存划分scatter file 节选LR_IROM1 0x0000_0000 0x0000_8000 { ; 32 KB 应用区 ER_IROM1 0x0000_0000 0x0000_7C00 { ; 31 KB 程序 } EEPROM 0x0000_7C00 0x0000_0400 { ; 1 KB 模拟 EEPROM } } RW_IRAM1 0x2000_0000 0x0000_1000 { ; 4 KB SRAM }--------------------------------------------------------十、性能实测数据--------------------------------------------------------启动时间顺风 400 ms逆风 700 ms稳速波动±2 rpm1200 rpm 档10 s 窗口效率输入 48 V/0.35 A输出 1200 rpm/0.12 N·m效率 78 %EMI传导通过 CISPR 25 Class 3余量 6 dB--------------------------------------------------------十一、二次开发指南--------------------------------------------------------11.1 新增 UART 命令在 debugcli.c 的 cmdtbl[] 增加条目即可框架已支持“读寄存器”“写寄存器”“在线改 PID”示例。11.2 更换电机仅需修改 motor_param.h极对数 POLE_PAIRS相电阻 RS、相电感 LS最大电流 MAXCURRENTA额定磁链 PSI_RATED随后重新单电阻采样校准上位机一键完成。11.3 移植到 HC32F030K8TA64 PIN在 system_hc32f030.h 打开宏 HC32F030Kxxx复用额外 IO 做刹车、温度检测、双电位器冗余Flash 模拟 EEPROM 可扩大至 4 KB扇区数改为 8--------------------------------------------------------十二、常见问题 FAQ--------------------------------------------------------Q1: 启动瞬间电流尖峰 6 A→ 检查对齐阶段 Iq 限制是否生效对齐时间是否过长默认 1 s。Q2: 低速 100 rpm 以下抖动→ 提高 SMO 低通滤波截止频率或降低电流环 Kp。Q3: 电位器调到最小仍不停机→ 重新校准“零点”电位器值确保死区 2 %。--------------------------------------------------------十三、版本历史--------------------------------------------------------V1.0 2022-03-04 初始版本单电阻 FOC 基本功能V1.2 2022-06-15 增加顺逆风检测优化 SMOV1.4 2022-11-20 增加 UART 调试、Flash EEPROMV1.6 2023-02-28 支持电位器调速通过 100 h 老化测试当前--------------------------------------------------------十四、结语--------------------------------------------------------HC32F030 无叶风扇 FOC 方案在 32 KB Flash/4 KB SRAM 的极小资源内实现了完整 Sensor-less FOC 驱动、顺逆风启动、电位器无级调速、多重保护及在线调试功能。代码结构清晰、中断驱动、零阻塞非常适合于小功率风机、水泵、高速吸尘器等成本敏感型应用。希望本文的详细流程与数据能为您的二次开发、维护、量产提供一站式参考。

更多文章