4. RX上搭建第一个电机控制工程

在RX系列MCU上开始电机控制开发,第一步不是直接写FOC算法,而是把“能编译、能下载、能运行、能观察”的最小工程跑通。本节以RX72T(或同族RX72M/RX66T)为例,使用e² studio + CCRX编译器 + Smart Configurator(SC)搭建一个可复用的电机控制工程骨架,目标是在不接功率板的情况下,先让LED闪烁、串口打印时钟频率,并确认PWM定时器能输出互补波形。只有这个最小系统稳定后,后续的电流采样、编码器接口和FOC运算才有可靠的运行基础。

开发环境与工程模板

RX官方工具链为e² studio(基于Eclipse)配合CCRX或GCC for RX。安装时需勾选“Renesas RX Family”器件包和“Smart Configurator”插件。新建工程选择“Renesas RX C/C++ Executable Project”,器件选R5F572TNDxFB(RX72T,144引脚,200MHz),工具链选CCRX,工程模板选“Empty Project”而非“Hello World”,因为电机工程需要自己控制启动文件和链接脚本。工程生成后目录结构如下:

MotorCtrl_Demo/
├── src/
│   ├── main.c
│   ├── hal_entry.c
│   └── smc_gen/          // Smart Configurator生成
│       ├── Config_CMT.c
│       ├── Config_MTU3.c
│       └── Config_Port.c
├── inc/
├── linker_script.ld
└── MotorCtrl_Demo.scfg   // SC配置文件

关键点是:smc_gen下的文件由SC自动生成,不要手工修改;用户逻辑写在hal_entry.c或独立模块中。这样后续增加MTU3、S12AD、RSPI等外设时,只需在SC中勾选并重新生成,不会破坏已有代码。

启动流程与时钟配置

RX72T上电后从0xFFFFFFFC取复位向量,跳转到启动代码。启动流程依次为:复位向量→启动汇编(设置栈指针、初始化.data段、清零.bss段)→_INITSCT→main()→hal_entry()。电机控制对时钟敏感,因为PWM载波频率、ADC采样时刻、电流环周期都直接由时钟分频得到。RX72T的时钟树为:外部晶振(推荐16MHz或24MHz)→PLL倍频→系统时钟(ICLK)、外设时钟(PCLKA/PCLKB)、Flash时钟(FCLK)。

在SC的“Clocks”页中配置:主振16MHz,PLL倍频×12.5得到200MHz,ICLK=200MHz,PCLKA=100MHz,PCLKB=50MHz,FCLK=50MHz。配置完成后SC会生成R_Systeminit(),在main()之前完成时钟切换。验证方法:用CMT定时器做1秒中断翻转LED,若实际闪烁周期明显偏离1秒,说明时钟配置有误。示例中CMT0时钟源选PCLKB/8=6.25MHz,比较值设为6249,理论中断周期为1ms。

引脚与外设配置

最小系统需要配置三类引脚:LED指示(P00)、调试串口(SCI5:P50/TXD5、P51/RXD5)、PWM输出(MTU3:P24/MTIOC3A、P25/MTIOC3B)。在SC的“Pins”页中,将P00设为输出,P50/P51设为SCI5的TXD/RXD,P24/P25设为MTU3的PWM输出。注意RX的引脚复用表中,同一引脚可能对应多个外设,必须确认所选外设通道与引脚编号匹配。配置完成后,SC生成Config_Port.c,其中R_Config_Port_Create()会设置PMR、PDR、PCR等寄存器。

建议在SC中为每个外设单独建一个“Component”,例如MTU3_0、SCI5_0、CMT0_0,这样生成的函数名清晰,便于在hal_entry()中按顺序调用初始化。

最小系统点亮与调试

在hal_entry()中按以下顺序调用:R_Config_Port_Create()→R_Config_SCI5_Create()→R_Config_CMT0_Create()→R_Config_MTU3_Create()。然后启动CMT0,在中断回调中翻转P00,并通过SCI5打印“ICLK=200MHz”。MTU3配置为PWM模式1,载波频率20kHz,死区时间1μs,占空比初始50%。用示波器观察P24和P25,应看到一对互补方波,死区约1μs。若P24无输出,依次检查:MTU3时钟是否使能、P24的PMR是否置1、MTU3.TOER是否置1、PWM寄存器是否写入。串口无打印则检查SCI5的波特率寄存器BRR是否与PCLKB匹配,示例中PCLKB=50MHz,目标115200bps,BRR=50e6/(32×115200)-1≈12.56,取13并微调。

RX72T 最小电机控制工程启动与信号链 外部晶振 16MHz XTAL / EXTAL PLL ×12.5 ICLK=200MHz 分频器 PCLKA=100M / PCLKB=50M FCLK=50MHz Flash / 调试 启动流程 复位向量 启动汇编 R_Systeminit main() hal_entry() 外设初始化 R_Config_Port_Create() R_Config_SCI5_Create() R_Config_CMT0_Create() R_Config_MTU3_Create() 信号输出与观察 P00 → LED 1ms翻转 SCI5 → 115200bps 打印 P24/P25 → 20kHz互补PWM 死区 1μs 调试判断 LED闪烁周期≈1s 串口收到ICLK=200MHz PWM频率20kHz±1% 异常→查PMR/TOER/BRR