磁链观测器 vesc中使用的方法。 已经移植到了自己的工程中,实现0速闭环启动。 代码、文档、仿真是一一对应的,方便学习。
一、项目概述
本项目基于TI公司的DSP28335芯片,开发了一套永磁同步电机(PMSM)磁场定向控制(FOC)系统,核心亮点在于集成了高性能的磁链观测器。该系统具备零速闭环稳定启动、磁链观测快速收敛、低速运行性能优异、输出扭矩大等优势,在控制性能上优于传统VESC(Vedder Electronic Speed Controller)方案,适用于对电机控制精度和动态响应要求较高的场景,如工业伺服、电动交通工具驱动等领域。
磁链观测器 vesc中使用的方法。 已经移植到了自己的工程中,实现0速闭环启动。 代码、文档、仿真是一一对应的,方便学习。
项目代码总文件数达799个,核心围绕DSP28335的外设驱动、电机控制算法及磁链观测器逻辑展开,采用模块化设计,将外设寄存器定义、中断管理、控制算法等功能拆分到不同文件中,便于维护与扩展。
二、核心硬件外设与驱动功能
(一)ADC模块(DSP2833x_Adc.h)
ADC(模数转换)模块是电机控制的“感官核心”,负责采集电机运行过程中的关键电信号(如相电流、母线电压等),为磁链观测和FOC算法提供原始数据支撑。其核心功能如下:
- 寄存器结构设计
- 采用“结构体+联合体”的形式定义寄存器,既支持对整个寄存器的整体操作,也支持对单个位的精细控制。例如ADCTRL1REG联合体包含ADCTRL1BITS结构体,可分别配置SEQCASC(级联序列器模式)、CONTRUN(连续运行模式)等关键位。
- 提供16个结果缓冲区(ADCRESULT0-ADCRESULT15),支持多通道同步采样,满足电机三相电流、电压等多参数同时采集的需求。 - 关键功能配置
-采样窗口控制:通过ACQPS位配置采样窗口大小,确保在不同转速下都能获取稳定的采样值,避免因采样时间不足导致的信号失真。
-序列器控制:支持SEQ1和SEQ2两个独立序列器,可灵活配置采样通道顺序和采样次数,适配不同传感器的安装布局。
-中断管理:通过INTENASEQ1/INTENA_SEQ2使能序列器中断,采样完成后触发中断,及时将数据传输给磁链观测器和控制算法模块。
(二)CPU定时器模块(DSP2833x_CpuTimers.h)
CPU定时器为系统提供精准的时间基准,是FOC算法周期执行、磁链观测器更新的核心保障,同时支持中断触发功能,协调各模块时序。
- 定时器结构
- 包含3个32位定时器(CpuTimer0-CpuTimer2),其中CpuTimer1和CpuTimer2预留用于DSP BIOS或实时操作系统,CpuTimer0供用户应用程序使用。
- 每个定时器包含计数器(TIM)、周期寄存器(PRD)、控制寄存器(TCR)及预分频寄存器(TPR/TPRH),支持灵活配置定时周期和中断触发条件。 - 核心功能
-周期配置:通过ConfigCpuTimer函数可设置定时器频率和周期,例如配置CpuTimer0为10kHz周期,用于触发FOC算法的电流环计算。
-启停与重载:提供StartCpuTimer0、StopCpuTimer0、ReloadCpuTimer0等宏定义,简化定时器控制操作。
-中断触发:当定时器计数达到周期值时,触发TINT0中断,在中断服务函数中执行电流采样、磁链观测、PWM占空比更新等核心任务,确保控制算法的实时性。
(三)增强型PWM模块(DSP2833x_EPwm.h)
EPWM模块是电机控制的“执行核心”,负责生成符合FOC算法要求的PWM波形,驱动逆变器功率器件,实现电机定子绕组的精准供电。
- PWM控制结构
- 包含6个独立的EPWM模块(EPwm1-EPwm6),对应电机三相桥臂的上下管,支持互补PWM输出。
- 核心寄存器包括时基控制(TBCTL)、比较控制(CMPCTL)、动作限定(AQCTL)、死区控制(DBCTL)等,覆盖PWM生成的全流程配置。 - 关键功能
-死区配置:通过DBRED(上升沿死区)和DBFED(下降沿死区)寄存器设置死区时间,防止同一桥臂上下管同时导通导致短路,保护功率器件。
-动作限定:在AQCTL寄存器中配置计数器在不同状态(如计数到零、计数到周期、计数到比较值)时的PWM输出动作(置1、清0、翻转),实现精确的占空比控制。
-同步与中断:支持PWM模块间同步,确保三相PWM波形相位一致;同时可配置ETSEL寄存器触发SOCA/SOCB信号,用于启动ADC采样,实现PWM与电流采样的时序同步。
(四)DMA模块(DSP2833x_DMA.h)
DMA(直接内存访问)模块用于实现高速数据传输,减少CPU干预,提升系统数据处理效率,尤其适用于ADC采样数据向内存的快速搬运,为磁链观测器提供实时数据支持。
- DMA通道结构
- 包含6个独立DMA通道(CH1-CH6),每个通道支持源地址和目的地址的自主配置,支持 burst 传输和连续传输模式。
- 核心寄存器包括模式寄存器(MODE)、控制寄存器(CONTROL)、传输计数寄存器(TRANSFERSIZE/TRANSFERCOUNT)及地址寄存器(SRCADDR/DSTADDR)等。 - 核心功能
-数据传输配置:通过DMACHxAddrConfig、DMACHxBurstConfig等函数配置DMA通道的源地址、目的地址、burst传输大小和步长,例如将ADC采样结果从ADCRESULT寄存器搬运到数据缓存区。
-触发源选择:在MODE寄存器的PERINTSEL位选择DMA触发源,支持ADC序列器中断、定时器中断、PWM同步信号等,实现数据传输与外设事件的同步。
-中断与溢出保护:支持传输完成中断和溢出中断,通过OVRINTE位使能溢出中断,当DMA传输计数溢出时触发中断,保障数据传输完整性。
三、磁链观测器相关支撑模块
(一)中断管理(DSP2833x_PieCtrl.h/DSP2833x_PieVect.h)
系统采用PIE(外设中断扩展)控制器,将多个外设中断分类管理,提升中断响应效率,为磁链观测器和FOC算法的实时执行提供保障。
- PIE控制器结构
- PIE控制器将中断分为12个组(PIEIER1-PIEIER12),每个组包含8个中断源,支持独立使能和标志位管理。
- 核心寄存器包括PIECTRL(PIE使能与向量地址)、PIEACK(中断确认)、PIEIFR(中断标志)等,实现中断的使能、触发、清除全流程控制。 - 与磁链观测相关的中断
-ADC中断:SEQ1INT和SEQ2INT(组1),ADC采样完成后触发,DMA模块通过该中断启动数据传输,或CPU直接读取采样数据用于磁链计算。
-定时器中断:TINT0(组1),定时触发磁链观测器的观测方程计算,更新磁链估计值。
-EPWM中断:EPWM1INT-EPWM6INT(组3),用于PWM周期同步,协调磁链观测结果与PWM占空比更新的时序。
(二)数据类型与外设集成(DSP2833x_Device.h)
该文件是系统的“基础框架”,定义统一的数据类型,集成所有外设头文件,确保各模块间数据交互的一致性和兼容性。
- 数据类型定义
- 定义int16/Uint16(16位有符号/无符号整数)、int32/Uint32(32位有符号/无符号整数)、float32(32位浮点数)等数据类型,适配DSP28335的硬件运算能力,同时保证代码的可移植性。 - 外设集成
- 根据目标芯片型号(如DSP2828335)自动使能对应的外设模块,例如对于28335芯片,使能全部6个EPWM、ECAP、EQEP模块,确保外设驱动与硬件匹配。
- 包含所有外设头文件的引用,用户只需包含DSP2833xDevice.h即可访问所有外设的寄存器定义和函数声明,简化代码结构。
四、系统控制流程
(一)初始化流程
系统上电后首先执行初始化操作,为后续电机控制和磁链观测奠定基础,初始化顺序如下:
- 系统控制初始化(
InitSysCtrl):配置DSP核心时钟、外设时钟,使能各外设时钟信号,例如将系统时钟配置为150MHz,EPWM模块时钟配置为75MHz。 - GPIO初始化(
InitGpio):配置EPWM输出引脚、ADC采样引脚、EQEP(编码器)引脚等的GPIO功能,确保外设信号正常输入输出。 - ADC初始化(
InitAdc):配置ADC采样通道、采样窗口、序列器模式,使能ADC中断,准备电流、电压采样。 - 定时器初始化(
InitCpuTimers):配置CpuTimer0的周期和中断,设置为FOC算法的核心定时基准。 - EPWM初始化(
InitEPwm):配置PWM时基、死区、动作限定,生成初始PWM波形(通常为0占空比),等待控制算法指令。 - DMA初始化(
DMAInitialize):配置DMA通道,关联ADC采样结果寄存器和数据缓存区,使能DMA传输中断。 - PIE中断初始化(
InitPieCtrl/InitPieVectTable):使能PIE控制器,配置中断向量表,将TINT0、ADCINT、EPWMx_INT等中断映射到对应的服务函数。 - 磁链观测器初始化:初始化磁链观测器的参数(如电机定子电阻、电感、永磁磁链等)、观测器增益、初始磁链估计值,复位观测器状态变量。
(二)运行时控制流程
系统初始化完成后,进入正常运行阶段,以CpuTimer0中断(如10kHz)为核心时序,循环执行以下流程:
- 定时器中断触发:
CpuTimer0计数达到周期值,触发TINT0中断,进入中断服务函数。 - ADC采样与数据传输:在中断服务函数中,启动ADC序列器采样电机三相电流和母线电压;或由DMA模块自动将ADC采样结果搬运到数据缓存区,减少CPU负载。
- 电流坐标变换:将采样得到的三相电流(
Ia/Ib/Ic)通过Clark变换转换为两相静止坐标系电流(Iα/Iβ),再通过Park变换转换为同步旋转坐标系电流(Id/Iq),为FOC算法和磁链观测器提供适配的电流数据。 - 磁链观测计算:磁链观测器根据当前电流(
Id/Iq)、电压指令(Ud/Uq)及电机参数,通过观测方程(如滑模观测器、扩展卡尔曼滤波等)计算转子磁链的估计值(ψd/ψq),并根据磁链估计值修正转子位置和转速。 - FOC算法计算:根据磁链观测器输出的转子位置和转速,结合电流环和速度环的PI调节器,计算得到同步旋转坐标系下的电压指令(
Ud/Uq),再通过逆Park变换和SVPWM(空间矢量脉宽调制)算法,生成各相PWM的占空比指令。 - PWM更新:将计算得到的PWM占空比更新到EPWM模块的比较寄存器(
CMPA/CMPB),EPWM模块根据新的比较值生成PWM波形,驱动逆变器为电机供电。 - 中断返回:完成所有计算和控制操作后,清除中断标志,返回主程序,等待下一次定时器中断触发,进入下一个控制周期。
五、系统核心优势
- 零速与低速性能优异:磁链观测器采用先进的观测算法,解决了传统观测器在零速和低速下磁链估计精度低的问题,实现零速闭环稳定启动,低速运行时扭矩波动小、转速稳定。
- 快速收敛与高响应:通过优化观测器增益和算法结构,磁链估计值收敛速度快,在电机负载突变或转速变化时,能快速跟踪实际磁链变化,确保控制精度。
- 高可靠性:EPWM模块的死区控制、DMA的数据传输保护、中断的优先级管理等设计,有效避免功率器件损坏、数据传输错误等问题,提升系统稳定性。
- 模块化与可扩展性:代码采用模块化设计,外设驱动、控制算法、磁链观测器相互独立,便于后续优化观测算法(如替换为无传感器观测器)或适配不同功率等级的电机。
六、应用场景与适配建议
- 应用场景:该系统适用于对电机控制精度和动态响应要求较高的领域,如工业伺服电机、电动摩托车、无人机电机、机器人关节驱动等。
- 适配建议
-电机参数校准:在使用前需根据实际电机的定子电阻、电感、永磁磁链等参数校准磁链观测器,确保观测精度。
-死区时间调整:根据功率器件(如IGBT、MOSFET)的开关特性调整EPWM死区时间,通常设置为1-5μs,避免短路并减少死区带来的电流畸变。
-中断优先级配置:在DSP2833x_SWPrioritizedIsrLevels.h中合理配置各中断优先级,确保电流采样、磁链观测等核心任务的中断优先级高于非核心任务(如通信、数据上报),保障控制实时性。