[SOLVED] 16-Bit PWM generation

Status
Not open for further replies.

Max.Otto11

Newbie level 6
Joined
Oct 13, 2014
Messages
13
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
180
Hi all , i am working with PSoC 5LP. I have continious changable Analog Signals. I convert it to Digital with help of ADC. From this Result i want to generate PWM (Output1 Forwards, Output2 Ruckwards). All in 16-Bits. So i have range upto 65536.

I have Analog Input 0,1 to 3,3v. So if i gave Input 1,6v than i have 50% Duty Cycle of generated PWM.
PWM Basic Configuration:
16-Bit UDB
PWM Mode: Two Outputs
Period: 65535
CMP Value1: 32767 CMP Value2: 32676
CMP Type 1: Less CMP Type 2: Greater
Dead Band: Disable
Interrupt: None

Clock with 12MHz freq.

Here is the code. In ADC_Result i have 12-bit ADC result. From this result i want to generate 2 PWM Outputs. I know that i have to use WritePeriod(), WriteCompare(), WriteDeadtime() APIs.
Code:
int32 ADC_Result;

uint16 i=0;
int pwmValue, pulseWidth;

int main()
{       
    // Start the components 
	Sys_Init(); 
		 
//	CyGlobalIntEnable;  // Uncomment this line to enable global interrupts.

   	// Start Clock & PWM
	Clock_Start();
	PWM_Start();						

    while(1)
    {														
            		
	pwmValue = ADC_Result  // Which equation i have to use.
	PWM_WritePeriod(pwmValue);
	PWM_WriteCompare1(); 
										
     }    
}

I read the PWM datasheet & also check the Example PWM Programms but still i am much confsed for this following questions.

1. Need i Dead Band?
2. Which equation for converting ADC result into PWM?
3. Need i Interrupt/Global Interrupt ?


Regards
Max
 

Basic question: If your input resolution is 12 bits, how can you have 16 bit output resolution?
 

16-Bit PWM Program

Hi all , i am working with PSoC 5LP. I have continious changable Analog Signals. I convert it to Digital with help of ADC. From this Result i want to generate PWM (Output1 Forwards.All in 16-Bits. So i have range upto 65536.

I have Analog Input 0,1 to 3,3v. So if i gave Input 1,6v than i have 50% Duty Cycle of generated PWM.
PWM Basic Configuration:
16-Bit UDB
PWM Mode: One Outputs
Period: 65535
CMP Value1: 32767
CMP Type 1: Less
Dead Band: Disable
Interrupt: None

Clock with 12MHz freq.

Here is the code. In ADC_Result i have 16-bit ADC result. From this result i want to generate 1 PWM Output. I know that i have to use WritePeriod(), WriteCompare(), WriteDeadtime() APIs. In Program i have ADC answer into Variable "ADC_Result". I gave Input 1,6v so i get PWM with 50% Duty cycle. But when i run this Programm i got nothing.
Code:
uint16 ADC_Max=65535;
uint16 ADC_Min=0;

uint16 ADC_Result;
float Comp_Val;

int main()
{       
    // Start the components 
	Sys_Init(); 
		 
	//CyGlobalIntEnable;  // Uncomment this line to enable global interrupts.

	
	// Start Clock & PWM
	Clock_Start();
	PWM_Start();						

    while(1)
    {
									
		Comp_Val = (float)(PWM_ReadPeriod() / (ADC_Max * ADC_Result));
						 
                           PWM_WritePeriod(PWM_ReadPeriod() );					                 
                         PWM_WriteCompare(Comp_Val); 									    		
        }
    }
}

pls help me for this.

Regards
Max

- - - Updated - - -

I do it. I gave all variables to uint16.
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…