Home
Prox / RFID
Verichips
Ladder Logic
[interfacing] †
Tube Joints
Key Code From Photo
SolveSpace (3d CAD)
SketchFlat (2d CAD)
Photographs
Miscellany
Resume / Consulting
Contact Me

LDmicro Forum - PWM code help for full bridge PIC18F4550 xC8

(you are viewing a thread; or go back to list of threads)

PWM code help for full bridge PIC18F4550 xC8 (by zoe king)
Hello everyone. Ive written this code for the PWM control of the full bridge dc-dc converter. My switching freq is 100kHz(10us period) and I'm using PIC18F4550(bought from http://www.kynix.com/Detail/506330/PIC18F4550-I%2FML.html) and "xC8" compiler. I have made various cases for the selection depending upon the A/D conversion from the feedback resistive network, as I want to maintain 330Vdc at the output. I am also using the PLL functionality to make use of the 48MHz from the 4MHz crystal. I hope you all will understand the code as it is clearly written in a very easy possible way.
The problem is that during the simulation and debugging, I found that the program is taking about 39 cycles i.e., about 17us for the A/D conversion and I am reading this after every cycle. By the methodology I used, this much delay is causing my switching frequency to change a lot. I want a constant switching frequency of 100kHz, i.e, the time period must remain 10us that I've ensured in each case statement.
Any effective ideas to solve this problem?
Thankyou!

Code:

#include<xc.h>
#define _XTAL_FREQ 4000000
unsigned int answer=0;
unsigned int x=0;

void main()
{
TRISC = 0;
PORTC = 0;
TRISB=0;
PORTB=0;
RB0=0;
RC1=0;
RC2=0;
ADCON0=0b00000001;
ADCON1=0b00000000;
ADCON2=0b10000100;

while (1)
{
unsigned int temp=0;
GODONE=1;
while(GODONE==1);
temp=ADRESH;
temp=ADRESH<<2;
temp=temp|ADRESL;
answer= 4.883*temp;
RC1=0;
if(answer>3771)
{
x=x+1;
}
else x=x-1;

switch (x)
{
case 1 :
{
RC1 = 1;
__delay_us(18);
RC1 = 0;
__delay_us(42);
RC2=1;
__delay_us(18);
RC2=0;
__delay_us(42);
break;
}
case 2 :
{
RC1 = 1;
__delay_us(19.5);
RC1 = 0;
__delay_us(41.5);
RC2=1;
__delay_us(19.5);
RC2=0;
__delay_us(41.5);
break;
}
case 3 :
{
RC1 = 1;
__delay_us(21);
RC1 = 0;
__delay_us(39);
RC2=1;
__delay_us(21);
RC2=0;
__delay_us(39);
break;
}
case 4 :
{
RC1 = 1;
__delay_us(22.5);
RC1 = 0;
__delay_us(38.5);
RC2=1;
__delay_us(22.5);
RC2=0;
__delay_us(38.5);
break;
}
case 5 :
{
RC1 = 1;
__delay_us(24);
RC1 = 0;
__delay_us(36);
RC2=1;
__delay_us(24);
RC2=0;
__delay_us(36);
break;
}
case 6 :
{
RC1 = 1;
__delay_us(25.5);
RC1 = 0;
__delay_us(35.5);
RC2=1;
__delay_us(25.5);
RC2=0;
__delay_us(35.5);
break;
}
case 7 :
{
RC1 = 1;
__delay_us(27);
RC1 = 0;
__delay_us(33);
RC2=1;
__delay_us(27);
RC2=0;
__delay_us(33);
break;
}
case 8 :
{
RC1 = 1;
__delay_us(28.5);
RC1 = 0;
__delay_us(32.5);
RC2=1;
__delay_us(28.5);
RC2=0;
__delay_us(32.5);
break;
}
case 9 :
{
RC1 = 1;
__delay_us(30);
RC1 = 0;
__delay_us(30);
RC2=1;
__delay_us(30);
RC2=0;
__delay_us(30);
break;
}
case 10 :
{
RC1 = 1;
__delay_us(31.5);
RC1 = 0;
__delay_us(29.5);
RC2=1;
__delay_us(31.5);
RC2=0;
__delay_us(29.5);
break;
}
case 11 :
{
RC1 = 1;
__delay_us(33);
RC1 = 0;
__delay_us(27);
RC2=1;
__delay_us(33);
RC2=0;
__delay_us(27);
break;
}
case 12 :
{
RC1 = 1;
__delay_us(34.5);
RC1 = 0;
__delay_us(26.5);
RC2=1;
__delay_us(34.5);
RC2=0;
__delay_us(26.5);
break;
}
case 13 :
{
RC1 = 1;
__delay_us(36);
RC1 = 0;
__delay_us(24);
RC2=1;
__delay_us(36);
RC2=0;
__delay_us(24);
break;
}
case 14 :
{
RC1 = 1;
__delay_us(37.5);
RC1 = 0;
__delay_us(23.5);
RC2=1;
__delay_us(37.5);
RC2=0;
__delay_us(23.5);
break;
}
case 15 :
{
RC1 = 1;
__delay_us(39);
RC1 = 0;
__delay_us(21);
RC2=1;
__delay_us(39);
RC2=0;
__delay_us(21);
break;
}
case 16 :
{
RC1 = 1;
__delay_us(40.5);
RC1 = 0;
__delay_us(20.5);
RC2=1;
__delay_us(40.5);
RC2=0;
__delay_us(20.5);
break;
}
case 17 :
{
RC1 = 1;
__delay_us(42);
RC1 = 0;
__delay_us(18);
RC2=1;
__delay_us(42);
RC2=0;
__delay_us(18);
break;
}
case 18 :
{
RC1 = 1;
__delay_us(43.5);
RC1 = 0;
__delay_us(17.5);
RC2=1;
__delay_us(43.5);
RC2=0;
__delay_us(17.5);
break;
}
case 19 :
{
RC1 = 1;
__delay_us(45);
RC1 = 0;
__delay_us(15);
RC2=1;
__delay_us(45);
RC2=0;
__delay_us(15);
break;
}
case 20 :
{
RC1 = 1;
__delay_us(46.5);
RC1 = 0;
__delay_us(14.5);
RC2=1;
__delay_us(46.5);
RC2=0;
__delay_us(14.5);
break;
}
case 21 :
{
RC1 = 1;
__delay_us(48);
RC1 = 0;
__delay_us(12);
RC2=1;
__delay_us(48);
RC2=0;
__delay_us(12);
break;
}
default :
{
RC1=0;
RC2=0;
}
}

}
}
Thu Aug 11 2016, 02:15:54, download attachment PIC18F4550-I2fML_545298.jpg
Post a reply to this comment:
Your Name:
Your Email:
Subject:
(no HTML tags; use plain text, and hit Enter for a line break)
Attached file (if you want, 5 MB max):