请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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
