文章来源 Cytech Engineer

基于瑞萨 RZ/T2L 及 RA8T1 从零实现 FOC (下):RA8T1 配置与算法实现

《基于瑞萨 RZ/T2L 与 RA8T1 从零实现FOC》将分为上、下两篇,系统性介绍如何基于瑞萨 RA8T1 微控制器 (Arm® Cortex®-M85 内核) 以及 RZ/T2L (Arm® Cortex®-R52内核),使用 FSP (Flexible Software Package) 配置磁场定向控制 (FOC) 驱动三相永磁同步电机 (PMSM) 的流程。

本文为下篇,将重点讲解 RA8T1 平台的 FSP 配置流程,详细剖析开环 VF 启动的 SVPWM 算法原理与 Matlab/Simulink 实现,展示在双平台上的关键驱动程序代码,呈现实验现象与性能测试对比,为完整实现 FOC 控制提供技术参考。

一、RA8T1 的 FSP 配置步骤

RA8T1 的 FSP 配置流程与上篇介绍的 RZ/T2L 高度相似,均通过 e²studio 的图形化界面完成。本节将重点说明两者在关键参数上的差异,相同操作步骤将简要带过。

(一) 配置时钟

RA8T1 的时钟源同样使用外部晶振 (20MHz),但 PLL 配置与 RZ/T2L 不同:

  • 倍频输出:480MHz (CPU 主频)
  • PWM 时钟:120MHz (GPT 定时器)
图1 RA8T1 时钟配置界面
图1 RA8T1 时钟配置界面

(二) PWM 模块配置 (GPT)

1、核心参数一致:

计数模式 (三角波中心对齐)、PWM 频率 (20kHz)、死区时间 (500ns) 等配置与 RZ/T2L 相同。

图2 RA8T1 三相互补 PWM 栈配置
图2 RA8T1 三相互补 PWM 栈配置

2、主要差异:

  • 三相互补输出定时器:U、V、W 通道分别设置 5、2、3
  • 引脚分配不同:各引脚配置如下图 (图4)、(图5)、(图6) 所示:
图3 RA8T1 PWM 参数配置界面
图3 RA8T1 PWM 参数配置界面
图4 U 相引脚
图4 U 相引脚
图5 V 相引脚
图5 V 相引脚
图6 W 相引脚
图6 W 相引脚
PhaseTimer ChPin
Phase_UGPT32_5UHP115
ULP609
Phase_VGPT32_2VHP113
VLP114
Phase_WGPT32_3WHP300
WLP112

表1 输出通道引脚

(三) ADC 配置 (相电流采样)

采样模式 (同步触发+PWM 中断)、通道分配策略 (开环阶段暂不配置电流采样) 均与 RZ/T2L 一致。主要有以下两点差异:

  • 触发源定时器:使用 GPT32_5 的波峰溢出触发 (RZ/T2L 使用 GPT32_0)
  • ELC 事件链接:需要相应调整,链接到 GPT32_5 事件
图7 RA8T1 ADC 触发源配置
图7 RA8T1 ADC 触发源配置

(四) 串口配置

配置完全一致:波特率 921600,用于 VOFA 波形显示。

图8 RA8T1 串口配置界面
图8 RA8T1 串口配置界面

二、关键代码实现

(一) 开环 FOC 之 SVPWM VF 算法——基于 matlab-simulink

该工程 VF 强拖电机的算法采用 simulink 建模,通过软件设置 Q 轴电压 (D 轴设为 0),通过反 Park 变换得到两相静止坐标系 (αβ) 下的U_alpha、U_beta 值,以及角度信息 θ。这些信息输入到 SVPWM 算法,分别计算出 U、V、W 对应的定时器比较值,最终通过三个定时器比较输出转化为 PWM 占空比,驱动电机旋转。

图9 SVPWM 算法
图9 SVPWM 算法

SVPWM VF 算法通过 matlab 的 simulink 生成的代码,放置于 20KHz 频率的 ADC 中断中执行,详见下一节相关代码。

(二) 驱动程序代码

RZ/T2L 和 RA8T1 都采用 FSP,基本框架一样,这里做统一说明。

1、主程序

程序入口主要完成定时器、ADC、串口、GPIO 的初始化。主循环主要用千将定时器的比较值通过串口上传到 VOFA 上位机,即输出马鞍波。

图10 主程序初始化与主循环代码框架
图10 主程序初始化与主循环代码框架

2、FOC ADC 中断服务程序 (PWM 同步)

ADC 中断由 U 相定时器波峰溢出触发,每 1/20KHz=50uS 进入中断,执行 foc_algorithm_step();,计算出各相定时器比较值,然后由 R_ GPT_THREE_PHASE_DutyCycleSet 函数输出 PWM,驱动电机。

在 foc_algorithm_step(); 会进行反 park 变换、UVW 各相占空比计算、扇区判断等操作,会涉及大量三角函数 sin, cos 以及浮点运算,在下文会作初步的计算时间性能测试。

图11 “FOC 驱动电机关键代码”ADC 采样
图11 “FOC 驱动电机关键代码”ADC 采样

三、实验现象

(一) 转电机

通过上述配置与代码,成功驱动三相永磁同步电机旋转。

(二) VOFA 显示 SWPWM 波形

通过串口将计算出的三相 PWM 比较值实时发送至 VOFA 上位机软件,可以清晰观察到标准的 SVPWM 马鞍形波形,验证了算法与配置的正确性。

图12 SVPWM 三相马鞍波形
图12 SVPWM 三相马鞍波形

四、性能测试比较

为评估 RZ/T2L 与 RA8T1 在 FOC 算法中的实时计算性能,通过示波器抓取 IO 低电平得到在 ADC 中断中执行开环 SVPWM FOC 算法计算时间,使用 CMSIS-DSP 的 arm_sin_f32 和 arm_cos_f32 进行对比。

下图 (图13) 为 RA8T1 的测试结果,从图中可以看到算法执行时间为 1.2us 左右:

图13 RA8T1 平台 FOC 算法执行时间测量
图13 RA8T1 平台 FOC 算法执行时间测量

下图 (图14) 为 RZT2L 的测试结果,从图中可以看到 100MHz 1GS/s 的示波器已经跟不上了,另外由于本次 T2L 实验涉及到的三角函数计算均用的 sin, cos 函数,未使用 CMSIS-DSP,执行时间已小于 1us。

图14 RZ/T2L 平台 FOC 算法执行时间测量
图14 RZ/T2L 平台 FOC 算法执行时间测量
图15 涉及的 sin, cos 三角函数运算
图15 涉及的 sin, cos 三角函数运算

为了提供更直观的性能参考,还另外做了一个实验,即:使用 STM32F407 执行 foc_algorithm_step(); 。在分别使用 arm_sin_f32、 arm_cos_f32 和 sin cos 计算时间差距很大,RA8T1、RZT2L 几乎无差别,跟上面得到的结果几乎一样,下图 (图16)、(图17) 分别为 STM32F407 实验结果:

图16 使用 arm_sin_f32、arm_cos_f32 需要约 2.5us
图16 使用 arm_sin_f32、arm_cos_f32 需要约 2.5us
图17 使用 sin cos 需要约 65us
图17 使用 sin cos 需要约 65us

当然 STM32 主频 168Mhz 无法与 RA8T1、RZ/T2L 比较,但从是否使用 CMSIS-DSP 计算三角函数,可以反应瑞萨这两款产品的强劲性能。

五、总结

《基于瑞萨 RZ/T2L 及 RA8T1 从零实现 FOC》通过上下两篇,完整展示了基于瑞萨 RZ/T2L (MPU) 和 RA8T1 (MCU) 从零开始实现 FOC 控制中开环 VF 启动的全过程。上篇聚焦于硬件平台解析与 RZ/T2L 的 FSP 底层驱动配置;本下篇则详细讲解了 RA8T1 的配置、SVPWM 算法的原理与实现、双平台的代码集成,并通过严格的性能测试对比,验证了两款芯片在实时电机控制领域的卓越性能。

关于 simulink 生成 SVPWM 算法的完整代码获取,或欲了解关于更多瑞萨相关方案和技术信息,请与骏龙科技当地的办事处联系或点击下方「联系我们」,提交您的需求,骏龙科技公司愿意为您提供更详细的技术解答。

 

更多信息: