利用MKV31F实现三相PMSM无传感器磁场定向控制 (FOC)
作者:Matus Plachy
1 简介
本应用笔记是DRM148(无传感器PMSM磁场定向控制)的补充,描述了该应用所用的MCU外设、硬件设置和测量结果。
2 MCU外设
表1总结了Kinetis KV31F MCU上的外设及其在PMSM无传感器矢量控制应用中的使用情况:
表1. Kinetis KV31F外设概览
2.1 用于产生6通道PWM的FlexTimer0配置
FlexTimer模块 (FTM) 是一个包含2至8通道的定时器,支持输入捕捉、输出比较以及产生PWM信号功能以实现来控制电机和电源管理应用。FTM时间基准是一个16位计数器,可用作无符号或带
符号计数器。Kinetis KV31F上有4个FTM实例,其中2个FTM具有8个通道,另外2个FTM具有2个通道。
关于如何配置FlexTimer以产生中心对齐的PWM并插入死区请参见应用笔记AN3729 [6]。
由于上述应用笔记支持在ColdFire V1上实现的早期版本 (1.0) 的FlexTimer,并且考虑到所用的硬件(TWR-MC-LV3PH),具体配置有几个不同之处,说明如下:
• 首先,需要在时钟门控寄存器中使能FlexTimer模块的系统时钟:
SIM->SCGC6 |= SIM_SCGC6_FTM0_MASK;
• 需要禁用某些寄存器的写保护以便进行更新:
FTM0->MODE |= FTM_MODE_WPDIS_MASK;
• 然后,建议使能FlexTimer内部计数器以便在调试模式下运行:
FTM0->CONF |= FTM_CONF_BDMMODE(3);
当硬件调试接口(JLink、Multilink等)连接到微控制器时,MCU便处于调试模式。它不取决于运行的代码中是否包含断点。
• FlexTimer0产生的PWM信号直接连到MOSFET驱动器。由于安全原因,Tower低压功率级上使用的MOSFET驱动器的上桥臂晶体管的输入信号是低电平有效的。因此,还需要设置PWM信号的正确极性:
FTM0->POL = FTM_POL_POL0_MASK |
FTM_POL_POL2_MASK |
FTM_POL_POL4_MASK;
• 占空比通过更改FlexTimer值寄存器的值来改变。这些寄存器是双缓存式,要更新其值,不仅需要写入数值,还需要通过设置加载使能(LDOK)位来确认变更。这样可确保所有值同时更新:
FTM0->PWMLOAD = FTM_PWMLOAD_LDOK_MASK;
每次更改值寄存器后,都需要将LDOK位置1,因此不仅要在加载初始值阶段将其置1,而且在矢量控制算法计算占空比值后的每次更新时也要将其置1。
• 正如ADC转换时序、电流和电压采样部分所述,本应用采用硬件触发模数转换器。来自FlexTimer的初始化触发信号 (Initialization Trigger signal) 用作主触发信号,用于触发可编程延迟区块 (Programmable Delay Block),以便确定模数转换启动的时刻。
FTM0->EXTTRIG |= FTM_EXTTRIG_INITTRIGEN_MASK;
• 最后,为了将信号引出芯片,必须配置MCU的输出引脚。输出引脚的信号分配在引脚控制寄存器中进行设置,可用信号列在[2]的“信号复用”一章中,并且与封装相关。
PORTC_PCR1 = PORT_PCR_MUX(4); // FTM0 CH0,PTC1
PORTC_PCR2 = PORT_PCR_MUX(4); // FTM0 CH1,PTC2
PORTC_PCR5 = PORT_PCR_MUX(7); // FTM0 CH2,PTC5
PORTC_PCR4 = PORT_PCR_MUX(4); // FTM0 CH3,PTC4
PORTD_PCR4 = PORT_PCR_MUX(4); // FTM0 CH4,PTD4
PORTD_PCR5 = PORT_PCR_MUX(4); // FTM0 CH5,PTD5
应用代码中的端口设置是基于Tower系统模块实现的。
2.2 ADC和PDB模块配置
片上ADC模块用于对成功执行矢量控制算法所必需的反馈信号(电机相电流和直流母线电压)进行采样。可编程延迟区块 (PDB) 通过硬件触发ADC采样。
为了获得指定的精度,ADC模块在使用之前需要执行自校准。这个校准过程需要编写代码,通过执行自校准代码,产生同相端和反相端增益校准结果,并在校准完成后将其存储在ADC同相端和反相端增益寄存器中。两个ADC模块都需要执行校准。校准之后,ADC模块配置为12位精度。CPU频率设置为120 MHz,然后利用可用的预分频值,将ADC模块的输入时钟设置为15 MHz。该设置对应的转换时间为2.2 µs(33个ADC时钟周期)。最后,必须在ADC的状态和控制寄存器2 (Status and Control Register 2) 中使能硬件触发。
PDB在内部/外部触发信号或可编程间隔节拍信号与ADC的硬件触发输入信号之间提供可控延迟,从而以精确的时序执行各次ADC转换。PDB模块内置一个计数器,计数到模数值 (Modulus register) 时溢出。由于PDB的输入触发信号由FTM0周期性提供,因此FTM0的modulo寄存器的值可以设置为PDB的modulo寄存器值。通道延迟寄存器 (Channel Delay registers) 中的值用于确定ADC的触发时刻,以便启动直流母线电压采样和电机相位模数转换。KV31F MCU上的PDB模块支持15种不同的输入触发源,参见器件参考手册[2]“PDB配置”部分的“芯片配置”一章中的列表。同样和FTM0类似,为了确认对延迟寄存器所做的更改,必须将PDB中控制和状态寄存器中的LDOK位置1。
2.3 ADC转换时序、电流和电压采样
当FlexTimer0的计数器在溢出到初始值之后复位时,FlexTimer0产生初始化触发信号 (Initialization Trigger signal)。该信号进入PDB,经过预定延迟后,触发电压和电流的模数转换。Kinetis KV31F 120 MHz MCU上有两个ADC模块。各ADC模块与PDB模块的一个通道关联。每个ADC模块有两个结果寄存器(因此可以配置2个通道),对应于PDB通道的两个可编程预触发延迟。因此,可以执行四次模数转换而无需请求中断(DMA不用于数据传输时)。本应用中,在CPU不干预的情况下,只需触发三次转换(两个电机相电流和一个直流母线电压)。图1显示了模块互连和ADC中断产生情况。
图1. ADC转换时序
2.4 电流测量
与ADC转换触发时序密切相关的是将ADC通道分配给所测量的模拟信号。对于FOC快速(电流)控制环的计算,必须知道电机所有三个相电流的值。由于只有两个ADC模块,因此在某一时间可以仅对两个模拟量进行采样。假设电机是一个对称三相系统,那么所有三个瞬时相电流之和为0。
公式1
� tu 3 �� 公式1
相电流在下桥臂晶体管导通的时刻测量,如果占空比很高(电压值在正弦曲线的最大值区域),那么可以测量电流的时间将非常短。为了获得稳定的采样电阻压降,下桥臂晶体管必须导通至少一个临界脉冲宽度。通道根据产生定子电压空间矢量的扇区来选择。该分配在ADC1中断服务例程结束时执行。因此,采样两个相电流即足够,第三个很容易根据公式2来计算:
公式2
������ �tu 4�� − �� 公式2
图2说明了为什么在某些时刻不能直接测量第三个电流。情形I显示60°时的相电流,情形II显示30°时的相电流。
图2. 电流检测
如图2所示,在60°时,可以对所有三个电流进行采样,因为电流是在下桥臂晶体管导通时进行采样。因此,脉冲宽度足以使电流稳定下来,并由模数转换器采集信号值。在30°时,脉冲太短,因而无法对A相电流进行采样。
2.5 SPI配置
应用中使用SPI接口来实现智能MOSFET栅极驱动器MC33937与KV31F MCU之间的通信。
MC33937栅极驱动器置于Tower低压功率模块上,用于驱动三相逆变器的高端和低端MOSFET晶体管。在应用中,必须执行MC33937初始化,主要是设置死区时间。在电机运行期间,也会定期检
查驱动器的状态寄存器,以便获得故障信息。MC33937驱动器要求SPI信号具有精确的时序。不能使用MCU的SPI模块的默认设置。SPI信号的精确时序参见参考文献[3]。
2.6 SCI (UART) 配置
应用中使用SCI来实现主机系统与嵌入式应用之间的通信。主机系统是指笔记本电脑或PC,其中安装了FreeMASTER软件来控制应用并以可视化方式显示其状态。Kinetis KV31F上有三个UART模
块。由于硬件解决方案基于Tower模块,因此使用UART0。通信速度设置为19200 Bd。
3 中断
由于MCU可通过硬件触发模数转换,因此该应用只需非常少的中断。
3.1 ADC1中断
当ADC1模块的通道A转换完成且具有最高优先级时,便会触发该中断请求。中断产生时,物理量的采样值已在以下寄存器中准备就绪:ADC0的结果寄存器A(电机相电流1)、ADC1的结果寄存
器A(电机相电流2)和ADC1的结果寄存器B(直流母线电压)。只能允许一个模块使能该中断,否则会同时产生两个中断请求,因为电机相电流的采样触发信号是同时产生的。ADC1中断服务例
程(ISR)开始执行时会调用“应用状态机 (Application State Machine)”函数。如果应用处于“运行 (Run)”状态,则执行PMSM矢量控制算法的快速(电流)控制环,包括位置和转速估算。慢速(转速)控制环的频率由快速控制环中的一个软件计数器来决定;每执行一次快速控制环,软件计数器的值便递减。读取触发该中断的ADC通道的结果寄存器,可清除中断标志。因此,在每个特定状态机函数开始时,都需要读取模数转换结果,哪怕在以后的程序执行中不会用到这些值。
图3所示的流程图概述了应用处于“运行 (Run)”状态和“旋转 (Spin)”子状态时ADC中断服务例程执行过程中的程序流程。
图3. ADC ISR流程图
3.2 I/O端口中断
只要按下KV31F Tower 板上的一个用户按钮,就会产生端口中断,该事件的处理在端口中断相关的ISR中执行。在ISR开始时,执行一个简单的逻辑来判断按下的是哪一个按钮,并清除中断标
志。按下SW1按钮将使转速以10%的步幅递增。按下SW2按钮将使转速以10%的步幅递减,最终变回停止(STOP) 状态。
有关利用用户按钮控制应用的更多信息,请参见参考文献[5],其中还说明了如何使用FreeMASTER控制界面来更好地控制和诊断应用。
3.3 PDB错误中断
PDB错误ISR用于清除以下情况下产生的序列错误故障:PDB启动ADC采样,但COCO标志(具体而言是ADC模块的ADCx_SC1n寄存器)未被清除(由于下面所述的多个原因,结果寄存器中的值未被读取)。这种情况下,PDB产生的pre-trigger信号不再触发ADC,产生序列错误中断。在ISR中,PDB模块随后重新初始化。PDB产生的触发信号周期与ADC转换完成中断的周期和PWM周期相同。另一个原因是ADC转换完成中断的执行(其中计算了快速控制环)时间超过一个PWM周期。如果用户在ADC转换完成中断中加入其他任务,就可能发生这种情况。除了产生PDB序列错误以外,更严重的影响是在控制的质量方面,因为有一个重要假设未得到满足:控制算法的执行超出了一个采样周期。实时控制应用的设计必须保证这种情况绝不会发生。
4 项目文件结构
项目中的源文件(*.c)和头文件(*.h)总数超过一百。因此,本文仅详细说明关键的项目文件,其余文件则分组说明。
主项目文件夹分为三个目录:
• build\iar\kv31\PMSM_Sensorless_FOC – 包含IAR编译器的配置文件以及编译器的输出可执行文件和目标文件。如果您的计算机上安装了IAR Embedded Workbench for ARM,双击工作空间文件“PMSM_SENSORLESS_FOC.eww”就会启动IAR IDE。
• freemaster\PMSM_Sensorless_FOC – 包含FreeMASTER配置文件
(“PMSM_Sensorless_FOC.pmp”) 和支持文件(HTML格式的控制页面和带变量地址的二进制文件)。
• src – 包含项目源文件和头文件,其内容将在下文说明。
src\projects\kv31\PMSM_Sensorless_FOC文件夹中的文件:
• main.c、main.h包含基本应用初始化(使能中断)、访问MCU外设和中断服务例程的子程序。FreeMASTER通信在后台无限循环中执行。
• M1_statemachine.c和M1_statemachine.h包含应用在特定状态或状态跃迁时执行的函数。
• freemaster_cfg.h是FreeMASTER界面的配置文件。
• PMSMFOC_appconfig.h包含应用程序中的常量定义(电机和控制器的参数以及其他矢量控制相关算法的常量)。利用“电机控制应用调整工具 (Motor Control Application Tuning Tool, MCAT)”调整应用以支持其他电机时,此文件由该工具在参数设置过程结束时产生。
• tower.h包含 Kinetis Tower卡定义(CPU速度和UART参数)。
• \peripherals\文件夹包含应用所用外设(FlexTimer、ADC、PDB、SPI、PIT)的静态配置相关的重要文件。
• isr.h是一个重要文件,包含分配给中断向量的外设中断服务程序(Interrupt Service Routine) 的定义。在该文件中,用户可以为其他外设中断添加ISR定义。
src\文件夹中的子目录:
• \State Machine包含状态机结构定义,处理状态之间的切换和状态跃迁。
• \Motor Structure包含专门用于电机控制算法(矢量控制算法、位置和转速估算算法、速度控制环)执行的结构定义和子程序。
src\cpu\headers文件夹中的文件:
• MKV31F51212.h头文件包含MCU所有寄存器和寄存器各位的宏定义。
src\CM4_MMCLIB_r1.0\文件夹中的文件:
• CM4_MMCLIB_IAR.a软件库包含电机控制、通用数学和滤波器算法。
该文件夹及子文件夹中的其他文件是相关的头文件,每个头文件对应于库中的一个特定函数。
• ACLIB\CM4_ACLIB_F16.a包含用于估算转子位置和转速的高级控制算法(反电动
势观测器和跟踪观测器)。
src\文件夹中的其他子目录:
• \common\和\cpu\文件夹包含CPU初始化例程。
• 子目录中的\drivers\文件包含UART和看门狗配置的通用源文件和头文件,以及CPU时钟设置程序。
• \FreeMASTER包含FreeMASTER应用程序的所有源文件,无需访问它或更改其中的任何内容。程序员接口仅通过src\projects\kv31\PMSM_Sensorless_FOC文件夹中的freemaster_cfg.h文件提供。
• \SAC\文件夹(传感器和执行器组件)包含用于访问外设的例程,电机控制算法使用这些外设来检测输入反馈物理量(电流、电压、转速、位置),并根据计算输出变量(FlexTimer、MOSFET前置驱动器)设置执行器。
5 存储器使用情形
下表总结了芯片存储器使用情况:
表2. 存储器使用(数值单位为字节)
6 硬件设置
Tower模块式开发系统用作基于Kinetis KV31F的PMSM无传感器控制的硬件平台。它包含下列模块:
• 塔式侧板模块 (TWR-ELEV)
• Kinetis KV31F塔式模块 (TWR-KV30F120M)
• 带电机的三相低压功率模块 (TWR-MC-LV3PH)
Tower系统的所有模块都可以通过Freescale网站或代理商订购,因此用户可以轻松构建目标应用所需的硬件平台。
6.1 硬件设置和跳线配置
利用Tower系统的模块构建该系统并不困难。外设模块和MCU模块插入侧板连接器,模块板侧的白条决定其与功能侧板(带mini-USB连接器、电源和开关的侧板)的连接方向,如图4所示。
图4. 基于塔式系统模块的硬件
Tower KV31F MCU模块和Tower三相低压功率级上的跳线都需要配置。
Tower KV31F板的跳线设置如下表所示。
表3. TWR-KV30F120M板的跳线设置
跳线设置如下表所示,图5突出显示了跳线位置。有关Tower低压功率级的更多信息(如硬件过流阈值设置等),另请参见用户手册[4]。
表4. TWR-MC-LV3PH板的跳线设置
图5. TWR-MC-LV3PH上的跳线和连接器位置
表5显示了TWR-MC-LV3PH的电机连接器的信号分配。
表5. TWR-MC-LV3PH上的电机连接器
参考设计使用的电机是TWR-MC-LV3PH套件的一部分。它是一款BLDC电机,反电动势电压呈梯形,定子上有凸极。它与PM同步电机的不同之处是后者定子上的绕组是分布式,形成正弦波形磁
场。两类电机的转子结构相同(轴上有凸极)。甚至矢量控制算法最初也是针对PM同步电机而开发的(假设磁场为正弦形状),BLDC电机也可以采用相同的控制策略。性能当然不是最佳,但驱动产生的声频噪声小于传统的六步换向控制。不过,其主要优势是客户可以在高性价比硬件解决方案上学习并采用无传感器矢量控制。
电机规格如下表所示:
表6. 电机规格
注释
应用参数(速度PI控制器和启动电流值)针对轴上安装有塑料圈(套件的一部分)的电机而设置,其他情况下可能发生速度振荡。
7 测量结果
7.1 CPU负荷和执行时间
CPU负荷主要受ADC1 ISR的执行影响,其中要执行状态机以及PMSM矢量控制的快速(电流)和慢速(转速)控制环的计算。
完整的ADC1 ISR需要2584(状态机和快速控制环)到2908(包含慢速控制环计算)个机器周期。
当更新占空比值时,ADC1中断以与PWM重载事件相同的频率周期性产生。
本应用中,ADC ISR每100 μs产生一次,对应于10 kHz的PWM频率。对于120 MHz的Kinetis KV31F 器件,它消耗21.5 – 24.2%的CPU性能。
7.2 FreeMASTER结果
下面的屏幕截图显示了电机的启动,其中包括了开环位置和估计位置合并的过程。该图片利用FreeMASTER应用程序的Recorder功能产生。
表6. 电机启动
8 结论
执行时间测量结果显示,Kinetis KV31F微控制器可以实现高动态响应的PMSM无传感器矢量控制算法。10 kHz PWM频率时的CPU负荷仅占24%,因而有很大的余量来提高快速控制环的频率或执
行用户的其他任务。
9 参考文献
下列参考文献可在freescale.com上找到:
1. 无传感器PMSM磁场定向控制 (文档DRM148)
2. KV31F子系列参考手册(文档KV31P100M120SF7RM)
3. 三相场效应晶体管前置驱动器(文档MC33937)
4. TWR-MC-LV3PH用户指南(文档TWRMCLV3PHUG)
5. TWR-KV31F120M OOBE演示用户指南(文档TWRKV31F120M)
6. 在ACIM/PMSM电机控制应用中使用FlexTimer(文档AN3729)
10 缩略语
表7所列为本文档所用的缩略语。
原文文档下载地址:
AN4911:利用MKV31F实现三相PMSM无传感器磁场定向控制(FOC)
|