This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM42L432:N2HET:如何通过输入信号启用和禁用 PWM

Guru**** 2467740 points
Other Parts Discussed in Thread: DRV8332

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/654350/rm42l432-n2het-how-to-enable-and-disable-pwm-via-an-input-signal

器件型号:RM42L432
主题中讨论的其他器件:DRV8332

你(们)好

我目前正在开发一个或多或少独立的 N2HET 应用、此应用使用 DRV8332驱动器来控制有传感器的三相 BLDC 电机。

对于此应用、我需要根据 U、V、W 霍尔效应输入生成以下换向序列:

因此、我需要根据3个霍尔传感器输入打开/关闭3个引脚的 PWM 输出:PWM_A、PWM_B 和 PWM_C。

为了测试这个概念、我进行了以下 N2HET 程序。 只要输入(引脚0)为低电平、它就会打开 PWM 输出(引脚2)、反之亦然:

PIN_EN equ 0;启用
PIN_PWM_OUT .equ 2;PWM 输出

PWM_DATA .equ 15;PWM
PWM_HRDATA .equ 0的数据;PWM 的 HRData

;***** START:PWM 的全局计数器*********
启动 CNT{reg = A、max = 19、data = 0}
PWM eCMP{hr_lr =高电平、en_pin_action = on、pin = PIN_PWM_OUT、action = clear、
reg = A,data = PWM_DATA,hr_data = PWM_HRDATA }

;***** 使能引脚为低电平-输出 PWM 信号*********
启用 BR{NEXT = DISABLE、COND_ADDR = PWM_ON、事件=低电平、引脚= PIN_EN}

PWM_ON DADM64{REMOTE = PWM、EN_PIN_ACTION = ON、引脚= PIN_PWM_OUT、COMP_MODE = ECMP、action = PULSELO、 reg = A,数据= 0 }

;********* 使能引脚为低电平-输出 PWM 信号*********
禁用 BR{NEXT = START、COND_ADDR = PWM_OFF、事件=高电平、引脚= PIN_EN}

PWM_OFF DADM64{NEXT = START、REMOTE = PWM、EN_PIN_ACTION = ON、引脚= PIN_PWM_OUT、COMP_MODE = ECMP、 操作=清除、reg = A、数据= 0}

但是、我得到这个奇怪的输出:

请注意不断增加的不需要的延迟量(以黄色突出显示)。

如何解决此问题?

非常感谢您的参与和帮助、

JAE

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,JAE

    我将您的问题转交给在电机控制和 N2HET 方面具有更多经验的同事。 他们很快就会回来。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 已经有一周左右了、我想知道您是否有机会找到了解决方案?

    再次感谢!

    Jae、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 如果您可以提供有关此问题的任何更新、是否可能? 已经过了两个星期,至少获得有关这一问题的一些信息是很好的。

    再次感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,JAE

    很抱歉耽误你的回答。 当您启动 PWM 时、延迟可能是由非零寄存器 A 引起的。 请在启动 PWM 之前清除 CNT 中的寄存器 A 或数据字段。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我在上个月更新了代码、下面是我的当前设置:

    ENC_U .equ 0;来自 UVW 编码器
    ENC_V .equ 2的信号 U;来自 UVW 编码器
    ENC_W .equ 4的信号 V;来自 UVW 编码器
    OUT_U .equ 6的信号 W;输出相 U
    OUT_V .VW 8;输出相 V
    OUT_W .equ 10; 输出相位 W
    RESET_U .equ 12;复位信号相位 U
    RESET_V .equ 14;复位信号相位 V
    RESET_W .equ 16;复位信号相位 W
    
    PWM_DATA .equ 15;PWM
    PWM_HRDATA .equ 0的数据;PWM 的 HRData
    
    ;equ * START:PWM 的全局计数器*********
    启动 CNT{reg = A、max = 19、data = 0}
    
    ;给定 HCLK 频率的 PWM 代码= 100MHz、PWM 频率= 0.15MHz、占空比= 0.5%、HETPFR 值=1280如下:
    ;L00 CNT{REG=A、max=19、data=0}
    ;L01 ECMP{NEX=UVW_HLH、hr_LR=HIGH、en_pin_action=ON、PIN=0、action=PULSELO、REG=A、data=10、hr_data=0}
    
    
    针对给定 HCLK 频率=100MHz、PHR=0
    、PWM=0、REG=0、PWM=0=0.64、PWM=REG=0=P=0=P=P=P=P、OUTHR_ACT_REP=0、OUTPL=0、OUR = 0.64、PWM=0、PWM=0=0=0=L=0=0=P=P=P=P=P=P=P=P=0M=P=0M=V
    
    
    UVW 编码器为:U:1 V:0 W:1 *********
    UVW_HLH BR{NEXT = UVW_HLL、COND_addr = UVW_HLH1、EVENT =高电平、Pin = ENC_U}
    UVW_HLH1 BR{NEXT = UVW_HLL、COND_addr = UVW_HLH2、EVENT =低电平、Pin = ENC_HLH}
    UVW_HLH = UVW、HL_HLL = UVW、OUT_EVENT 引脚= ENC_W}
    
    OUT_HLH_U ECMP{hr_LR =高电平、en_PIN_action = on、引脚= OUT_U、action = PULSELO、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_HLH_V ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_V、ACTION = PULSEHI、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_HLH_W ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_W、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_HLH_U ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_U、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_HLH_V ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_V、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_HLH_W ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_W、ACTION = PULSELO、
    reg = A、data = 0、hr_data = 0}
    
    ;******* UVW 编码器为:U:1 V:0 W:0 ***********
    UVW_HLL BR{NEXT = UVW_HHL、COND_addr = UVW_HLL1、EVENT =高电平、Pin = ENC_U}
    UVW_HLL1 BR{NEXT = UVW_HHL、COND_addr = UVW_HLL2、EVENT =低电平、Pin = ENC_HLL2}
    UVW_HLL BR = UVW、CON_HL_EVENT =低电平、UVW、UVW = UVW 引脚= ENC_W}
    
    OUT_HLL_U ECMP{hr_LR =高电平、en_PIN_action = on、引脚= OUT_U、action = PULSELO、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_HLL_V ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_V、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    OUT_HLL_W ECMP{hr_LR = HIGH、en_PIN_ACTION = ON、引脚= OUT_W、ACTION = PULSEHI、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    RES_HLL_U ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_U、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_HLL_V ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_V、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_HLL_W ECMP{hr_LR = HIGH、en_PIN_ACTION = ON、引脚= RESET_W、ACTION = PULSEHI、
    reg = A、data = 0、hr_data = 0}
    
    ;******* UVW 编码器为:U:1 V:1 W:0 ***********
    UVW_HHL BR{NEXT = UVW_LHL、COND_addr = UVW_HHL1、EVENT =高电平、Pin = ENC_U}
    UVW_HHL1 BR{NEXT = UVW_LCOND、VW_addr = UVW_HL2、EVENT =高电平、Pin = ENC_HL_V}
    UVW_HL_HL、UVH_HL =低电平、UVH_CLD = UV_BR = UHL = UVH、UVH = UVH = UHL_HL、U 引脚= ENC_W}
    
    OUT_HL_U ECMP{hr_LR =高电平、en_PIN_action = on、引脚= OUT_U、action = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    OUT_HL_V ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= OUT_V、ACTION = PULSELO、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_HL_W ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_W、ACTION = PULSEHI、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    RES_HHL_U ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_U、ACTION = PULSELO、
    reg = A、data = 0、hr_data = 0}
    RES_HHL_V ECMP{hr_LR =高电平、en_pin_action = on、pin = reset_V、action = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_HHL_W ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_W、action = PULSEHI、
    reg = A、data = 0、hr_data = 0}
    
    ;******* UVW 编码器为:U:0 V:1 W:0 ***********
    UVW_LHL BR{NEXT = UVW_LHH、COND_addr = UVW_LHL1、事件=低电平、引脚= ENC_U}
    UVW_LHL1 BR{NEXT = UVW_LCOND、VW_addr = UVW_LHL2、事件=高电平、引脚= ENC_V}UVW_LHH
    =低电平、UVH_LHL = UV_BH = UVH、LONL = UV_LHD_L = UHL、V_LHD_L = UHL 引脚= ENC_W}
    
    OUT_LHL_U ECMP{hr_LR =高电平、en_PIN_action = on、引脚= OUT_U、action = PULSEHI、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_LHLL_V ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_V、ACTION = PULSELO、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_LHLL_W ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_W、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LHL_U ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_U、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LHL_V ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_V、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LHL_W ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_W、ACTION = PULSELO、
    reg = A、data = 0、hr_data = 0}
    
    ;******* UVW 编码器为:U:0 V:1 W:1 ***********
    UVW_LHH BR{NEXT = UVW_LLH、COND_addr = UVW_LHH1、事件=低电平、引脚= ENC_U}
    UVW_LHH1 BR{NEXT = UVW_LLH、COND_addr = UVW_LHH2、事件=高电平、引脚= ENC_V}
    UVW_LHH2、UVH_LHD_OUT = UVW_BH、UVH =高电平、UVW = UVW = LHD_LH = UVW、LHD_TH_OUT 引脚= ENC_W}
    
    OUT_LHH_U ECMP{hr_LR =高电平、en_PIN_action = on、引脚= OUT_U、action = PULSEHI、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_LHH_V ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_V、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    OUT_LHH_W ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_W、ACTION = PULSELO、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    RES_LHH_U ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_U、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LHH_V ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_V、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LHH_W ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_W、action = PULSEHI、
    reg = A、data = 0、hr_data = 0}
    
    ;******* UVW 编码器为:U:0 V:0 W:1 *********
    UVW_LLH BR{NEXT = START、COND_ADDR = UVW_LLH1、事件=低电平、引脚= ENC_U}
    UVW_LLH1 BR{NEXT = START、COND_ADDR = UCOND_LLH2、事件=低电平、引脚= ENC_V}
    UV_BH{NEXT = START、VW_ADDR =高电平、LH_OUT = LVW 引脚= ENC_W}
    
    OUT_LLH_U ECMP{hr_LR =高电平、en_PIN_action = on、引脚= OUT_U、action = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    OUT_LLH_V ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_V、ACTION = PULSEHI、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    OUT_LLH_W ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= OUT_W、ACTION = PULSELO、
    REG = A、DATA = PWM_DATA、hr_DATA = PWM_HRDATA}
    RES_LH_U ECMP{hr_LR = HIGH、EN_PIN_ACTION = ON、引脚= RESET_U、ACTION = PULSELO、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LH_V ECMP{hr_LR =高电平、en_PIN_ACTION = ON、引脚= RESET_V、ACTION = PULSEHI、
    REG = A、DATA = 0、hr_DATA = 0}
    RES_LLH _W ECMP{下一个=开始、hr_LR =高电平、EN_PIN_ACTION = ON、引脚= RESET_W、ACTION = PULSEHI、
    reg = A、data = 0、hr_data = 0} 

    但是、正如您在下面的屏幕截图中看到的、我再次出现了不需要的延迟(以黄色突出显示)。 您提到我必须清除 A 寄存器或 CNT 寄存器、但我在如何实现这一点上有点迷路。 我们非常感谢您的任何建议。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,JAE

    我阅读了您的代码、它们对我来说很好。 您是否在硬件上进行了测试? HET IDE 所做的只是一个仿真、此仿真与实际硬件中的结果略有不同。