TI中文支持网
TI专业的中文技术问题搜集分享网站

28027 相关使用PWM触发ADC采样的问题

PWM_setCounterMode(pwmHandle, PWM_CounterMode_Up);// Count up
	PWM_setPeriod(pwmHandle, EPWM4_TIMER_TBPRD);// Set timer period
	PWM_disableCounterLoad(pwmHandle);// Disable phase loading
	PWM_setPhase(pwmHandle, 0x0000);// Phase is 0
	PWM_setCount(pwmHandle, 0x0000);// Clear counter
	PWM_setHighSpeedClkDiv(pwmHandle, PWM_HspClkDiv_by_1);// Clock ratio to SYSCLKOUT
	PWM_setClkDiv(pwmHandle, PWM_ClkDiv_by_1);

	// Setup shadow register load on ZERO	
	PWM_setShadowMode_CmpB(pwmHandle, PWM_ShadowMode_Shadow);	
	PWM_setLoadMode_CmpB(pwmHandle, PWM_LoadMode_Zero);

	// Set Compare values
	PWM_setCmpB(pwmHandle, EPWM4_CMPB);// Set Compare B value

	// Set actions
	PWM_setActionQual_Zero_PwmB(pwmHandle, PWM_ActionQual_Set);// Set PWM4B on Zero
	PWM_setActionQual_CntUp_CmpB_PwmB(pwmHandle, PWM_ActionQual_Clear);// Clear PWM4B on event B, up count

	PWM_enableSocAPulse(pwmHandle);// Enable SOC on A group
	PWM_setSocAPulseSrc(pwmHandle, PWM_SocPulseSrc_CounterEqualCmpBIncr);// Select SOC from from CPMB on upcount
	PWM_setSocAPeriod(pwmHandle,PWM_SocPeriod_FirstEvent);  // Generate pulse on 1st event

ADC_setSocTrigSrc(adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM4_ADCSOCB);

 

1、采用PWM触发ADC 采样,但是并没有成功触发,配置如上代码,哪里出了问题?

2、28027手册中并没有高速时钟的设置介绍,是否28027不使用外部高速时钟?而库里面配置PWM时基时钟时却用到了高速时钟?

desheng yang:

回复 Eric Ma:

您好,Eric

我只开启了 PWM4的时钟,和时基时钟,CMPB 53999,周期 59999,但是ADC转换都没有成功

哦哦,高速时钟就是系统时钟,好的,谢谢您

PWM_setCounterMode(pwmHandle, PWM_CounterMode_Up);// Count up
	PWM_setPeriod(pwmHandle, EPWM4_TIMER_TBPRD);// Set timer period
	PWM_disableCounterLoad(pwmHandle);// Disable phase loading
	PWM_setPhase(pwmHandle, 0x0000);// Phase is 0
	PWM_setCount(pwmHandle, 0x0000);// Clear counter
	PWM_setHighSpeedClkDiv(pwmHandle, PWM_HspClkDiv_by_1);// Clock ratio to SYSCLKOUT
	PWM_setClkDiv(pwmHandle, PWM_ClkDiv_by_1);

	// Setup shadow register load on ZERO	
	PWM_setShadowMode_CmpB(pwmHandle, PWM_ShadowMode_Shadow);	
	PWM_setLoadMode_CmpB(pwmHandle, PWM_LoadMode_Zero);

	// Set Compare values
	PWM_setCmpB(pwmHandle, EPWM4_CMPB);// Set Compare B value

	// Set actions
	PWM_setActionQual_Zero_PwmB(pwmHandle, PWM_ActionQual_Set);// Set PWM4B on Zero
	PWM_setActionQual_CntUp_CmpB_PwmB(pwmHandle, PWM_ActionQual_Clear);// Clear PWM4B on event B, up count

	PWM_enableSocAPulse(pwmHandle);// Enable SOC on A group
	PWM_setSocAPulseSrc(pwmHandle, PWM_SocPulseSrc_CounterEqualCmpBIncr);// Select SOC from from CPMB on upcount
	PWM_setSocAPeriod(pwmHandle,PWM_SocPeriod_FirstEvent);  // Generate pulse on 1st event

ADC_setSocTrigSrc(adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM4_ADCSOCB);

 

1、采用PWM触发ADC 采样,但是并没有成功触发,配置如上代码,哪里出了问题?

2、28027手册中并没有高速时钟的设置介绍,是否28027不使用外部高速时钟?而库里面配置PWM时基时钟时却用到了高速时钟?

desheng yang:

回复 Eric Ma:

Hi,Eric

28027的高速时钟等于系统时钟,那还是像28335那样,高速时钟也是默认两分频么?还是默认等于系统时钟,不分频?

PWM_setCounterMode(pwmHandle, PWM_CounterMode_Up);// Count up
	PWM_setPeriod(pwmHandle, EPWM4_TIMER_TBPRD);// Set timer period
	PWM_disableCounterLoad(pwmHandle);// Disable phase loading
	PWM_setPhase(pwmHandle, 0x0000);// Phase is 0
	PWM_setCount(pwmHandle, 0x0000);// Clear counter
	PWM_setHighSpeedClkDiv(pwmHandle, PWM_HspClkDiv_by_1);// Clock ratio to SYSCLKOUT
	PWM_setClkDiv(pwmHandle, PWM_ClkDiv_by_1);

	// Setup shadow register load on ZERO	
	PWM_setShadowMode_CmpB(pwmHandle, PWM_ShadowMode_Shadow);	
	PWM_setLoadMode_CmpB(pwmHandle, PWM_LoadMode_Zero);

	// Set Compare values
	PWM_setCmpB(pwmHandle, EPWM4_CMPB);// Set Compare B value

	// Set actions
	PWM_setActionQual_Zero_PwmB(pwmHandle, PWM_ActionQual_Set);// Set PWM4B on Zero
	PWM_setActionQual_CntUp_CmpB_PwmB(pwmHandle, PWM_ActionQual_Clear);// Clear PWM4B on event B, up count

	PWM_enableSocAPulse(pwmHandle);// Enable SOC on A group
	PWM_setSocAPulseSrc(pwmHandle, PWM_SocPulseSrc_CounterEqualCmpBIncr);// Select SOC from from CPMB on upcount
	PWM_setSocAPeriod(pwmHandle,PWM_SocPeriod_FirstEvent);  // Generate pulse on 1st event

ADC_setSocTrigSrc(adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM4_ADCSOCB);

 

1、采用PWM触发ADC 采样,但是并没有成功触发,配置如上代码,哪里出了问题?

2、28027手册中并没有高速时钟的设置介绍,是否28027不使用外部高速时钟?而库里面配置PWM时基时钟时却用到了高速时钟?

Eric Ma:

回复 desheng yang:

28027的高速时钟等于系统时钟,那还是像28335那样,高速时钟也是默认两分频么?还是默认等于系统时钟,不分频?

Eric:

F2802x 严格来讲其实没有高速时钟这么一说,除了有些外设模块是用低速时钟输入之外,其他的外设都是直接用系统时钟作为输入,如PWM, ADC。当然,每个模块内部都会有分频的寄存器。

而PWM模块,内部就有相关的分频寄存器,如TBCTL里面的CLKDIV和HSPCLKDIV

HSPCLKDIV

High Speed Time-base Clock Prescale BitsThese bits determine part of the time-base clock prescale value.TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)This divisor emulates the HSPCLK in the TMS320x281x system as used on the Event Manager(EV) peripheral.

CLKDIV

Time-base Clock Prescale BitsThese bits determine part of the time-base clock prescale value.TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)

PWM_setCounterMode(pwmHandle, PWM_CounterMode_Up);// Count up
	PWM_setPeriod(pwmHandle, EPWM4_TIMER_TBPRD);// Set timer period
	PWM_disableCounterLoad(pwmHandle);// Disable phase loading
	PWM_setPhase(pwmHandle, 0x0000);// Phase is 0
	PWM_setCount(pwmHandle, 0x0000);// Clear counter
	PWM_setHighSpeedClkDiv(pwmHandle, PWM_HspClkDiv_by_1);// Clock ratio to SYSCLKOUT
	PWM_setClkDiv(pwmHandle, PWM_ClkDiv_by_1);

	// Setup shadow register load on ZERO	
	PWM_setShadowMode_CmpB(pwmHandle, PWM_ShadowMode_Shadow);	
	PWM_setLoadMode_CmpB(pwmHandle, PWM_LoadMode_Zero);

	// Set Compare values
	PWM_setCmpB(pwmHandle, EPWM4_CMPB);// Set Compare B value

	// Set actions
	PWM_setActionQual_Zero_PwmB(pwmHandle, PWM_ActionQual_Set);// Set PWM4B on Zero
	PWM_setActionQual_CntUp_CmpB_PwmB(pwmHandle, PWM_ActionQual_Clear);// Clear PWM4B on event B, up count

	PWM_enableSocAPulse(pwmHandle);// Enable SOC on A group
	PWM_setSocAPulseSrc(pwmHandle, PWM_SocPulseSrc_CounterEqualCmpBIncr);// Select SOC from from CPMB on upcount
	PWM_setSocAPeriod(pwmHandle,PWM_SocPeriod_FirstEvent);  // Generate pulse on 1st event

ADC_setSocTrigSrc(adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM4_ADCSOCB);

 

1、采用PWM触发ADC 采样,但是并没有成功触发,配置如上代码,哪里出了问题?

2、28027手册中并没有高速时钟的设置介绍,是否28027不使用外部高速时钟?而库里面配置PWM时基时钟时却用到了高速时钟?

desheng yang:

回复 Eric Ma:

Thanks,Eric

还有一个疑问,是不是说使用28027 配置PWM时,如果不配置HSPCLKDIV 和 CLKDIV,是不是默认HSPCLKDIV =1?和CLKDIV=1?

PWM_setCounterMode(pwmHandle, PWM_CounterMode_Up);// Count up
	PWM_setPeriod(pwmHandle, EPWM4_TIMER_TBPRD);// Set timer period
	PWM_disableCounterLoad(pwmHandle);// Disable phase loading
	PWM_setPhase(pwmHandle, 0x0000);// Phase is 0
	PWM_setCount(pwmHandle, 0x0000);// Clear counter
	PWM_setHighSpeedClkDiv(pwmHandle, PWM_HspClkDiv_by_1);// Clock ratio to SYSCLKOUT
	PWM_setClkDiv(pwmHandle, PWM_ClkDiv_by_1);

	// Setup shadow register load on ZERO	
	PWM_setShadowMode_CmpB(pwmHandle, PWM_ShadowMode_Shadow);	
	PWM_setLoadMode_CmpB(pwmHandle, PWM_LoadMode_Zero);

	// Set Compare values
	PWM_setCmpB(pwmHandle, EPWM4_CMPB);// Set Compare B value

	// Set actions
	PWM_setActionQual_Zero_PwmB(pwmHandle, PWM_ActionQual_Set);// Set PWM4B on Zero
	PWM_setActionQual_CntUp_CmpB_PwmB(pwmHandle, PWM_ActionQual_Clear);// Clear PWM4B on event B, up count

	PWM_enableSocAPulse(pwmHandle);// Enable SOC on A group
	PWM_setSocAPulseSrc(pwmHandle, PWM_SocPulseSrc_CounterEqualCmpBIncr);// Select SOC from from CPMB on upcount
	PWM_setSocAPeriod(pwmHandle,PWM_SocPeriod_FirstEvent);  // Generate pulse on 1st event

ADC_setSocTrigSrc(adcHandle,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM4_ADCSOCB);

 

1、采用PWM触发ADC 采样,但是并没有成功触发,配置如上代码,哪里出了问题?

2、28027手册中并没有高速时钟的设置介绍,是否28027不使用外部高速时钟?而库里面配置PWM时基时钟时却用到了高速时钟?

desheng yang:

回复 Eric Ma:

哦哦,好的,谢谢您,Eric

赞(0)
未经允许不得转载:TI中文支持网 » 28027 相关使用PWM触发ADC采样的问题
分享到: 更多 (0)