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.

[参考译文] TMS320F2.8069万F:当前调节问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/571749/tms320f28069f-current-regulation-problem

部件号:TMS320F2.8069万F
主题中讨论的其他部件:MOTORWARE

我已经为InstaSPIN FOC固件设计了一些自定义硬件。   由于某种原因,在运行实验2a时,代码似乎没有正确限制电流-直到我的耗材限制电流之前,电流一直过高。  我已经检查了我的电流反馈电压,它们的振幅正确。  我认为我的映射是正确的,如下所示。  您能否快速查看一下以确保?  如果还有其他可能导致电流不能正常限制的情况,请告诉我,因为我有点卡滞。  

***连接***

H1 - EPWM2A
L1 - WPWM2B
H2 - EPWM1A
L2 - EPWM1B
H3 - EPWM3A
L3 - EPWM3B

I1_FB - A4
I2_FB - A6
i3_FB - A2

V1_FB - A1
V2_FB - A0
V3_FB - B0
VBUS - A5


***反馈映射***

 //转换从EPWM2上的第一阶段开始
 // EXT IA-FB
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_0,ADC_SockChanNumber_A4);
 ADC_setSockTrigSrc(obj->adcHandle,ADC_SockNumber_0,ADC_SockTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay(obj->adcHandle,ADC_SocNumber_0,ADC_SocSampleDelay_9_Cycles);

 // EXT IA-FB
 //由于ADC初始转换错误导致转换重复(SPRZ342)
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_1,ADC_SockChanNumber_A4);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_1,ADC_SocSampleDelay_9_Cycles);

 // EXT IB-FB
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_2,ADC_SockChanNumber_A6);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_2,ADC_SocSampleDelay_9_Cycles);

 //外部IC-FB
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_3,ADC_SockChanNumber_A2);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_3,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_3,ADC_SocSampleDelay_9_Cycles);

 // V_MOT1 -> ADCINA1
 // V_MOT2 -> ADCINA0
 // V_MOT3 -> ADCINB0
 // V_BAT -> ADCINA5

 // ADC-Vhb1
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_4,ADC_SockChanNumber_A1);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_4,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_4,ADC_SocSampleDelay_9_Cycles);

 // ADC-Vhb2
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_5,ADC_SockChanNumber_A0);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_5,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_5,ADC_SocSampleDelay_9_Cycles);

 // ADC-Vhb3
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_6,ADC_SockChanNumber_B0);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_6,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_6,ADC_SocSampleDelay_9_Cycles);

 // VDCBUS
 ADC_setSockChanNumber (obj->adcHandle,ADC_SockNumber_7,ADC_SockChanNumber_A5);
 ADC_setSocTrigSrc (obj->adcHandle,ADC_SocNumber_7,ADC_SocTrigSrc_EPWM2_ADCSOCA);
 ADC_setSocSampleDelay (obj->adcHandle,ADC_SocNumber_7,ADC_SocSampleDelay_9_Cycles);
 
 **** PWM映射*******
 
 //初始化PWM手柄
 obj->pwmHandle[0]= PWM_INIT((void *)PWM_ePWM2_base_ADDR,sizeof(PWM_Obj));//阶段1
 obj->pwmHandle[1]= pwm_init((void *)pwm_ePWM1_base_ADDR,sizeof(PWM_Obj));//阶段2
 obj->pwmHandle[2]= PWM_INIT((void *)PWM_ePWM3_base_ADDR,sizeof(PWM_Obj));//阶段3

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否将ADC中断源保持为EOC7? 或者您是否将其更改为EOC9? 想知道为什么要将SOC样本延迟设置为9个周期,而不是Motorware中设置的7个周期

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

    我使用Motorware包装中提供的高压板源代码(因为它不使用SPI DRV芯片,也不使用I,因为我的电压过高)。  我简单地使用了那里的东西。  

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

    是否有任何建议,说明可能存在什么问题,或者我应该从哪里开始查找,以便跟踪此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否链接您的user.h以便我们查看?

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

    附件中包含 我的user.h文件。  我还在 proj_labXX.c中注释了HAL_setupFaults(halHandle)行 ,因为我还没有设置我的故障,并且它们与默认设置不同,因此默认配置不允许电机运行。

    此外,我 对hal.c做了以下更改,因此它将与我的PWMe2e.ti.com/.../3.6181万.user.h 配置一致

     //初始化PWM手柄
     obj->pwmHandle[0]= PWM_INIT((void *)PWM_ePWM2_base_ADDR,sizeof(PWM_Obj));//阶段1
     obj->pwmHandle[1]= pwm_init((void *)pwm_ePWM1_base_ADDR,sizeof(PWM_Obj));//阶段2
     obj->pwmHandle[2]= PWM_INIT((void *)PWM_ePWM3_base_ADDR,sizeof(PWM_Obj));//阶段3

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您注意到此问题时,哪个估算器状态有效? 此外,您当前在user.h中的偏移看起来不正确。 根据经验,您可以使用(0.5 用户_ADC_FULL_Scale_Current_A/USER_IQ),直到您能够使用实验3计算它们。 我会将其从1.65 改为。 另一个问题是,您的AXI_2212_34电机定义为何具有如此高的满量程电流(~85A)和如此低的USER_MOTOR_MAX_CURRENT (0.3A)

    Sean
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当系统刚刚开始测量绕组时,它向电机驱动极高的电流。 user.h中电流的低值是为了查看这是否会降低电动机的电流,但它没有这样做。 (另外,我用来测试的电机比目标电机小很多,但更易于操作)。 我对偏移值的理解是,这是在ADC上看到的中点电压,当存在零电流时为1.65V。 与您所说的不同之处是。 我将更改偏移值并查看是否有帮助。 我会告诉你。 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    按照EST_State_Rs中的说明测量绕组? 还是EST_State_RoverL? 我想知道您的硬件上是否存在电流感应问题。

    Sean
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我相信这是在EST_State_Rs开始时发生的,我无法分辨。 当我查看我的电流传感器输出时,我看到它们在振幅内形成,直到它们与3.3V或0V导轨连接。 大约是+/- 40A。 因此,当前的反馈只是没有被正确阅读或确认
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 我改变了偏移量,但这没有帮助。 一旦开始测量Rs,它就会积聚电流,直到我的限量供应切断电流。 正如我所提到的,我看到当前传感器出现了完全波动,但它们似乎没有被正确读取。 您会如何建议我进行调试?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于lab2a,请运行一个全新的调试实例。 设置Flag_enableSys,但不设置Flag_Run_Identify。 请检查gMotorVars.VdcBus_kV的值是否合理,即它准确代表您的直流总线电压。 之后,请检查ADC结果寄存器。 它们应提供接近0.5 的电压感应偏置电平。 请记住,根据值是以十六进制,十进制还是按单位值显示,0.5 将以不同的方式表示

    如果您没有收到预期的ADC结果,我认为硬件上的电压反馈电路可能存在一些问题

    Sean
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的主直流链路电压正确显示VdcBus_kV。 我将检查ADC结果寄存器并让您知道它们读取的内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean,

    当系统 启用时,我检查了ADC寄存器,一切看起来都正确。  我的电流输入电压约为1.65V ( 0x0FFF值的~一半) ,我的电压电平也会检查。  在电压测量电路中,我的最大电压 跨度(ADC时为3.3V)为69.4V。  因此 ,3个电机相位ADC处的电压为9.4V (使用仪表确认为正确),ADC测量的总线电压为23.5V,再次使用仪表进行测量确认。  因此,ADC值似乎确实正确。  我仔细检查了我的阶段,一切看起来都正确。  如果电流和电压的相位与各自的ePWM不一致,是否会发生这种情况?     未通电的电动机相位在 接地电压下停顿是否正常?   HV代码是否与ePWM信号有任何奇怪的地方,这可能会让我感到混乱?  您建议如何继续调试过程?

    感谢你的帮助。

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

    正如您所看到的,由于某种原因,系统没有查看电流或看不到电流水平,即使它们看起来存在且正确。 为了使代码运行,我在实验室中注释掉了HAL_setupFaults(HalHandle);行,因为我的故障不同,而且我尚未设置它们。 这应该不重要,应该吗? 故障是否用作感测Rs的一部分? 我的理解是,他们在那里只是为了保护。 我现在在抓住吸管
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    再多一个数据。 如果我交换了相位B和相位C的ADC映射,我可以使其通过RoverL估计运行并按其应有的方式限制电流。 然后进入过电流状态。 我不确定它是否能一直贯穿整个RoverL,但至少它的一大部分是很好的。 我已经检查并再次检查了我的映射。 也许我当前的一个渠道阅读不正确(尽管它们似乎都有合理的价值)。 我将在所有通道和所有电压上放置一个示波器,以查看正在发生的情况。 如果您有任何想法,请告诉我。 这似乎是一个地图绘制问题,但正如我所说,我已经对此进行了一次检查。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tim,

    正如您和Sean讨论的那样,
    1.检查电流和电压感应电路是否正常,USER_ADC_FULL比例电压_V和USER_ADC_FULL比例电流_A在USER.h中是否正确
    2.检查电流感应极性是否与hal.h中的HAL_readAdcData()相对应
    3.哪个gMotorVars.EstState会导致电流过高? 和user.h中的user_motor_MAX_current是什么? 如果您在EST_State_RoverL和EST_State_Rs期间遇到过电流,则必须检查项目1和2。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    延明

    感谢您的参与。 下面是我对您的项目的回答。 (原始顺序之外)

    3)为清晰起见,即使ADC线路的输入看起来正确,但固件不会限制电流。 当它进入EST_State_RoverL时会发生这种情况。 电流过载会导致我的电源关闭(我烧毁了一个电动机,但它没有),因此进度会停止。
    1)我已检查过电压和电流感应电路是否正常工作,用户值是否正确。
    2)我不确定如何检查HAL_readAdcData的极性是否正确。 你会如何建议我去检查一下。

    我希望项目2是问题所在。

    此致,
    蒂姆
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因为似乎没有收到回复,我搜索了一些其他论坛条目,发现其他人像我一样花了几天时间来解决这个问题, 只是发现它是一个极性设置,在文档中似乎没有提及。 在文档中,它显示对于正电流反馈,您需要将当前偏差计算更改为读取

    偏差== offset_getOffset(obj->offsetHandle_I[cnt]);

    但它似乎并不告诉您,要让事情发挥作用,您也需要改变

    pAdcData->i.Value[0]=值;



    pAdcData->i.value[0]=-value;(适用于所有阶段)

    以便让事情发挥作用。

    这种明显的文档遗漏(至少我找不到它)似乎花费了大量的时间。 我强烈建议在清楚说明如何更改正反馈的偏倚计算的部分添加此提示。 我现在正在旋转,但我损坏了几块板,在这一过程中浪费了大量时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tim,

    我们对文档错误深表歉意。 更正已发送给我们的资源,由其更新并发布《用户指南》,但从Rev F到Rev G的更改尚未在Web上更新。 在下一版用户指南中,文档将会通知您遇到的问题。

    Sean