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.

[参考译文] CCS/TMS320F280041C:InstaSPIN 电流和电压传感器`偏移

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/955979/ccs-tms320f280041c-instaspin-current-and-voltage-sensors-offsets

器件型号:TMS320F280041C

工具/软件:Code Composer Studio

您好! `m is02_offset_gain_cal 示例! 我的硬件具有4个电压传感器(单向)和3个电流传感器(双向)。 当我的系统处于关闭状态(不生成 PWM)时、电压传感器上的电压为0伏(ADC 读数为4-10)、周围传感器上的电压值大约为4096 (2000和其他)。 `m、我想了解 该偏移值应该是怎样的? 在函数 HAL_readADCDataWithOffsets 中、来自传感器的值乘以必要的系数、通常会有一个小分频、我认为偏移应该补偿。

正如我说过的、我的电流传感器是双向的。 在乘法和提取偏移之前、我是否应该从读取值中提取4096/2? 或者应该计算偏移值来完成工作?

我不确定 instaSPIN 库是如何计算的、我不知道我应该使用的当前格式(负值和正值或仅正值)。  

谢谢!

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

    您好!

    请查看下面的 instaspin 用户指南、如果您仍有疑问、请告知我们。

    最棒的

    John

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

    还可以! 我进行了测试。 但我的电压`偏移结果是不同的。 我的值接近于0、而不是接近1的值。 我是否必须从"1"中提取此值? 电压读数似乎正确。 在1V 至2V (接近于零)范围内的所有通道上、占空比为50%。 我在两个条件下都尝试了 motorVars.offset_invVbus_invV = 0.5;正如示例所示、 motorVars.offset_invVbus_invV =计算值。

    这是正确的还是我犯了错误?

    谢谢!

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

    ADC 偏移通过 ADC 校准过程计算得出。 请参阅《InstaSpin 实验指南》中的以下说明。

    "偏移计算是为了为电流测量和电压测量设置零。 为了计算偏移、在预先配置的时间段内、ePWM 引脚上施加50%的占空比。"

    因此偏移值可能因系统而异。 只要您从电压传感器获得正确的 ADC 读数、就可以进行硬件设置。

    最棒的

    John

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

    您好! 我似乎对测量本身有问题。 在静态条件下、我将测量所有4个电压传感器上的 Vmax。 但是、当我施加占空比为50%的 PWM 时、相位传感器上的电压开始发生变化->当 A 通道处于高电平状态时、PGA 输入上的电压为一半、但当通道 A 处于低电平(通道 B 处于高电平)时、我的值大约为0。 这是正常的、因为我有单极电压传感器。 我n`t 在正确的位置开始 ADC 测量。 我使用来自 PWM 寄存器的 CMPC 寄存器作为 ADC 的触发器。 我`ve 了不同的组合-> ePWM_SOC_TBCTR_D_CMPC、 ePWM_SOC_TBCTR_U_CMPC、不同 的 ePWM_setCounterCompareValue... 没有影响。 我 始终测量通道 A 何时关闭、并因此接收到极低的电压-> 1V (线路上为65)。 我将 PGA 输入用于所有电流和电压、PGA_GAIN_3 和 PGA_LOW_PIC_FILTER_ITER_200_Ohm。  

    //numPWMTicksPerISRTick=1
    ePWM_setADCTriggerSource (obj->pwmHandle[0]、
    ePWM_SOC_A、
    ePWM_SOC_TBCTR_D_CMPC);
    ePWM_setInterruptEventCount (obj->pwmHandle[0]、numPWMTicksPerISRTick);
    ePWM_setADCTriggerEventPrescale (obj->pwmHandle[0]、
    ePWM_SOC_A、
    numPWMTicksPerISRTick);
    ePWM_setCounterCompareValue (obj->pwmHandle[0]、
    ePWM_COUNTER_COMPARE_C、
    1); 

    我使用了图形工具,电压值是一条直线,例如>0.8V。 那么、如何解决这个问题呢? 如何选择正确的计时 ADC 测量开始? `ve 还有其他任何可错过的 PGA 输入或 PWM 设置吗?

    谢谢!

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

    您使用的是什么电流传感器? 分流电阻在低侧? 直列式分流电阻器? 或其他内联霍尔传感器?

    电压检测电路上是否有滤波电容器? 您可以参阅 《InstaSPIN-FOC 和 InstaSPIN-MOTION 用户指南》(修订版 H) (http://www.ti.com/lit/ug/spruhj1h/spruhj1h.pdf)的第5.2章(硬件必要条件)、以找到有关此内容的详细说明。

    然后,除了修改 user.h 中的参数以及根据 硬件板更改 hal.c 和 hal.h 中的 perspedials 配置之外,您可以运行示例实验而不进行任何更改。

    #define USER_IQ_FULL_SCALE_VOLTAGE_V          (xx)

    #define USER_VOLTGE_FILTER_POLE_Hz              (xx)

    #define USER_ADC_FULL_SCALE_VOLTGE_V      (xx)

    #define USER_IQ_FULL_SCALE_CURRENT_A          (xx)

    #define USER_ADC_FULL_SCALE_CURRENT_A      (xx)

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

    还可以! 问题出在这里!  原始代码中有2个 EPWM_setCounterCompareValue。 第一个位于 HAL_setupPWM 中、第二个位于 HAL_enablePWM 中。 因此、我更改 了 HAL_setupPWM 中的值、并在初始化过程结束时检查一切是否正常。 因此、我将重点更改为 ADC。 但 HAL_enablePWM 会将该值`s 为原始状态(1)。 我不n`t 为什么这样做。 因此、我将比较计数器的值更改为6000 (6500max)、并删除了 enablePWM 中的语句、现在一切都正常!  

    我想我已经按照原始方案反向连接了 A 和 B 通道。 我的通道 A 连接到高 VT、B 通道连接到低 IGBT。 我认为`s 测量时刻存在差异的原因。 我认为我应该旋转发送到 HAL_writePWMData 的值。

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

    您可以查看 F28004x 技术手册中的 PWM 和 ADC 一章、该章可帮助您了解如何配置 PWM 和 ADC 以及如何使用事件对 ADC 进行分类。

     如果在低侧使用分流电阻器、则无需更改比较 C 值。

    在 HAL_setupPWMs()中配置 PWM 控制寄存器并设置一个初始值来比较寄存器一次。 更新 HAL_writePWMData()中用于电机控制的比较值。