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.

官网:DDK_PM_Servo_F2837x. 电压ADC采样数据,存在错误数据!急!急~急!急~

Other Parts Discussed in Thread: CONTROLSUITE

一、母线电压采集问题:文件目录(C:\ti\controlSUITE\development_kits\TMDSIDDK_v2.0\IDDK_PM_Servo_F2837x_v2_00_00_00)

目录下的IDDK_PM_Servo_F2837x.C文件中:

1、母线电压采样配置:

// Bus Voltage Feedback at B0 (not used) 母线电压反馈
// **************************************
AdcbRegs.ADCSOC3CTL.bit.CHSEL = 0; // SOC3 will convert pin B0
AdcbRegs.ADCSOC3CTL.bit.ACQPS = 30; // sample window in SYSCLK cycles
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C 

//源程序没有以下这两句,添加后进行仿真,旋转母线电压20V~30V,使用示波器观察MCU端口有电压变化,而软件读取ADCbResultRegs.ADCPPB4RESULT 中的数据始随电压值变化,通过读取的寄存器或保存数组中可以看到,存在一两个数据是错误的,不知道问题出在哪里,其它值根据测得电压值计算是对的。

AdcbRegs.ADCPPB4CONFIG.bit.CONFIG = 3; //dx PPB is associated with SOC3

AdcbRegs.ADCPPB4OFFCAL.bit.OFFCAL = 0; //dx Write zero to this for now till offset ISR is run

以下是仿真时,读取寄存器值、读取多个电压值、电压最大值、最小值截取,如下图:


以上电压值是通过ADC_VBUS[20] = AdcbResultRegs.ADCPPB4RESULT.bit.PPBRESULT;得到的,会仿真时也会发现寄存器中的值出错,该图中1228值就是错误的;通过软件进行筛选最大最小值后,最大值2132,最小值会更新到0;问题找出。

2、电流采样部分配置:

#if (CGND == HOT)

// Shunt Motor Currents (SV) @ A4 反馈电流Ifb-SV

// ********************************

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 4; // SOC0 will convert pin A4 采样电流管脚A4 (A4 反馈电流Ifb-SV)

AdcaRegs.ADCSOC0CTL.bit.ACQPS = 30; // sample window in SYSCLK cycles 采样窗口设置

AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C 根据根据需要进行配置

// Configure the post processing block (PPB) to eliminate subtraction related calculation

AdcaRegs.ADCPPB1CONFIG.bit.CONFIG = 0; // PPB is associated with SOC0

AdcaRegs.ADCPPB1OFFCAL.bit.OFFCAL = 0; // Write zero to this for now till offset ISR is run

// Shunt Motor Currents (SW) @ B4 反馈电流Ifb-SW

// ********************************

AdcbRegs.ADCSOC0CTL.bit.CHSEL = 4; // SOC0 will convert pin B4 采样电流管脚B4

AdcbRegs.ADCSOC0CTL.bit.ACQPS = 30; // sample window in SYSCLK cycles 在系统时钟周期采样窗口

AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C 触发源选择

// Configure PPB to eliminate subtraction related calculation

AdcbRegs.ADCPPB1CONFIG.bit.CONFIG = 0; // PPB is associated with SOC0

AdcbRegs.ADCPPB1OFFCAL.bit.OFFCAL = 0; // Write zero to this for now till offset ISR is run

#endif

电压采样部分我对照一下手册,没有找出问题在哪里,又对照一下电阻采样部分配置,认为配置方式是一样的,而电流采样部分确是正确的(电机可以正常运行,电流波形可以看到);所有目前没有搞明白问题所在,麻烦你帮忙解决一下,多谢!

  • 首先,建议你下载一下勘误表,然后看一下你用的芯片版本,里面的有一些ADC的勘误。

    其次,建议你直接输入一个稳定的电压,如果用电池输入最好,测一下是否还有这种波动,防止是因为你信号的原因。

    ERIC

  • Eric ma:

    你好!我使用的芯片是F28379DZwTT,图片如下: .

    1、我使用示波器检出进入DSP管脚的电压,没有出现波动现象,比较平稳;在官网网上下载了Silicon Errata F28379D .pdf,以下是一些错误列表,看了半天,不知道如何使用;也不知道如何解决?(另外使用例程:C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Cpu1\adc_soc_software下的代码,一样存在ADC采样错误值),麻烦你帮助一下,谢谢!

    2、这块板子是从原厂TI买的,做伺服使用的(目录路径:C:\ti\controlSUITE\development_kits\TMDSIDDK_v2.0\IDDK_PM_Servo_F2837x_v2_00_00_00),另外还有一个问题是,矢量控制需要采集母线电压,母线电压也应该在计算中应用到的,而官网代码没有用采集母线电压,这点想不通,有疑问。

    以下是原始注释:

    // Bus Voltage Feedback at B0 (not used) 母线电压反馈
    // **************************************
    AdcbRegs.ADCSOC3CTL.bit.CHSEL = 0; // SOC3 will convert pin B0
    AdcbRegs.ADCSOC3CTL.bit.ACQPS = 50; // sample window in SYSCLK cycles
    AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C

    麻烦您帮忙解决以下,实在没有招了!多谢! 

  • 1. 把那个母线电压输入到别的通道,用controlSUITE的例程测,有问题吗?会不会是那个通道损坏的原因?

    2. 因为用的是有传感器的矢量控制算法,所以不需要母线电压。母线电压只是用来做一些母线波动前馈补偿来用,可以用于当母线波动时,快速PID响应。如果没有母线补偿,也没关系。

    ERIC

  • Eric Ma:

    你好!

    1、我根据你所提示的,将原来B0管脚的母线电压输入信号,连接到到C3管脚上,也有采样错误数据。

    配置:

    //将管脚连接到C3上,配置如下:

    AdccRegs.ADCSOC2CTL.bit.CHSEL = 3; // SOC2 will convert pin C3
    AdccRegs.ADCSOC2CTL.bit.ACQPS = 30; // sample window in SYSCLK cycles
    AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 5; // trigger on ePWM1 SOCA/C
    // Configure PPB to eliminate subtraction related calculation
    AdccRegs.ADCPPB3CONFIG.bit.CONFIG = 2; // PPB is associated with SOC2
    AdccRegs.ADCPPB3OFFCAL.bit.OFFCAL = 0; // Write zero to this for now till offset ISR is run

    读取寄存器AdccResultRegs.ADCPPB3RESULT.bit.PPBRESULT中数据,也有错误值。

    所以应该判断不是原来的管脚损坏,个人认为应该是手册配置上有错误或芯片ADC模块有缺陷,勘误手册看了一遍,不知道如何下手,感觉也没有明确指出错误点或明确如何改正。目前比较困惑。

    2、因为是做伺服控制,所以控制精度需要很高,如果没有母线电机参与计算,在带载变化过大时及反电动势补偿,过欠压保护都没法做的,会存在较大风险,所以目前急切需要配置好母线采样;(另外,由于目前采样问题出现错误采样数据,极有可能在采样Ia、Ib电流值也会存在错误数据,若上高压风险可能会更大。)

    我们公司在上海,联系的几家代理商答应解决,确迟迟没有结果,想拜访TI原厂工程师,代理们为了维护面子,情愿做不下来单子,也不提供原厂的联系方式,问题一直拖2个月了,一直很郁闷。

  • Eric Ma:

    你好!确保外部给定信号是稳定的,我们使用示波器和万用表都进行测试过;做如下实验:(之前只有F28379D板子,没有F28377D板子,昨天找到板子,发现异常如下:)
    1、我们配置B0通道,采样电压:
    发现使用的是F28379D,F28379D板子上采样母线电压是错误的;同样的程序,我们下载到F28377D板子上,采样的数据是正确的。
    2、为了排除F28379D的通道B0损害可能;进行配置到A0通道上:
    同样发现使用的是F28379D,F28379D板子上采样母线电压是错误的;同样的程序,我们下载F28377D板子上,采样的数据是正确的


    1>下图是:F28377D板子,最大值是1979,最小值是1968;没有波动,采样值与论值相符合。
    2>以下是F28379D开发板采样数据如下:F28379D采样最大值是2752,采样最小值是1056;采样值波动很大。(外面给的信号,通过示波器测量都是稳定的;

    麻烦吴Eric Ma帮忙确认一下,F28379D(完整型号:TMX320F28379DZWTT)芯片是否存在异常。急等答复。多谢!

  •  1不接采样信号 对比 采样结果

    2不接采样信号,直接采样内部基准电压,对比采样结果