- 概述
- 电机相电流采样方法
- 单电机相电流采样时间点
- 双电机 PWM 相位关系与相电流采样时间点
- 双电机 PWM 之间的同步触发信号连接图
- PWM、ADC 频率配置
- 电机 1 PWM 配置
- 电机 2 PWM 配置
- PWM、ADC 具体寄存器配置
- 验证波形
- 预告
- 参考文档
- 概述
在电机驱动控制系统中,需要对电机相电流和母线电压信号进行采集,在使用 PWM(脉冲宽度调制)来产生系统中的电压或电流时,因 PWM 属于一种开关信号,
因此在测量电流或电压时如果在错误的时间点使用 ADC 进行采样将会观测到纹波,测量到错误的数值,本文将讲述如何通过配置 RT1020 的 eflexPWM、ADC 外设,
正确的采样两个电机的相电流与母线电压,达到同时控制两个电机的目的。
- 电机相电流采样方法
采样电机相电流,可以在电机相线上直接采样,但这种采样方式一般需要隔离的传感器或者隔离放大器,成本高,
一般情况下使用三电阻连接于半桥的下桥,经过放大器后连接至 ADC 进行采样,硬件拓扑如下图所示:
- 单电机相电流采样时间点
采用三电阻下桥采样时,需要在下桥打开时才能采样到电流信号,单电机并且调制深度不高时可以在 PWM 中点(下桥 PWM 中点)进行采样,如下图所示:
COUNTER 为 eflexPWM 的递增计数器,INIT 为其初始值,VAL1 为其模值,COUNTER 计数到 VAL1 时触发 ADC 采样,采样完毕后产生 ADC 结束中断,FOC 电流环控制在此 ADC 中断中执行。
- 双电机 PWM 相位关系与相电流采样时间点
两个电机都采用三电阻下桥采样的方式采样电流,RT1020 中只有两个 ADC 外设,同一时刻只能同时采样两个通道,可同时采样两个相电流之后再采样母线电压,此过程需要 ADC 两次采样转化的时间,大约 2us (ADC 速度为 1.2Mps 时),采样完成之后需要立即执行电机电流环即 FOC 计算,并且不可中断,因此,在双电机控制时,需要将 PWM 错开,保持同步,并在正确的时刻触发 ADC 采样,以免发生冲突,导致采样错误和电流环不按固定的 PWM 周期运行。
本次设计采用两个 PWM 外设相位上错开 90 度的方式实现,也可错开 180 度,如果是 4 电机控制需要错开 90 度,RT1050 有 4 个 PWM 外设可控制 4 电机,在此同时评估。具体波形如以下示意图:
图中只画出电机 2 的 A 相的 PWM 相位延迟于电机 1 的 A 相的 PWM,B、C 相依此类推。
- 双电机 PWM 之间的同步触发信号连接图
如图所示,PWM1 的模块 0 产生 FLEXPWM1_PWM1_OUT_TRIG0 同步信号,经过 XBAR1 连接到 PWM2 的外部同步信号,
用于触发 PWM2 的 counter 重载其初始值 INIT。
PWM1 的模块 1 产生 FLEXPWM1_PWM2_OUT_TRIG0 信号经过 XBAR 后连接到 ADC_ETC 的触发信号,用于触发 ADC 采样。
PWM2 的模块 1 产生 FLEXPWM2_PWM2_OUT_TRIG0 信号经过 XBAR 后连接到 ADC_ETC 的触发信号,用于触发 ADC 采样。
- PWM、ADC 频率配置
PWM 外设的运行频率会影响生成的 PWM 的控制精度,RT1020 PWM 外设最大能工作在 132Mhz,ADC 是
40Mhz(12BIT,长采样,高速模式时)。
内核时钟: AHB_CLK_ROOT,工业级 RT1020 最大频率为 396MHz,消费级 RT1020 最大频率为 500MHz。
外设总线时钟:IPG_CLK_ROOT,经过 AHB_CLK_ROOT 三分频之后为 132MHZ,
提供给 eflexPWM、ADC、ADC_ETC、ENC、LPUART 等,
如果 eflexPWM 开启 Fractional Delay Logic 模块,频率最大只能设置到 100MHz,
外部 FlexSPI 时钟:132MHz。
下图为使用 MCUXpresso Config Tools 配置时钟的框图:
- 电机 1 PWM 配置
PWM1_SubModule_0 ( U 相 PWM 配置 ):
时钟源: IPG_CLK_ROOT ,132MHZ。
PWM 频率: 20K, 周期为 50 us。
INIT 寄存器: -132MHZ/20K/2 = -3300
VAL1 寄存器: 3300
死区时间: 2us,也就是 264 个 IPG_CLK_ROOT 时钟
PWM1->SM[0] 产生重载信号和初始化信号到其他子模块
counter 计数到 PWM1->SM[0].VAL4(延迟 90 度) 时产生触发信号 PWM_OUT_TRIG0,
并通过 XBAR 传递到控制 Motor 2 的 PWM2 External_sync,
PWM2 的 submodule_0、1、2 的 INIT_SEL 选择 EXT_SYNC 信号来重加载 Counter 的初始值,
从而使 PWM 错位 90 度, 4 电机时错位 90 度, 双电机时可错位 180 度。
PWM1_SubModule_1 ( V 相 PWM 配置 ):
时钟源: 使用 PWM1_SubModule_0 的时钟。
PWM 频率: 20K, 周期为 50 us。
INIT 寄存器: -132MHZ/20K/2 = -3300
VAL1 寄存器: 3300
死区时间: 2us, 也就是 264 个 IPG_CLK_ROOT 时钟
使用 PWM1_SubModule_0 产生的重载信号和初始化信号
counter 计数到 PWM1->SM[1].VAL4 (-3300,VAL4 用来设置采样点) 时产生触发信号 PWM_OUT_TRIG0,
并通过 XBAR 传递到 ADC_ETC 触发 ADC 采样 。
PWM1_SubModule_2 ( W 相 PWM 配置 ):
时钟源: PWM1_SubModule_0 。
PWM 频率: 20K,周期为 50 us。
INIT 寄存器: -132MHZ/20K/2 = -3300
VAL1 寄存器: 3300
死区时间: 2us,也就是 264 个 IPG_CLK_ROOT 时钟
使用 PWM1_SubModule_0 产生的重载信号和初始化信号
- 电机 2 PWM 配置
PWM2_SubModule_0 ( U 相 PWM 配置 ):
时钟源: IPG_CLK_ROOT ,132MHZ。
PWM 频率: 20K, 周期为 50 us。
INIT 寄存器: -132MHZ/20K/2 = -3300
VAL1 寄存器: 3300
死区时间: 2us,也就是 264 个 IPG_CLK_ROOT 时钟
使用 PWM1_SM[0] 模块产生的初始化信号, 重载信号使用本地的重载信号。
即 PWM2 的 submodule_0、1、2 的 INIT_SEL 选择 EXT_SYNC 信号来重载 Counter 的初始值,
PWM2_SubModule_1 ( V 相 PWM 配置 ):
时钟源: 使用 PWM2_SubModule_0 的时钟。
PWM 频率: 20K, 周期为 50 us。
INIT 寄存器: -132MHZ/20K/2 = -3300
VAL1 寄存器: 3300
死区时间: 2us, 也就是 264 个 IPG_CLK_ROOT 时钟
使用 PWM1_SM[0] 模块产生的初始化信号,
使用 PWM2_SubModule_0 产生的重载信号
counter 计数到 PWM2->SM[1].VAL4 (-3300,VAL4 用来设置采样点) 时产生触发信号 PWM_OUT_TRIG0,
并通过 XBAR 传递到 ADC_ETC 触发 ADC 采样 。
PWM2_SubModule_2 ( W 相 PWM 配置 ):
时钟源: PWM2_SubModule_0 。
PWM 频率: 20K,周期为 50 us。
INIT 寄存器: -132MHZ/20K/2 = -3300
VAL1 寄存器: 3300
死区时间: 2us,也就是 264 个 IPG_CLK_ROOT 时钟
使用 PWM1_SM[0] 模块产生的初始化信号,
使用 PWM2_SubModule_0 产生的重载信号
- PWM、ADC 具体寄存器配置
详见附件 .c 文件。
- 验证波形
使用示波器测量两个电机的 U 相 PWM,确认电机 2 的 U 相上桥 PWM 延迟于电机 1 的 U 相上桥 PWM 90 度,电流环大约在下桥 PWM 中点运行(PWM 中点+ ADC 采样时间)。
下图中蓝色探头为电机 1 U 相上桥 PWM 波形,黄色探头为电机 2 U 相上桥 PWM 波形,很明显其相位延后 ¼ 个 PWM 周期,即 90 度。
- 预告
RT1020 因只有 2 路 eflexPWM,所以只能做 2 个电机 FOC 控制,RT1050 有 4 路 flexPWM,可做 4 个电机 FOC 控制,可以用于 4 轴无人机的电机控制。
ADC 采样两次需要大约 2us 时间,假如无感 FOC 运行大约需要 3.5us(RT1050,600Mhz,代码在 ITCM 运行),速度控制需要 1us,因总时间不能超过 PWM 周期的 ¼,则可设置的 PWM 最大频率为:1/((2us+3.5us+1us)*4) = 38.461Khz。为了使电机相电流波形有比较好的正弦度,电机电流环控制频率至少大于电机相电流频率 15 倍,则电机相电流频率最大为:38K/15 = 2.533Khz,即最大电子转速:2.533K*60s = 151980 RPM。7 对极电机时,其最大机械转速为:151980/7=21700 RPM。
RT1050 具有 256K 的 RAM,FOC 代码全部放在 RAM 中运行是足够的。
- 参考文档
CM4FGDFLIBUG.pdf 此文档可在 RT 系列电机控制例程中的电机库文档目录下找到
DRM140.pdf PMSM Sensorless Vector Control on Kinetis Designer Reference Manual
评论