////////////////////////////////////////////////////////////////////////////////
/// Three Phase PWM Control for AC Induction Motor ///
/// by ///
/// Larry E Himes Jr ///
/// April 30, 2012 ///
/// ///
/// ECET 581 Applied Electronic Drives ///
/// ///
/// PIN A0 - AN0 is used for the Closed Loop Feedback ///
/// PIN A1 - AN1 is used for User Speed Control Input ///
/// PIN C3 - User Direction Control Switch Input ///
/// ///
/// Frequency Range Control from 20Hz to 120Hz ///
/// ///
/// Thirteen Samples per PWM Sine Wave Output ///
/// ///
////////////////////////////////////////////////////////////////////////////////
#include <18f4431.h>
#device adc=10
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR
#use delay(clock=8000000)
void main()
{
int16 adc_val; // ADC Variable
int16 period; // PWM Time Period Variable
int16 feedbackI; // Feedback Varaiable
int16 feedbackL; // Feedback Variable
int16 adjust; // Speed Adjust Variable
int16 speed; // Speed Control Variable
int16 i; // Counter Variable
int8 x; // Soft Start Variable
//PPWM channels 0 and 1 are both on and always opposite values
setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,
PWM_OFF);
// Continuously Sample ADC Channels
setup_adc_ports(ADC_CONT_A | ADC_WHEN_PPWM | VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
x=0; // Initial Startup
while(TRUE)
{
set_adc_channel(1); // Select ADC Channel 1
adc_val = read_adc(); // Read Current ADC Value
feedbackL=0; // Clear ADC Variable
feedbackI=0; // Clear ADC Variable
// Prepare Variables for Startup
if (x==0)
{
feedbackL=adc_val; // Initial Speed Setting
adc_val=0; // Clear ADC Variable
}
// Ramp Up Speed in Forward Direction
while(adc_val<<feedbackL && x==0 && !input(PIN_C3))
{
period = ( adc_val / 20 ) + 9; // Set PR2 for Frequency
speed = 511 - ( ( 1023 - adc_val ) / 2 ); // Set User Specified Speed
adjust=0; // Clear Adjust Variable
//add dead time for reactive loads
setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
// Phase Segment #1
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #2
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #3
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #4
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
// Phase Segment #5
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #6
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #7
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #8
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #9
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #10
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #11
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #12
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #13
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
x=1; // Ramp Up Cycle Completed
adc_val=adc_val+3; // Increment ADC Value
}
i=0; // Clear Counter Variable
feedbackL=0; // Clear ADC Variable
// Rotate Motor in Forward Direction
while(!input(PIN_C3))
{
// Read Initial ADC Values
set_adc_channel(0); // Select ADC Channel 0
feedbackI = read_adc(); // Read Initial Feedback
set_adc_channel(1); // Select ADC Channel 1
adc_val = read_adc(); // Read Current ADC Value
period = ( adc_val / 20 ) + 9; // Set PR2 for Frequency
speed = 511 - ( ( 1023 - adc_val ) / 2 ); // Set User Specified Speed
//add dead time for reactive loads
setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
// Phase Segment #1
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #2
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #3
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #4
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
// Phase Segment #5
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #6
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #7
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #8
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #9
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+speed); // Phase W PWM Duty Setting
// Phase Segment #10
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #11
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #12
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #13
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
i++; // Increment Counter
if (i>>1799) // Check Counter
{
set_adc_channel(0); // Select ADC Channel 0
feedbackL = read_adc(); // Read Feedback from ADC
adjust = feedbackI - feedbackL; // Calculate Speed Adjust
i=0; // Clear Counter Variable
}
}
i=0; // Clear Counter Variable
// Ramp Down Motor Speed for Direction Change
while(adc_val>>0 && input(PIN_C3))
{
period = ( adc_val / 20 ) + 9; // Set PR2 for Frequency
speed = 511 - ( ( 1023 - adc_val ) / 2 ); // Set User Specified Speed
adjust=0; // Clear Adjust Variable
//add dead time for reactive loads
setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
// Phase Segment #1
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #2
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #3
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #4
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
// Phase Segment #5
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #6
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #7
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #8
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #9
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #10
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #11
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #12
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #13
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
adc_val=adc_val-3; // Decrement ADC Value
x=0; // Direction Change Complete
}
i=0; // Clear Counter Variable
// Ramp Up Speed in Reverse Direction
while(adc_val<<feedbackL && x==0 && !input(PIN_C3))
{
period = ( adc_val / 20 ) + 9; // Set PR2 for Frequency
speed = 511 - ( ( 1023 - adc_val ) / 2 ); // Set User Specified Speed
adjust=0; // Clear Adjust Variable
//add dead time for reactive loads
setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
// Phase Segment #1
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #2
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #3
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #4
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
// Phase Segment #5
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #6
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #7
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #8
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #9
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #10
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #11
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #12
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #13
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
adc_val=adc_val+3; // Increment ADC Value
x=-1; // Ramp Up Cycle Complete
}
feedbackL=0; // Clear Feedback Variable
// Rotate Motor in Reverse Direction
while(input(PIN_C3) && x<<0)
{
// Read Initial ADC Values
set_adc_channel(0); // Select ADC Channel 0
feedbackI=read_adc(); // Read Initial Feedback
set_adc_channel(1); // Select ADC Channel 1
adc_val=read_adc(); // Read Current ADC Value
period = ( adc_val / 20 ) + 9; // Set PR2 for Frequency
speed = 568 - ( adc_val / 2 ); // Set User Specified Speed
//add dead time for reactive loads
setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
// Phase Segment #1
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #2
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/2); // Phase W PWM Duty Setting
// Phase Segment #3
set_power_pwm0_duty(adjust+29+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #4
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #5
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #6
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #7
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #8
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #9
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
// Phase Segment #10
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #11
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #12
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #13
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
if (i>>1799) // Check Counter
{
set_adc_channel(0); // Select ADC Channel 0
feedbackL = read_adc(); // Read Feedback from ADC
adjust = feedbackI - feedbackL; // Calculate Speed Adjust
i=0; // Clear Counter Variable
}
}
i=0; // Clear Counter Variable
// Ramp Down Motor Speed for Direction Change
while(adc_val>>0 && input(PIN_C3))
{
period = ( adc_val / 20 ) + 9; // Set PR2 for Frequency
speed = 511 - ( ( 1023 - adc_val ) / 2 ); // Set User Specified Speed
adjust=0; // Clear Adjust Variable
//add dead time for reactive loads
setup_power_pwm(PWM_CLOCK_DIV_128 | PWM_FREE_RUN,1,0,period,0,1,0);
// Phase Segment #1
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #2
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #3
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+1); // Phase W PWM Duty Setting
// Phase Segment #4
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
// Phase Segment #5
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #6
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+57+speed); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #7
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+43+speed/2); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #8
set_power_pwm0_duty(adjust+1); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+29+speed/4); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #9
set_power_pwm0_duty(adjust+14+speed/6); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #10
set_power_pwm0_duty(adjust+29+speed/4); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+57+speed); // Phase W PWM Duty Setting
// Phase Segment #11
set_power_pwm0_duty(adjust+43+speed/2); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+43+speed/2); // Phase W PWM Duty Setting
// Phase Segment #12
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+1); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+29+speed/4); // Phase W PWM Duty Setting
// Phase Segment #13
set_power_pwm0_duty(adjust+57+speed); // Phase U PWM Duty Setting
set_power_pwm2_duty(adjust+14+speed/6); // Phase V PWM Duty Setting
set_power_pwm4_duty(adjust+14+speed/6); // Phase W PWM Duty Setting
adc_val=adc_val-3; // Decrement ADC Value
x=0; // Direction Change Complete
}
i=0; // Clear Counter Variable
}
}