15-开环六步换相(周报) 周报03.09—03.15姓名蜡笔小新专业控制工程学习内容1.CCS 开发环境全流程实操从软件安装配置到电机控制工程的导入、编译与调试。2.电机控制核心算法解析深度拆解开环六步换相的代码实现理解底层逻辑与工程应用。一、CCS软件界面的熟悉1.1 左侧工具栏的文件夹1.Binaries存放编译后生成的可执行文件如 .out 文件用于下载到芯片中运行。2.Includes工程依赖的头文件集合通常是编译器和芯片支持库提供的标准头文件。3.Cmd存放链接命令文件.cmd用于定义内存分配、段地址等是程序能在芯片上正确运行的关键。4.CPU1_FLASH_DEBUG针对片上 Flash 的调试配置用于在 Flash 中调试程序适合接近真实运行环境的测试。5.CPU1_FLASH_STANDALONE用于生成独立运行在 Flash 上的程序上电后自动执行无需调试器连接。6.CPU1_RAM_DEBUG用于在 RAM 中调试下载和运行速度快适合开发阶段频繁修改和测试。7.DriverlibTI 官方提供的芯片外设驱动库包含 GPIO、PWM、ADC 等底层驱动函数方便快速开发。8.Inc工程内部的头文件通常包含寄存器定义、宏定义和数据结构声明。9.Include工程依赖的其他头文件可能是用户自定义或第三方库的头文件。10.Source存放用户编写的核心源代码是实现电机控制算法和业务逻辑的主要地方。11.targetConfigs存放目标配置文件.ccxml用于配置调试器和目标芯片的连接参数。12.main_CPU1.c工程的主程序入口文件包含 main() 函数是程序执行的起点。13.debug.log / Debug Logging.txt调试过程中生成的日志文件用于记录调试信息、错误和警告方便排查问题。1.2 需重点关注的三个文件夹1.source存放自己写的核心业务代码比如六步换相算法、中断服务函数、控制逻辑等是修改和编写代码的主要地方。2.inc / include存放工程的头文件比如寄存器定义、宏定义、函数声明等修改算法参数或添加新函数时会频繁用到。3.main_CPU1.c这是整个工程的入口文件main() 函数就在这里是调试和理解程序执行流程的起点。二、深度拆解六步换相的代码2.1头文件部分#include F28x_Project.hTI C2000 工程的核心头文件#include UserFuncs.h用户自定义函数头文件#include CtrlParams.h控制参数头文件#include inc/hw_types.hTI 驱动库的硬件类型定义#include inc/hw_memmap.h外设内存映射定义#include inc/hw_can.hCAN 外设寄存器定义#include driverlib/can.hCAN 驱动库函数声明2.2全局变量定义float IA_6S_temp 0.0, IB_6S_temp 0.0, IC_6S_temp 0.0, ID_6S_temp 0.0, IE_6S_temp 0.0, IF_6S_temp 0.0;//相电流(临时)原始坐标系float Velocity 0.0;//转速(rpm)float ElecTheta 0.0;//电角度(rad)int key_mark 0;//按键float DutyCycle[6] {0.0};//6路 PWM 占空比数组long int key_con10000;//按键计数变量float test_pin0;//测试引脚变量unsigned char ucTXMsgData[5], ucRXMsgData[5];//存储待发送/接收的 5 字节 CAN帧数据float iq1 0;//q轴电流转矩电流float THeta 0;//角度变量float ID 0;//额外三相电流六相电机或 dq 坐标系分量float IE 0;float IF 0;float IA 0;//三相电流的最终处理值float IB 0;float IC 0;2.3中断程序代码执行流程总结1.EPWM1 中断触发 → interrupt_counter 自增。2.判断换相间隔 → 若计数达到 300进入换相逻辑。3.选择换相组 → 根据 SwitchCounter 赋值对应的 DutyCycle 数组。4.更新换相序号 → SwitchCounter循环重置。5.重置间隔计数器 → interrupt_counter 0。6.更新 PWM 输出 → 调用 SetCMP 应用新占空比。7.中断结束 → 等待下一次中断触发。2.4主程序void main(void){memcpy(RamfuncsRunStart,RamfuncsLoadStart,(size_t)RamfuncsLoadSize);InitFlash();Step 1双核启动配置#ifdef _STANDALONE#ifdef _FLASHIPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);#elseIPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM);#endif#endifStep 2CAN总线初始化InitGpio();GPIO_SetupPinMux(62, GPIO_MUX_CPU1, 6);GPIO_SetupPinOptions(62, GPIO_INPUT, GPIO_ASYNC);GPIO_SetupPinMux(63, GPIO_MUX_CPU1, 6);GPIO_SetupPinOptions(63, GPIO_OUTPUT, GPIO_PUSHPULL);CANInit(CANA_BASE);CANClkSourceSelect(CANA_BASE, 0);CANBitRateSet(CANA_BASE, 200000000, 1000000);Step 3先清理所有中断状态、初始化中断向量表PIE并暂时关闭CPU级中断避免初始化过程中被意外中断干扰保证系统稳定启动。DINT;InitPieCtrl();IER 0x0000;IFR 0x0000;CANRetrySet(CANA_BASE, true);CANEnable(CANA_BASE);//完成 CPU1 的中断路由配置把电机控制相关的 EPWM、ADC 等中断绑定到对应的处理函数保证电机换相、电流采样等核心功能能被及时响应。EALLOW;PieVectTable.TIMER0_INT TIMER0_ISR;PieVectTable.EPWM1_INT EPWM1_ISR; //程序使用ePWM1中断PieVectTable.ADCA1_INT ADCA1_ISR;PieVectTable.ADCB1_INT ADCB1_ISR;PieVectTable.ADCC1_INT ADCC1_ISR;PieVectTable.ADCD1_INT ADCD1_ISR;EDIS;//完成双核外设分配将通信类外设交给 CPU2实现 “电机控制 通信” 的双核并行处理是多核 MCU 工程化的典型资源划分方式。EALLOW;DevCfgRegs.CPUSEL5.bit.SCI_A 1;DevCfgRegs.CPUSEL5.bit.SCI_C 1;DevCfgRegs.CPUSEL5.bit.SCI_D 1;DevCfgRegs.CPUSEL7.bit.I2C_A 1;DevCfgRegs.CPUSEL7.bit.I2C_B 1;EDIS;//外设初始化InitTIMERs(); // Initialize TIMER0 25usInitSPIs(); // Initialize SPIbInitDACs(); // Initialize DACA DACBInitADCs(); // Initialize ADCA ADCB ADCC ADCDInitEPWMs(); // Initialize EPWM1 EPWM2 EPWM3 EPWM10 EPWM11 EPWM12DELAY_US(50000);InitAD2S1210(); // Initialize AD2S1210InitKEYs(); // Initialize KEY//中断系统的最终使能配置PieCtrlRegs.PIECTRL.bit.ENPIE 1;IER | (M_INT1 | M_INT3);PieCtrlRegs.PIEIER1.bit.INTx1 1; // ADCA1 InterruptPieCtrlRegs.PIEIER1.bit.INTx2 1; // ADCB1 InterruptPieCtrlRegs.PIEIER1.bit.INTx3 1; // ADCC1 InterruptPieCtrlRegs.PIEIER1.bit.INTx6 1; // ADCD1 InterruptPieCtrlRegs.PIEIER1.bit.INTx7 1; // Timer0 InterruptPieCtrlRegs.PIEIER3.bit.INTx1 1; //程序使用ePWM1中断EINT;ERTM;//主循环状态采样、转速映射while(1){Velocity VelocityCal(); // 转速采样(r/min)ElecTheta ElecThetaCal(); // 电角度采样(rad)SetDACaValue(13.65*Velocity);SetDACbValue(13.65*Velocity);SetDACcValue(13.65*Velocity);}}2.5代码整体逻辑开环六步换相是无刷直流电机BLDC最基础的控制方式核心是通过固定时序切换三相绕组的导通状态生成旋转磁场驱动转子转动全程不依赖转子位置反馈仅靠定时器 / EPWM 中断计时。整体流程“系统初始化→中断配置→中断服务函数定时换相→主循环监控”三、总结完成了 CCS 开发环境的全流程实操熟悉了软件界面各文件夹功能重点掌握了 source、inc/include 头文件文件夹及 main_CPU1.c 入口文件的使用能完成电机控制工程的导入、编译与调试同时深度拆解了 BLDC 开环六步换相的完整代码理解了头文件引用、全局变量定义、中断服务程序与主程序的编写逻辑掌握了从系统初始化、双核与 CAN 总线配置、中断状态清理和向量表绑定、外设初始化到中断使能、EPWM1 中断定时换相及主循环状态采样监控的整体工程执行流程明晰了开环六步换相通过固定时序切换三相绕组导通状态生成旋转磁场驱动转子的核心原理以及各代码模块在电机控制中的具体作用和工程逻辑关联。