主要内容

如何使用霍尔有效性和霍尔解码器块

如果您使用霍尔位置传感器获取位置反馈,请遵循此过程将场定向控制(FOC)算法与霍尔传感器集成,并解码转子位置和速度值。

为了确定转子的位置、旋转方向和准确的转子速度,我们在电机内部至少需要三个霍尔传感器。为了提高计算转子位置和速度值的准确性,可以使用具有三个以上霍尔传感器的电机。这个过程使用模型mcb_pmsm_foc_hall_f28069m.slx作为参考。此外,它还假设硬件设置使用一个带有三个相距120度的霍尔传感器的永磁同步电机(PMSM)。

配置eCAP引脚

将三个霍尔传感器连接到硬件的GPIO引脚后,使用模型配置参数对话框将这些GPIO引脚连接到eCAP模块寄存器。eCAP定时器捕获单个霍尔传感器连续两次霍尔值变化(0到1或1到0)之间的时间。您可以将此时间间隔与当前霍尔状态(霍尔传感器A +霍尔传感器B +霍尔传感器C)一起计算转子的位置和速度值。例如,对于霍尔传感器A, eCAP模块应该读取eCAP1寄存器,并记录在360度电旋转周期中发生的霍尔值变化之间的两个时间间隔(T1和T2)。

类似地,eCAP2和eCAP3寄存器应该分别读取霍尔值并记录霍尔传感器2和3的时间间隔。使用以下步骤配置eCAP连接。

在Simuli金宝appnk中®模型,使用Simulink工具金宝app条打开模型设置打开“配置参数”对话框。在目标硬件资源部份硬件实现选项卡,单击eCAP组。使用这些字段将eCAP寄存器分配给连接到霍尔传感器的通用I/O (GPIO)引脚:

  • ECAP1引脚分配—选择霍尔传感器A连接的GPIO引脚。

  • ECAP2引脚分配—选择霍尔传感器B连接的GPIO引脚。

  • ECAP3引脚分配—选择霍尔传感器C连接的GPIO引脚。

为霍尔值转换生成中断

对于每个霍尔传感器,当霍尔值发生变化(从0到1或从1到0)时,eCAP定时器应该重置并启动。当霍尔值发生变化时,硬件中断可以触发这个动作。使用此过程为三个eCAP寄存器(连接到三个霍尔传感器)生成单独的硬件中断集。

  1. 使用Simuli金宝appnk浏览器添加硬件中断块从德州仪器C2000处理器的嵌入金宝app式编码器支持包>调度

  2. 使用“C28x中断块参数”对话框配置该块。设置CPU中断号而且PIE中断数参数来配置块,为每个霍尔传感器的每次霍尔值变化(从0到1或从1到0)触发中断。此外,这将配置块与配置的eCAP寄存器接口,以检测霍尔值的变化。

  3. 硬件中断块在名为代码生成并将其连接到一个多路复用器,为三个霍尔传感器产生单独的硬件中断信号。

服务产生的中断

服务硬件中断信号,以便对于每个中断:

  • eCAP定时器(霍尔传感器)复位并重新启动。

  • 该算法捕获当前霍尔状态(霍尔传感器A +霍尔传感器B +霍尔传感器C)。

使用这个过程来实现服务硬件中断的算法:

  1. 使用Simuli金宝appnk浏览器添加eCAP块从德州仪器C2000处理器的嵌入金宝app式编码器支持包>C280x

    将此块放置在名为代码生成.该子系统捕获单个霍尔传感器两次霍尔值变化之间的时间流逝(计时器计数)。

  2. 使用Simuli金宝appnk浏览器添加大厅的有效性块从电机控制模块>传感器解码器.连接代码生成子系统接口输入端口大厅的有效性块。

  3. 创建这些全局变量(通过使用数据存储内存、数据存储读和数据存储写块):

    • GlobalHallState—用于存储霍尔状态(霍尔传感器A +霍尔传感器B +霍尔传感器C)。

    • GlobalDirection-存储转子旋转的方向(+1或- 1分别表示正方向或负方向旋转)。

    • GlobalSpeedCount—保存eCAP定时器输出信息。

    • GlobalSpeedValidity—存储0(表示无效的速度计数)或1(表示有效的速度计数)。

    • HallStateChangeFlag—存储1(表示霍尔值发生变化)或0(表示前一个霍尔状态(霍尔传感器a +霍尔传感器B +霍尔传感器C)的速度和位置计算已经完成)。

    将这些变量连接到大厅的有效性块如下图所示:

  4. 使用Simuli金宝appnk浏览器添加内存复制块从德州仪器C2000处理器的嵌入金宝app式编码器支持包>内存操作.在“内存复制块参数”对话框中,设置复制从参数指定的源代码符号.使用源代码符号参数指定存储当前霍尔状态的源代码符号表中可用的变量名。

  5. 连接内存复制阻塞输出到输出端口。

    将这些块放在一个名为CodeGen.因此,该子系统输出当前霍尔状态。

  6. 连接CodeGen子系统大厅的有效性块如下图所示:

  7. 整合大厅的有效性块和整个硬件中断服务算法归入一个单独的子系统命名霍尔传感器A.添加触发金宝app>端口与子系统库设置为该子系统,并设置触发类型参数函数调用.将触发器块重命名为eCAP1中断

    触发块作为霍尔传感器a的硬件中断信号霍尔传感器A子系统接收到一个中断(表示霍尔传感器a值变化),硬件中断服务算法重置eCAP定时器输出记录的定时器计数(在前一个霍尔状态期间),并捕获当前霍尔状态。

  8. 类似地,创建子系统霍尔传感器B而且霍尔传感器C分别包含霍尔传感器B和C的硬件中断服务算法。将这些子系统连接到代码生成您在为霍尔值转换生成中断一节中创建的子系统。

计算电气位置和机械速度

使用下面的过程将位置和速度计算算法添加到Current Control子系统。要了解更多细节,请参阅模型mcb_pmsm_foc_hall_f28069m.slx作为参考。

  1. 在当前控制器中添加服务生成中断部分的步骤4和5中使用的算法。该算法使当前控制器能够读取当前霍尔状态。添加触发金宝app>端口与子系统库设置为该子系统,并设置触发类型参数函数调用.把这个算法放在一个子系统中。

  2. 使用内存复制块(从德州仪器C2000处理器的嵌入金宝app式编码器支持包>内存操作)来读取三个eCAP计时器计数器值。添加触发金宝app>端口与子系统库设置为该子系统,并设置触发类型参数函数调用.把这个算法放在一个子系统中。

  3. 将两个函数调用子系统(在步骤1和步骤2中创建的子系统)、全局变量和eCAP计数器和霍尔状态值的完整性检查算法集成到一个名为原子馆阅读

  4. 使用Simuli金宝appnk浏览器添加霍尔速度和位置块从电机控制模块>传感器解码器.连接这个块原子馆阅读子系统,以及HallStateChangeFlag变量如下图所示:

  5. 使用Simuli金宝appnk浏览器添加机械到电气位置块从电机控制模块>传感器解码器.在块参数对话框中输入变量永磁同步电动机。PositionOffset机械抵消参数。

    的变量永磁同步电动机。PositionOffset(在与参考模型相关联的模型初始化脚本中可用mcb_pmsm_foc_hall_f28069m.slx)存储霍尔传感器的偏移值。我们使用机械到电气位置将此偏移应用于计算的电气位置值。

  6. 向计算的速度计数值添加故障过滤器。该过滤器拒绝低值的计算速度计数。这使得电机的运行速度大于基本速度的十倍。

  7. 控件中添加生成的算法电流控制/输入缩放参考Simulink模型的子系统。金宝app详情请参见mcb_pmsm_foc_hall_f28069m.slx