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.

[参考译文] TMS320F280049C:无法对数据 ADC-C 输入1进行采样

Guru**** 2589280 points
Other Parts Discussed in Thread: DRV8320

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1108745/tms320f280049c-unable-to-sample-data-adc-c-input-1

器件型号:TMS320F280049C
主题中讨论的其他器件:DRV8320

您好!

我搜索过所有论坛、但找不到任何相关信息。 由于某种原因、我们无法对 ADC-C 输入1 "C1"上的数据进行采样。  下面是用于设置 ADC 的函数。  除 C1外、所有其他 ADC 均正常工作。

C1 专用于对 包含 DRV8320的 BLDC 驱动器的其中一个相电压进行采样。

提前感谢您的任何想法!

最棒的
Jonathan

void HAL_setupADCs(HAL_Handle handle)
{
    HAL_Obj *obj = (HAL_Obj *)handle;

    SysCtl_delay(100U);
    ADC_setVREF(obj->adcHandle[2], ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);
    ADC_setVREF(obj->adcHandle[1], ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);
    ADC_setVREF(obj->adcHandle[0], ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);
    SysCtl_delay(100U);

    // Configure internal reference as 1.65V*2 = 3.3V
    ASysCtl_setAnalogReference1P65(ASYSCTL_VREFHIA |
                                   ASYSCTL_VREFHIB |
                                   ASYSCTL_VREFHIC);

    // Enable internal voltage reference
    ASysCtl_setAnalogReferenceInternal(ASYSCTL_VREFHIA |
                                       ASYSCTL_VREFHIB |
                                       ASYSCTL_VREFHIC);

    // Set main clock scaling factor (50MHz max clock for the ADC module)
    ADC_setPrescaler(obj->adcHandle[0], ADC_CLK_DIV_2_0);
    ADC_setPrescaler(obj->adcHandle[1], ADC_CLK_DIV_2_0);
    ADC_setPrescaler(obj->adcHandle[2], ADC_CLK_DIV_2_0);

    // set the ADC interrupt pulse generation to end of conversion
    ADC_setInterruptPulseMode(obj->adcHandle[0], ADC_PULSE_END_OF_CONV);
    ADC_setInterruptPulseMode(obj->adcHandle[1], ADC_PULSE_END_OF_CONV);
    ADC_setInterruptPulseMode(obj->adcHandle[2], ADC_PULSE_END_OF_CONV);

    // enable the ADCs
    ADC_enableConverter(obj->adcHandle[0]);
    ADC_enableConverter(obj->adcHandle[1]);
    ADC_enableConverter(obj->adcHandle[2]);

    // set priority of SOCs
    ADC_setSOCPriority(obj->adcHandle[0], ADC_PRI_ALL_HIPRI);
    ADC_setSOCPriority(obj->adcHandle[1], ADC_PRI_ALL_HIPRI);
    ADC_setSOCPriority(obj->adcHandle[2], ADC_PRI_ALL_HIPRI);

    // delay to allow ADCs to power up
    SysCtl_delay(1000U);

    // RB2/B1
    ADC_setInterruptSource(obj->adcHandle[1], ADC_INT_NUMBER1, ADC_SOC_NUMBER2);

    // ISENA --> B2
    ADC_setupSOC(obj->adcHandle[1], ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM2_SOCA,    
                     ADC_CH_ADCIN2, HAL_ADC_SAMPLE_WINDOW);

    // ISENB  --> B4 or C8
    ADC_setupSOC(obj->adcHandle[2], ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM2_SOCA,    
                         ADC_CH_ADCIN8, HAL_ADC_SAMPLE_WINDOW);

    // ISENC --> C0
    ADC_setupSOC(obj->adcHandle[0], ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM2_SOCA,    
                     ADC_CH_ADCIN0, HAL_ADC_SAMPLE_WINDOW);

    // VSENA - A2
        ADC_setupSOC(obj->adcHandle[0], ADC_SOC_NUMBER1, ADC_TRIGGER_EPWM2_SOCA,    
                     ADC_CH_ADCIN2, HAL_ADC_SAMPLE_WINDOW);

    // VSENB - C1
        ADC_setupSOC(obj->adcHandle[2], ADC_SOC_NUMBER1, ADC_TRIGGER_EPWM2_SOCA,    
                     ADC_CH_ADCIN1, HAL_ADC_SAMPLE_WINDOW);

    // VSENC - C2->RC1
    ADC_setupSOC(obj->adcHandle[2], ADC_SOC_NUMBER1, ADC_TRIGGER_EPWM2_SOCA,    
                 ADC_CH_ADCIN2, HAL_ADC_SAMPLE_WINDOW);

    // VSENVM - B1->RB2. 
    ADC_setupSOC(obj->adcHandle[1], ADC_SOC_NUMBER2, ADC_TRIGGER_EPWM2_SOCA,    
                 ADC_CH_ADCIN1, HAL_ADC_SAMPLE_WINDOW);

    // B3 Speed Input
    ADC_setupSOC(obj->adcHandle[1], ADC_SOC_NUMBER15, ADC_TRIGGER_EPWM2_SOCA,   
                     ADC_CH_ADCIN3, HAL_ADC_SAMPLE_WINDOW);

  return;
} // end of HAL_setupADCs() function

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

    您好、Jonathan、

    下面有几个问题:

    1.您使用的是哪种封装?

    2.所有其他 ADC_C 通道是否正常工作?

    3.您能否确认寄存器窗口以确保正确配置 ADC_C1的 SOC 设置?

    在代码中、我看到 ADC 对象数组与 C0注释之间不匹配。 这不是 C1、但您能否仔细检查以确保您的对象数组未混合?

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

    您好 Frank、

    感谢您的回答!  在 C0上捕获良好、因为我们在运行快速测试后忘记将其改回。  问题最终是我们如何将数据存储在阵列中、这可以通过使用其他 ADC_SOC 来解决。

    谢谢、
    Jonathan

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

    您好、Jonathan、

    很高兴听到问题得到解决! 如果出现更多问题、请告知我们。