单片机调度与外设集成在电机控制中的应用
这个例子展示了如何在开发早期识别和解决有关外围设置和任务调度的问题。
以下是与MCU外设和调度相关的典型挑战:
ADC-PWM同步,实现PWM周期中点的电流传感
结合传感器延迟,以实现闭环系统所需的控制器响应
研究不同的PWM设置,设计专用算法
本示例展示了如何使用SoC Blockset来解决电机控制闭环应用中的仿真挑战,并通过部署到TI Delfino F28379D LaunchPad上进行硬件验证。
硬件要求:
TI Delfino F28379D发射台或TI Delfino F2837xD基于板
BOOSTXL-DRV8305EVM电机驱动板
Teknic M-2310P-LN-04K永磁同步电动机
模型结构
open_system (“soc_pmsm_singlecpu_foc”);
打开soc_pmsm_singlecpu_foc模型.本模型模拟单CPU电机控制器,包含在soc_pmsm_singlecpu_ref模型,为永磁同步电机逆变系统。控制器感知来自工厂使用的输出ADC接口并使用脉宽调制接口驱动逆变器。本例中使用了Motor Control Blockset™中的算法块。
ADC采集时间
ADC硬件包含一个采样和保持电路来检测模拟输入。为了确保完整的ADC测量,必须选择最小采集时间,以考虑输入电路和采样和保持电路中的电容的综合影响。
打开ADC接口块,将默认采集时间更改为100ns。中运行模拟并查看结果模拟数据检查器观察电流波形有失真。低采集时间导致ADC测量没有达到其真实值。因此,控制器通过产生一个相对占空比来做出反应,从而引起电机所引电流的变化。这些图显示了在A相电流通道中对不正确的ADC测量和透支的反应,其中A相电流为蓝色,B相电流为橙色。仿真速度反馈结果表明,在开环到闭环的过渡过程中存在明显的振荡,这在现实世界中会使电机停止工作。
为了解决这个问题,打开ADC接口块更改,并将采集时间更改为更大的值,320ns。该值高于手册中“ADC工作条件(12位单端模式)”章节中推荐的最小ADC采集时间TI Delfino F28379D发射台数据表。中运行模拟并查看结果模拟数据检查器.该图显示了精确采样的ADC值和控制器按照预期跟踪参考值。
通过将该模型部署到TI Delfino F28379D发射台,验证仿真结果与硬件的关系。在片上系统选项卡上,单击配置、构建和部署打开SoC建设者工具。
在SoC Builder工具中,打开外围配置工具,设置ADC > SOCx采集窗口周期参数13 ADC时钟节拍
适用于ADC B及C模组。ADC采集时钟节拍参数必须设置为在ADC接口块中设置的仿真时间值,乘以ADC时钟频率。您可以从模型硬件设置中获得ADC时钟频率。打开soc_pmsm_singlecpu_ref模型.在片上系统选项卡上,单击硬件设置打开配置参数窗口。在硬件实现>目标硬件资源> ADC_x部分,你可以看到ADC时钟频率(MHz)
参数值。此图显示了模拟的ADC接口块设置和部署的外围应用程序设置。在模拟和代码源中使用相同的设置以确保预期的行为。
在选择构建操作页,以监视来自硬件选择的数据构建和加载外部模式
.该图显示了来自硬件的数据,精确采样的ADC值和控制器跟踪参考值的预期。
ADC-PWM同步
BOOSTXL-DRV8305EVM电机驱动器具有使用6功率mosfet构建的三相逆变器。该电机驱动板使用低侧并联电阻来感应电机电流。电流感应电路放大了分流器上的电压降。这种设置确保了低功耗,因为电流只在底部开关打开并且远离PWM换向噪声时流过分流器。该图显示了BOOSTXL-DRV8305EVM电机驱动器中的低侧并联电阻电路。
为了正确的操作,电流感应必须发生在adc触发的PWM周期的中点。具体来说,当底部开关处于Up-Down计数器模式时,PWM计数器必须处于最大值。在不同实例下的电流采样结果为零。
要分析此案例,请将模型切换到高保真逆变器仿真模式。更改工厂变体,使用详细的基于MOSFET的三相逆变器来复制BOOSTXL-DRV8305EVM。
set_param (“soc_pmsm_singlecpu_foc/逆变器和电机/平均或开关”,...“LabelModeActivechoice”,“SwitchingInverter”);
改变输出模式
参数的脉宽调制接口来切换
连接6个pwm到Mux块。
set_param ('soc_pmsm_singlecpu_foc/PWM通道/PWM接口',“OutSigMode”,“切换”);set_param ('soc_pmsm_singlecpu_foc/PWM通道/PWM接口1',“OutSigMode”,“切换”);set_param ('soc_pmsm_singlecpu_foc/PWM通道/PWM接口2',“OutSigMode”,“切换”);
删除现有的PWM接口块和Mux之间的连接。
H = get_param(“soc_pmsm_singlecpu_foc / PWM频道/ Mux”,“LineHandles”);delete_line (h.Inport);
作为最后一步,将6个PWM输出连接到Mux。
set_param (“soc_pmsm_singlecpu_foc / PWM频道/ Mux”,“输入”,“6”);
add_line (“soc_pmsm_singlecpu_foc / PWM通道”,...{“PWM接口/ 1”,“PWM接口/ 2”,“PWM Interface1/1”,...“PWM Interface1/2”,“PWM Interface2/1”,“PWM Interface2/2”},...{“Mux / 1”,“Mux / 2”,“Mux / 3”,“Mux / 4”,“Mux / 5”,“Mux / 6”},“高速公路”,“智能”);
打开PWM接口块并设置事件触发模式来PWM周期结束
.中运行模拟并查看结果模拟数据检查器.图中,A相和B相电流近似为零电流。这将导致在控制回路中失去反馈和无驱动。选择启用任务模拟
在任务管理器块中模拟和可视化模拟数据检查器中的任务。
若要修复此问题,请更改事件触发模式来PWM周期的中点
,相当于PWM内部计数器处于最大值。中运行模拟并查看结果模拟数据检查器.
将模型部署到TI Delfino F28379D发射台使用SoC建设者工具。在SoC Builder工具中,打开外围配置工具,设置PWM事件条件来Counter = period
.在模拟和代码源中使用相同的设置以确保预期的行为。该图显示了用于模拟的PWM接口块设置和用于部署的外围配置工具设置。
该图显示了来自仿真和硬件的数据,具有正确的ADC-PWM同步和控制器跟踪参考值的预期。
另请参阅
多处理器微控制器的分区电机控制(电机控制模块)
版权所有The MathWorks, Inc.