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.

[参考译文] TMS320F28379D:PM_Bissc_startOperation 终止 EPWM1-2-3

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/943359/tms320f28379d-pm_bissc_startoperation-terminates-epwm1-2-3

器件型号:TMS320F28379D

您好!

我们正在使用 BiSS 编码器开发运动控制系统、我已开始使用 TI BiSS-C 库。

当我使用高达7.1MHz 的库函数时、我可以毫无问题地读取编码器。

遗憾的是、当我尝试使用 EPWM1-2-3输出驱动 BLDC 电机时、问题就会开始。 当 BiSS 读取开始时、它终止 EPWM1、2、3。 一个周期之后、当 BiSS 读数未发生时、ePWM 返回正常状态。 (对于每个周期、我将再次向 PWM1-2-3寄存器写入%50占空比)

下面是一张示波器图片、显示了我的问题。

如何停止此操作?  为什么 PM_Bissc_startOperation 或  PM_Bissc_setupNewSCDTransfer 会导致这种情况?

此致、

Erman

其他配置信息:

BiSS 使用的是 SPIA。

因此、对于输入栏:

InputXbarRegs.INPUT1SELECT = 16;// INPUTXBAR TRIP1 -> GPIO16

配置 EPWM4

EPwm4Regs.TZCTL.bit.TZA = 1;
EPwm4Regs.TZCTL.bit.TSB = 1;
EPwm4Regs.TZFRC.bit.OST = 1;

对于 GPIO:

//GPIO6和 GPIO7的 PWM 模块
GPIO_setPadConfig( 6, GPIO_PIN_TYPE_STD );
GPIO_setPinConfig (GPIO_6_EPWM4A);//将 GPIO6配置为 bissC Clk 主站
GPIO_setPadConfig( 7, GPIO_PIN_TYPE_STD );
GPIO_setPinConfig (GPIO_7_EPWM4B);//将 GPIO7配置为 SPI 时钟从器件

// GPIO16是 MOSI 引脚
GPIO_setPadConfig( 16, GPIO_PIN_TYPE_STD );
GPIO_setPinConfig (GPIO_16_SPISIMOA);
GPIO_setQualificationMode( 16, GPIO_QUAL_ASYNC);
// GPIO17是 MISO 引脚
GPIO_setPadConfig (17,GPIO_PIN_TYPE_PULLUP);
GPIO_setPinConfig (GPIO_17_SPISOMIA);
GPIO_setQualificationMode( 17, GPIO_QUAL_ASYNC);
// GPIO18是 SCLK 引脚
GPIO_setPadConfig( 18, GPIO_PIN_TYPE_STD );
GPIO_setPinConfig (GPIO_18_SPICLKA);
GPIO_setQualificationMode( 18, GPIO_QUAL_ASYNC);
// GPIO19为/CS 引脚
GPIO_setPadConfig (19,GPIO_PIN_TYPE_PULLUP);
GPIO_setPinConfig (GPIO_19_SPISTEA);
GPIO_setQualificationMode( 19, GPIO_QUAL_ASYNC);

//将 GPIO94配置为 bissC 功率 CTL
GpioDataRegs.GPCCLEAR.bit.GPIO94=1;
GPIO_setPadConfig (94,GPIO_PIN_TYPE_STD);
GPIO_setDirectionMode (94,GPIO_DIR_MODE_OUT);

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

    您好、Erman、

    我将对此进行研究。  我可能需要一天时间才能回复您。  我将在周一(美国中部)营业结束前回写。

    -洛里

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

    [引用 USER="Erman Ozdemir"]不幸的是、当我尝试使用 EPWM1-2-3输出驱动 BLDC 电机时、问题就会开始。 当 BiSS 读取开始时、它将终止 EPWM1、2、3。[/引用]

    以确保我理解。  以下所有输出信号都会受到影响: EPWM1A、EPWM1B、EPWM2A、EPWM2B、EPWM3A、 EPWM3B?  是这样吗?

    此致

    Lori

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

    Erman、

    我已经了解了 BiSS 库、并与一位同事进行了讨论。  现在、我在库中找不到会导致此类行为的任何内容。  您能否检查以下内容:

    • 如果在没有 BiSS 请求的情况下运行 BLDC 示例、是否会发生相同的行为?
    • 您能否尝试将 SLO 线路拉低并查看行为是否发生变化、而不是请求 BiSS 传输?   

    目标是尝试查看问题是否真正与 BiSS 逻辑相关、或仅与所使用的信号相关。  这可能是 PWM 上的跳闸问题。   

    此致

    Lori

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

    嗨、Lori、

    • 以确保我理解。    以下所有输出信号都会受到影响: EPWM1A、EPWM1B、EPWM2A、EPWM2B、EPWM3A、 EPWM3B?  是这样吗?
      • 我再次检查了它们、所有6个 ePWM 信号都会受到影响。
    • 如果在没有 BiSS 请求的情况下运行 BLDC 示例、是否会发生相同的行为?
      • 在没有 BiSS 请求的情况下、BLDC 运行完美、所有 ePWM 信号运行完美
    • 您能否尝试将 SLO 线路拉低并查看行为是否发生变化、而不是请求 BiSS 传输?
      • 如果不使用 BiSS 库并设置以下2行来手动将 SLO 设置为低电平、则 EPWM1-2-3将运行完美。

    GpioDataRegs.GPASET.bit.GPIO6=0;
    GpioDataRegs.GPASET.bit.GPIO7=0;

    • 这可能是 PWM 上的跳闸问题。   
      • 我也认为是这样。 通过 EPWM4启动 BiSS 时钟似乎会杀死其他 PWM。

    此致、

    Erman

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

    Erman、

    BLDC 代码是否来自 TI?  我将要求我的一位更熟悉 PWM 的同事来看看您的问题。  

    此致

    Lori  

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

    Erman、

    问题是否已解决?  您能告诉我原因是什么吗?

    此致

    Lori

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

    您好 Lori、

    问题未解决、我仍在调查。

    BLDC 代码不是 TI 提供的。 下面是 EPWM1模块的初始化。 ePWM 2和3是相同的。 然后在25kHz 时、我设置为寄存器 EPWM1-2-3寄存器进行电机控制。 正如我之前告诉过的、电机控制器件不是问题、如果没有 BiSS、它就能完美工作。 在任何情况下、如果我看到 PWM 信号不会被 BiSS 破坏、这将是我的解决方案。

    空 InitEPwm1 (空)

    //跳匣区域子模块(Fehlerkennung)
    EALLOW;
    EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
    EPwm1Regs.TZCTL.bit.TSB = TZ_FORCE_LO;
    EPwm1Regs.TZSEL.bit.CBC1 = TZ_ENABLE;
    EPwm1Regs.TZCTL2.bit.ETZE = 0;//使用 TZCTL 的跳闸动作(传统 ePWM 兼容性)

    ///PWM ausschalten Tripmittel 区域
    EPwm1Regs.TZFRC.bit.OST = 1;
    EDIS;

    //设置时基
    EPwm1Regs.TBPRD = ePWM_COUNTER_PERIOD - 1;//设置计时器周期
    EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0
    EPwm1Regs.TBCTR = 0x0000;//清除计数器
    EPwm1Regs.TBSTS.bit.CTRDIR = 1;//递增计数

    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率-> HSPCLKDIV = 1
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;//速度慢、我们可以在示波器上观察

    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;// 0
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//同步下流模块
    EPwm1Regs.TBCTL.bit.FREE_SOFT = 0x01;//在断点处、当 TBCTR = 0x0000 ->输出= 0 (H 侧)时停止
    不需要//TBCTL2

    //设置计数器比较
    EPwm1Regs.CMPCTL.bit.LOADASINC=0;
    EPwm1Regs.CMPCTL.bit.LOADBSYNC=0;
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
    //CSPCTL - CompC & D -不需要

    EPwm1Regs.CMPA.bit.CMPA = 0;//可能会注释掉
    EPwm1Regs.CMPB.bit.CMPB = 0;//可能会注释掉

    //设置动作限定符

    EPwm1Regs.AQCTL.ALL = 0;// Kein Shadow für AQCTLA und B
    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm1Regs.AQCTLA.bit.CBU = AQ_NO_ACTION;
    EPwm1Regs.AQCTLA.bit.CBD = AQ_NO_ACTION;
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;
    EPwm1Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;

    EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
    EPwm1Regs.AQCTLB.bit.CBD = AQ_SET;
    EPwm1Regs.AQCTLB.bit.CAU = AQ_NO_ACTION;
    EPwm1Regs.AQCTLB.bit.CAD = AQ_NO_ACTION;
    EPwm1Regs.AQCTLB.bit.ZRO = AQ_NO_ACTION;
    EPwm1Regs.AQCTLB.bit.PRD = AQ_NO_ACTION;

    //设置死区发生器
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;//禁用死区
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HI;

    //Einstellen des HRPWM 模块
    EALLOW;
    EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;//零处的影子加载
    EPwm1Regs.HRCNFG.bit.HRLOADB = HR_CTR_ZERO;
    EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;//HRWPM 在占空比控制模式下工作
    EPwm1Regs.HRCNFG.bit.CTLMODEB = HR_CMP;
    EPwm1Regs.HRCNFG.bit.EDGMODE = HR_REP;//Steigende Flanke wrd beeinhusst
    EPwm1Regs.HRCNFG.bit.EDGMODEB = HR_FEP;//Fallende Flanke wrd beeinefusst

    //在 Funktion StartFOC 中设置事件触发器

    //启用计数器
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上和向下计数

    //在 GPIO10上生成 ADS-Conv und Trig_IP über ADCSOC (SPRUG04A P.108)
    EPwm1Regs.ETSEL.bit.SOCBEN = 1;//启用 SOCB für EPWM2
    EPwm1Regs.ETSEL.bit.SOCBSEL = 0x2;//在 TBCTR = TBPRD 时生成 ADC 触发
    EPwm1Regs.ETPS.bit.SOCBPRD = 1;//Jedes 正态触发器
    EPwm1Regs.ETCLR.bit.SOCB = 1;//Event löschen

    SyncSockRegs.ADCSOCOUTSELECT。bit.PWM1SOCBEN = 1;
    EDIS;

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

    Erman、

    我想知道您是如何应用死区的。 功率级上的任何电路(栅极驱动器等)是否会生成死区而不是 C2000 MCU?

    正如您之前提到的、系统在没有 BiSS 的情况下运行良好、我猜死区已被应用、但只需进行双次检查。

    最棒的

    John

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

    您好、John、

    我们在 MCU 上应用死区。 EPWM1-2-3- CMPA 获取(+)去带值、CMPB (-)去带 vaue。

    我无法想象死区是怎么造成它的。  

    我还尝试了、程序开始应用 PWM、并在一段时间后开始读取 BiSS。 首先、在 BiSS 读取开始之前、一切都正常。

    此致、

    Erman

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

    您好!

    我成功地解决了这个问题。 使用 BiSS 可触发 EPWM1-2-3

    昨天我发布了:

    EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
    EPwm1Regs.TZCTL.bit.TSB = TZ_FORCE_LO;

    EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
    EPwm2Regs.TZCTL.bit.TSB = TZ_FORCE_LO;

    EPwm3Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
    EPwm3Regs.TZCTL.bit.TSB = TZ_FORCE_LO;

    现在、我将所有 TZ_FORCE_LO 更改为 TZ_NO_CHANGE、PWM 不会跳闸、也不会设置为0。

    电机正在运行、信号看起来很好。

    我不知道为什么使用 BiSS 导致 EPWM1-2-3跳闸。

    感谢你的帮助。