简单理解:STM32 + VOFA 上位机波形调试代码
debug_task.h 带行右侧注释版#ifndef _DEBUG_TASK_H // 头文件防止重复包含宏定义 #define _DEBUG_TASK_H /*vofa的通道数量*/ #define VOFA_CH_COUNT 20 // VOFA上位机发送通道最大数量 #define VOFA_RECV_CH_COUNT 4 // VOFA上位机下发接收通道数量 /*发送结构体*/ typedef struct{ float fdata[VOFA_CH_COUNT]; // 待发送的浮点数据数组对应各个通道 const unsigned char tail[4]; /*尾帧 0x00, 0x00, 0x80, 0x7f*/ // VOFA协议固定帧尾标识 }VOFA_Send_Handle_t; /*接收结构体*/ typedef struct{ float fdata[VOFA_RECV_CH_COUNT]; // 存储上位机下发的多路浮点数据 }VOFA_Recv_Handle_t; void Debug_Task(void); // 调试任务函数定时上传电机数据给VOFA上位机 #endifdebug_task.c 带行右侧注释版#include debug.h // 引入本模块头文件 #include stdlib.h // 引入标准库头文件 #include usb_device.h // 引入USB虚拟串口驱动头文件 /*vofa数据帧*/ VOFA_Send_Handle_t VOFA_Handle { // 定义VOFA发送帧全局结构体变量 .tail {0x00, 0x00, 0x80, 0x7f}, // 初始化VOFA协议固定帧尾 }; #include foc_type.h // 引入FOC电机控制数据类型头文件 extern abc_t Iabc; // 声明三相电流全局变量 extern alphabeta_t Ialphabeta; // 声明αβ坐标系下电流全局变量 extern qd_t Iqd; // 声明dq旋转坐标系下电流全局变量 void Debug_Task(void) // 调试任务函数实现 { VOFA_Handle.fdata[0] Iabc.a; // 通道0A相电流 VOFA_Handle.fdata[1] Iabc.b; // 通道1B相电流 VOFA_Handle.fdata[2] Iabc.c; // 通道2C相电流 VOFA_Handle.fdata[3] Ialphabeta.alpha3; // 通道3α轴电流偏移3方便波形区分 VOFA_Handle.fdata[4] Ialphabeta.beta3; // 通道4β轴电流偏移3方便波形区分 VOFA_Handle.fdata[5] Iqd.q5; // 通道5q轴交轴电流偏移5方便波形区分 VOFA_Handle.fdata[6] Iqd.d5; // 通道6d轴直轴电流偏移5方便波形区分 VCP_DataTx((uint8_t*)VOFA_Handle, sizeof(VOFA_Handle)); // 通过USB虚拟串口发送整帧VOFA数据 }一、整体作用这段代码是STM32 VOFA 上位机波形调试代码通过 USB 虚拟串口VCP把 FOC 电机控制里的各类电流数据实时上传到电脑 VOFA 软件用来实时看波形、调电机参数、排查算法 bug。1. 头文件debug_task.h作用防止头文件重复包含#ifndef _DEBUG_TASK_H避免多次编译报错宏定义通道数量VOFA_CH_COUNT20最多支持 20 路浮点波形上传VOFA_RECV_CH_COUNT4预留 4 路用来接收上位机下发的数据定义 VOFA 协议标准发送结构体float fdata[]存放要画波形的所有浮点数据三相电流、αβ、dq 电流等unsigned char tail[4]VOFA 固定帧尾0x00 0x00 0x80 0x7F用来让上位机识别一帧完整数据定义接收结构体预留接收上位机下发浮点指令的缓存声明调试任务函数Debug_Task()2. C 文件debug_task.c作用1头文件依赖usb_device.h调用 USB 虚拟串口发送函数VCP_DataTxfoc_type.hFOC 电机算法的坐标系数据类型三相 abc、αβ、dq2全局 VOFA 帧结构体VOFA_Send_Handle_t VOFA_Handle {.tail {0x00,0x00,0x80,0x7f}};初始化 VOFA 必须的帧尾标识上位机靠这 4 个字节区分每一帧数据的边界。3数据来源FOC 电机算法全局变量Iabc电机三相 A/B/C 相实际采样电流Ialphabeta三相经过克拉克变换后的 α、β 两相静止坐标系电流Iqd帕克变换后的 d、q 旋转坐标系电流FOC 核心控制量4Debug_Task()核心功能把电机 6 组关键电流赋值到 VOFA 数据数组通道 0/1/2A、B、C 三相电流通道 3/4α、β 轴电流3 偏移防止波形重叠看不清通道 5/6q、d 轴电流5 偏移错开波形VCP_DataTx把整个结构体二进制数据通过 USB 虚拟串口一次性发给电脑电脑打开 VOFA 软件选择「浮点帧模式」就能实时画出 6 条电流波形曲线二、实际开发用途调试 FOC 算法最常用工具观察三相电流是否平衡、克拉克 / 帕克变换是否正确、dq 电流闭环控制是否稳定。故障排查电机抖动、过流、异响、启动失败时看电流波形就能定位是采样问题、坐标变换错误还是 PI 参数不合适。参数整定不断修改电流环 PI 参数通过波形观察超调、稳态误差调到波形平稳。预留扩展最多可以上传 20 路变量后续电压、转速、角度、PI 输出等都可以加进去观测。三、小补充你当前代码的小特点用 USB 虚拟串口传输速度快、不占用硬件串口调试不影响其他外设给 αβ、dq 电流加了固定偏移值3、5多条波形上下错开不会重叠遮挡只做了数据上传接收结构体只定义没使用暂时还不能用 VOFA 下发指令控制电机。