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.

[参考译文] BOOSTXL-DRV8305EVM:C2000 28379D Delfino启动板无法准确感应电压和电流输出

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/665745/boostxl-drv8305evm-c2000-28379d-delfino-launchpad-unable-to-accurately-sense-voltage-and-current-outputs

部件号:BOOSTXL-DRV8305EVM
主题中讨论的其他部件:C2000WARE,controlSUITE

设置:我正在使用C2000 28379D启动板和助推器组DRV8305EVM来实施我自己的控制算法。 启动板由EVM供电(我已移除所有JP1,2,3跳线)。 我使用C2000ware对启动板进行编程。 我使用了一个斩波器,使用了A相线的上部开关和 B相线的下部开关。

问题:我无法准确地感应增压器组件的DC链路电压(ENGATE高,NFAULT LED低)。 它显示4095而不是正确的值。 但是,如果启动板由USB供电,并且相应的引脚连接到8305EVM的VSENPVDD (连接两个板的接地引脚),则同一程序工作正常。

我希望能为解决这一问题提供任何帮助。 请在下面找到该计划

//
//包含的文件
//
#include "driverlib.h"
#include "device.h"

////
定义
//
这些文件用于ADC
#define EX_ADC_Resolution ADC_Resolution ADC_Resolution SYC_12bit //或ADC_Resolution SYBIT
#define EX_ADC_SIGNAL_MODE ADC_MODE_SINGLE_END_END_/或ADC_MODEF_ADC_SYQ_CLK

DEVICE #SYK / FREK //时基时钟是SYCLK /2
#define PWM_CLK 5000

#define PRD_VAL (TB_CLK /(PWM_CLK * 2))


//这些是用于ePWM
#define EPWM1_TIMER_TBPRD 2000U
#define EPWM1_CMP 1000U

#define EPWM2_TIMER_TBPRD 2000U
#define EPWM2_CMP 1000U

////
GLOBALS
//
uint16_t adcAResult_Vdd;
uint16_t interruptCount =0;
uint16_t loopcount =0;
////
函数原型
////这些
是用于ADC
void initADC (void);
void initADCs invoid ADCs (M1);

//这些用于eint16_t loopcount = 0;
void wmw/

wmisr;void



=

void wepmwmw/ void wmism)

//
//启动设备时钟和外围
//
device_init();

//
//禁用引脚锁并启用内部上拉。
//
DEVICE_INITGPIO ();

//
//初始化饼图和清除饼图寄存器。 禁用CPU中断。
//
interrup_initModule();

//
//使用指向shell中断服务例程(ISR)的指针初始化PIE矢量表
//
interrupT_initVectorTable();


//
//设置ADC,初始化软件触发的SOC
//
initadCs();
initADCSOC();

//
//在GPIO124上启用GPIO输出以清除增压器组件上的ENGATE
//
GPIO_setPadConfig (124,GPIO_PIN_TYPE_PLEUP);//在GPIO6上启用上拉
GPIO写入引脚(124,1); //加载输出闩锁
GPIO_setPinConfig (GPIO _124_GPIO124); // GPIO124 = GPIO124
GPIO_setDirectionMode (124,GPIO_DIR_MODE_OUT);// GPIO124 =输出
DEVICE_DELAY _US (1万);


//
//本示例中使用的中断被重新映射到ISR功能
//在此文件中找到
//
中断注册(INT_EPWM1,&epwm1ISR);
中断注册(INT_EPWM2,&epwm2ISR);

//
//将GPIO0/1,GPIO2/3和GPIO4/5配置为ePWM1A/1B,ePWM2A/2B和ePWM3A/3B
//
GPIO _setPadConfig (0,GPIO PIN类型标准);
GPIO _setPinConfig (GPIO_0_EPWM1A);
/*GPIO_setPadConfig (1,GPIO PIN_TYPE_STD);
GPIO _setPinConfig (GPIO_1_EPWM1B);*/

/*GPIO_setPadConfig (2,GPIO PIN_TYPE_STD);
GPIO _setPinConfig (GPIO_2_EPWM2A);*/
GPIO _setPadConfig (3,GPIO PIN_TYPE_STD);
GPIO_setPinConfig (GPIO _3_EPWM2B);


//
//禁用同步(同时冻结时钟至PWM)
//
sysctl_disablePeripheral (sysctl_Periph_CLK_TBCLKSYNC);
initEPWM1();
initEPWM2();

//
//启用与PWM的同步和时钟
//
sysctl_enablePeripheral (sysctl_Periph_CLK_TBCLKSYNC);


//
//启用ePWM中断
//
INTERRUL_ENABLE (INT_EPWM1);
INTERRUL_ENABLE (INT_EPWM2);

//
//启用全局中断(INTM)和实时中断(DBGM)
//
EINT;
ERTM;

//
//无限循环
//
同时(1)
{
//
//转换,等待完成和存储结果
//
ADC_FORCESOC (ADCA_BASE,ADC_SOC_NUMBER0);

//
//等待ADCA完成,然后确认标志
//
while (ADC_getInterruptStatus (ADCA_BASE,ADC_INT_NUMBER1)=false)
{
}
ADC_clearInterruptStatus (ADCA_BASE,ADC_INT_NUMBER1);

//
//存储结果
//

adcAResult_Vdd = ADC_readResult (ADCARESULT_BASE,ADC_SOC_NUMBER0);
IF (循环计数> 8000)
{
ESTOP0;
loopcount = 0;
}

loopcount = loopcount + 1;

}

}//

主


void initadC(void){

//
//将ADCCLK除法器设置为/4
//
ADC_setPrescaler (ADCA_BASE,ADC_CLK_DIV_4_0);

//
//设置分辨率和信号模式(参见上面的#defines)并加载相应的修正。
//
ADC_setMode (ADCA_BASE,EX_ADC_Resolution,EX_ADC_SIGNAL_MODE);
//
//将脉冲位置设置为延迟
//
ADC_setInterruptPulseMode (ADCA_BASE,ADC_PULSE_END_of_CONV);

//
//启动ADC,然后延迟1毫秒
//
ADC_enableConverter (ADCA_BASE);
device_delay_US(1000);

}


作废initADCSOC(void){

//
//配置ADCA

#IF (EX_ADC_Resolution == ADC_Resolution _12位)的SOC
ADC_setupSOC (ADCA_BASE,ADC_SOC_NUMBER0,ADC_TRIGG_SW_ONY,ADC_CH_ADCIN3,15); // a_v

#Elif (EX_ADC_Resolution == ADC_Resolution _16BIT)
ADC_setupSOC (ADCA_BASE,ADC_SOC_NUMBER0,ADC_TRIGG_SW_ONY,ADC_CH_ADCIN3,64);
#endif

//
//设置SOC0以设置中断1标志。 启用中断并确保清除其标志。
//
ADC_setInterruptSource (ADCA_BASE,ADC_INT_NUMBER1,ADC_SOC_NUMBER0);
ADC_enableInterrupt (ADCA_BASE,ADC_INT_NUMBER1);
ADC_clearInterruptStatus (ADCA_BASE,ADC_INT_NUMBER1);

}////



initEPWM1 -配置ePWM1
//
void initEPWM1()
{
//
//设置TBCLK
//
ePWM_setTimeBasePeriod (EPWM1_BASE,EPWM1_TIMER_TBPRD);
ePWM_setPhaseShift (EPWM1_BASE,0U);
ePWM_setTimeBaseCounter (EPWM1_BASE,0U);

//同步代码
ePWM_setSyncOutPulseMode (EPWM1_BASE,ePWM_SYNC_Out_PULSE_ON_counter_zero);

//
//设置比较值
//
ePWM_setCounterCompareValue (EPWM1_BASE,ePWM_counter_compare_A,EPWM1_CMP);
//ePWM_setCounterCompareValue (EPWM1_BASE,ePWM_counter_compare_B,EPWM1_MAX_CMBB);

//
//设置计数器模式
//
ePWM_setTimeBaseCounterMode (EPWM1_BASE,ePWM_counter_mode_ue_down);
ePWM_DisablePhaseShiftLoad (EPWM1_BASE);
ePWM_setClockPrescaler (EPWM1_BASE,ePWM_Clock_diver_1,ePWM_HSCLOCK分配器_1);

//
//设置阴影
//
ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,ePWM_counter_compare_A,
ePWM_COMP_LOW_ON_CNTR_ZERO);
/*ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,ePWM_counter_compare_B,
ePWM_COMP_LOW_ON_CNTR_ZERO);*/

//
//设置操作
//
ePWM_setActionQualifierAction (EPWM1_base,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT高,
ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);
ePWM_setActionQualifierAction (EPWM1_base,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_TIMEBASE向下_CMPA);
/*ePWM_setActionQualifierAction(EPWM1_base,
ePWM_AQ_OUTPUT B,
ePWM_AQ_OUTPUT高,
ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMBB);
ePWM_setActionQualifierAction (EPWM1_base,
ePWM_AQ_OUTPUT B,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_TIMEBASE DON_CMBB);*/

//
//中断,我们将在其中更改比较值
//选择INT on time base counter zero event,
//启用INT,在第三个事件上生成INT
//
ePWM_setInterruptSource (EPWM1_BASE,ePWM_INT_TBCTR);
ePWM_enableInterrupt (EPWM1_BASE);
ePWM_setInterruptEventCount(EPWM1_base, 3U);

}////




initEPWM2 -配置ePWM2
//
void initEPWM2()
{
//
//设置TBCLK
//
ePWM_setTimeBasePeriod (EPWM2_BASE,EPWM2_TIME_TBPRD);
ePWM_setPhaseShift (EPWM2_BASE,0U);
ePWM_setTimeBaseCounter (EPWM2_BASE,0U);

//同步代码
ePWM_setCountModeAfterSync(EPWM2_base, ePWM_COUNT_MODE_UP_After_sync);
ePWM_setSyncOutPulseMode (EPWM2_BASE,ePWM_SYNC_Out_PULSE_ON_counter_zero);

//
//设置比较值
//
//ePWM_setCounterCompareValue (EPWM2_BASE,ePWM_counter_compare_A,EPWM2_CMP);
ePWM_setCounterCompareValue (EPWM2_BASE,ePWM_counter_compare_B,EPWM2_CMP);

//
//设置计数器模式
//
ePWM_setTimeBaseCounterMode (EPWM2_BASE,ePWM_counter_mode_ue_down);
ePWM_enablePhaseShiftLoad(EPWM2_base);
ePWM_setClockPrescaler (EPWM2_BASE,ePWM_Clock_diver_1,ePWM_HSCLOCK分配器_1);

//
//设置阴影
//
/*ePWM_setCounterCompareShadowLoadMode (EPWM2_BASE,ePWM_counter_compare_A,
ePWM_COMP_LOW_ON_CNTR_ZERO);*/
ePWM_setCounterCompareShadowLoadMode (EPWM2_BASE,ePWM_counter_compare_B,
ePWM_COMP_LOW_ON_CNTR_ZERO);
//
//设置操作
//
/*ePWM_setActionQualifierAction (EPWM2_BASE,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT高,
ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);
ePWM_setActionQualifierAction(EPWM2_base,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_TIMEBASE DOWN CMPA);*/
ePWM_setActionQualifierAction(EPWM2_base,
ePWM_AQ_OUTPUT B,
ePWM_AQ_OUTPUT高,
ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMBB);
ePWM_setActionQualifierAction(EPWM2_base,
ePWM_AQ_OUTPUT B,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_TIMEBASE向下_CMBB);

//
//中断,我们将在其中更改比较值
//选择INT on time base counter zero event,
//启用INT,在第三个事件上生成INT
//
ePWM_setInterruptSource (EPWM2_BASE,ePWM_INT_TBCTR);
ePWM_enableInterrupt (EPWM2_BASE);
ePWM_setInterruptEventCount (EPWM2_BASE,3U);


}////



epwm1ISR-- ePWM 1 ISR
//
__interrupt void epwm1ISR(void)
{

//
//清除此计时器的INT标志
//
ePWM_clearEventTriggerInterruptFlag (EPWM1_BASE);

//
//确认中断组
//
interrupT_clearACKGroup(interrupT_ACK_Group3);


}////


epwm2ISR-- ePWM 2 ISR//

__interrupt void epwm2ISR(void)
{
//
//清除此计时器的INT标志
//
ePWM_clearEventTriggerInterruptFlag (EPWM2_BASE);

//
//确认中断组
//
interrupT_clearACKGroup(interrupT_ACK_Group3);
} 

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据BOOSTXL-DRV8305EVM,此问题可能是ADC配置不正确。 您可以参考controlSUITE中的一个示例项目,它基于F2.8377万S LaunchPad + BOOSTXL-DRV8305EVM,它应该与您正在使用的电路板相同。

    \ti\controlSUITE\development套件\TIDM-SERVO-LAUNCTHXS\MonoMtrServo_377s_v1_00_00
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议。 将会经过
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只是想登记入住,看看您的方面是否有任何更新。 如果您有任何疑问,请告诉我。 如果没有其他问题,我们将关闭此线程。 谢谢。