DIY Electric Car Forums banner

1 - 18 of 18 Posts

·
Registered
Joined
·
3,141 Posts
Discussion Starter #1 (Edited)
Some of the principles I discussed in the "Magnetics" thread were in preparation for the design of the transformer I used for this DC-DC boost converter. For my purposes, I wanted to boost a 24V nominal battery to about 240 VDC to be used with a VFD for a three phase motor. I have built several such converters before, but they were center tap designs, and the duty cycle of the opposing drive voltages must be exactly equal (50%) to avoid a net DC component in the transformer primary and resulting saturation. This design uses a half-bridge and two capacitors, which blocks DC and even allows some duty cycle modulation to adjust the output. It also provides some current limiting and absorbs energy during voltage transitions due to leakage inductance. The circuit is also very simple, inexpensive, and efficient. The prototype I made uses an E47-20-16 ferrite core for a total transformer size of about 2" x 2" x 1.5" high, and an expected power capacity of about 500 watts. Here is the circuit (with some extras not yet in the prototype):



Some test results with a 300 ohm load:

Code:
[FONT=Courier New]Vin Iin   Vout  Iout   Pin    Pout   Eff

12  0.93  56.4  0.188  11.16  10.60  95.0%
16  1.26  75.8  0.253  20.16  19.15  95.0%
24  1.91 113.5  0.378  45.34  42.94  93.7%
30  2.40 143.0  0.477  72.00  68.20  94.7%
36  2.89 171.0  0.570 104.00  97.47  93.7%[/FONT]


I'll go into more details of the design in further posts.
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #2
An isolated boost converter like this may not be useful for most people, but it could provide a means for making an isolated charger. The same principles are involved for 120V => 300V and 240V => 12V, and it is scalable down to very small converters or up to multi-kW designs. So I will explain the process I used to select components and make the transformer.

1. For 12, 24, 36, or 48V inputs, I was able to choose an inexpensive 30A MDA ceramic cartridge fuse, rated at 125 VDC, but I could have used a much cheaper automotive blade type, which are rated to about 60 VDC. 30 amps will provide 360 watts at 12V, and 1.4 kW at 48V. I think that is sufficient for my purposes and multiple units can be put in series or parallel.

2. I show a small 1 uH choke in series with the input. This may not be necessary, but it provides some filtering that may reduce EMI emissions.

3. There is a 30A relay and a 50 ohm precharge resistor, because originally I had a large electrolytic across the supply voltage. But the simulation showed about 25 amps RMS through the capacitor, and the circuit works just as well with a much smaller 470 nF capacitor. The two larger film type capacitors in series across the supply and connected to the transformer primary also function as energy storage and nothing more is needed.

4. So the relay may not be needed. But it might be good to have a way to disconnect the circuit from the supply until everything is OK. This circuit provides some inherent safety because the high voltage is not present unless the PWM is running. I show voltage dividers to the ADC inputs of the PIC so the supply voltage can be measured, and the precharge resistor would be shorted once the capacitor(s) have charged fully.

5. The relay can have a 12V or 24V DC coil, and the processor can use PWM to provide the voltage needed for 36V or 48V supplies. It can also be reduced once it has pulled in, to save power. The hold current is about 20% of pull-in.

6. The 12V control voltage is produced via an LM317HVH adjustable high-voltage (60V) linear regulator, mostly because I have a big bag full. This voltage is used for the gate voltage and the op-amps. It is fed to an LM78L05 for 5V logic supply.

7. I am using a PIC16F1825 as the microcontroller. The choice is not critical, but for about $2 it has multiple PWMs, ADCs, and a USART, which I show available to an external BlueTooth module. It could also connect to a simple keypad and display for user interface.

8. I'm using two HUF75645 MOSFETs, which are rated at 100V and 75A. I have a lot of them, which influenced my choice. They are in a half-bridge configuration. The gate drive is an IR2186 dual driver, but others will work as well. I'm using its bootstrap circuit to generate the gate voltage for the high side. It works well from 12 VDC up to about 600V. This eliminates the need for a DC-DC module and optocoupler drive.

9. I show a green and red LED with limiter resistors in series and connected to an I/O pin. This can provide many combinations for coded status indicators. With a tristate on the pin, both will light dimly, and both will be off if an extra diode is added, or if 3.3V logic is used.

10. There is a 0.01 ohm current shunt in the return from the output transformer. It gives 200 mV at 20 amps, with power dissipation of 4 watts. I will probably use a 0.002 ohm, so 30 amps will give 60 mV and only 0.9 watts. I use a differential amplifier to read this with the PIC. The resistors and the shunt can be changed to get a good ADC voltage. Some filtering may need to be added.

11. There is another differential amplifier which reads the output voltage through 1 megohm resistors. Isolation is not really needed, as 300V output will only draw 300 uAmps, which is a safe level.

12. The AC output on the secondary of the transformer is rectified by means of two half-bridge high-efficiency 600V diodes, and a 10 uF 500V film capacitor provides energy storage and filtering. This goes through a 100 uH inductor to the main output capacitor, and another high efficiency rectifier allows the inductor to act as a current mode energy storage and filtering component. This greatly reduces ripple current in the output capacitor.

Now for the details of the transformer. I am using a pair of E-47-20-16 ferrite cores, which are N27 material, designed for moderate frequency power transformers, and I am using 20 kHz (or perhaps as high as 50 kHz). From the data sheet, it has a fairly high permeability of 1700 and an A(l) of 2816 (2.8 uH for a single turn). I decided to use four primaries of 7 turns each, which makes the inductance 5.1*7^2 => 138 uH. I wanted a ratio of 10:1 so I have two secondaries of 70 turns each, for 13.8 mH. For a 24 V supply the input will be 24V peak-to-peak and the output will be 240. This will produce 120 VAC, so I need to connect the secondaries in series to get the desired 240 VDC.

I used 20 kHz for the PWM and a duty cycle of 50%, which produced the results shown above. When I ran a simulation, I found that I got less output. I think this was due to the inductance and higher impedance at the higher frequency, but for a transformer the effective impedance of the primary is what is reflected from the secondary and its load. The inductance as calculated and measured above applies to the current draw under no load, and the maximum current depends on the resistance of the windings and the leakage inductance. There are other factors as well, such as the skin effect, which causes the effective resistance to increase with frequency.

I'll continue in another post with photos and simulation plots.
 

·
Registered
Joined
·
6 Posts
Hi Paul,

Can you make a boost converter to convert from 96 V to around 600 V ? Compact size and max power upto 15kW. This can enable use of industrial vfd on manageable battery voltages.
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #4
Theoretically it's possible to convert from any voltage to any voltage, within the limits of available components. 96 VDC to 600 VDC is just a 6x booster, and the MOSFETs or IGBTs on the primary side could be 150 to 200 VDC rated, which is now very common and inexpensive. The 15 kW power is achievable in a single unit, but commonly available and inexpensive ferrite cores make it probably more practical to make a module rated about 4 kW and use four in series/parallel.

As a "rule of thumb", a well-designed isolated switching supply can achieve about 50 watts per cubic inch, with an efficiency of at least 90%, so there will be about 5 watts of heat. The form factor is important, so a 4000 watt switching supply at 80 cubic inches could be a cube 4.3" square, or 10" x 8" x 1". The cube has 111 square inches surface and the flatter shape has 160, so it can run cooler.

Another consideration is the size of conductors needed to carry the current, mostly on the primary side. For 15 kW at 96 VDC, it's 156 amps, which requires about #2 AWG. A little hard to work with, but not a severe problem. However, the 4 kW modules draw only about 42 amps, which is easily handled by #8 AWG or perhaps even #10.

I chose a maximum battery voltage of 48 VDC for my design because it is considered a "safe" voltage and there are many inexpensive Telco type components and protective devices for that voltage. The concept is that there will be no two points in the primary circuit that have greater than 50 volts between them, and the much higher secondary voltage exists only when all interlocks are enabled and the switching is actually creating the voltage. Practically any malfunction shuts down the high voltage and you need only deal with 48 VDC batteries.
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #6
That looks like a good design possibility. The controller IC is only $2.42 from Mouser, and here is the data sheet:
http://www.mouser.com/ds/2/196/ICE2HS01G_PDS_v2.1_20110524_Public-92910.pdf

I'm getting ready to make some PCBs, probably including a DC-DC converter, although I'm not sure I want to commit to an LLC design at this time. I have a circuit that seems to work pretty well, and it's a lot simpler, but I don't know how efficient it really is or how it will work at higher power levels. Maybe I can make the board compatible with the LLC design as well, at least for a rough prototype. Something to think about. Thanks.
 

·
Registered
Joined
·
383 Posts
Great design, i like capacitor switching circuits, how did the load on shaft affect the charging discharging of the input capacitors on the primary? i take it that the frequency went up under load

The half bridge with capacitors is similar to a 3 phase motor controller i made to have a play with. I tried both AC caps and twin DC capacitors with rectification, and also voltage and current doublers

It creates a nice sinusoidal drive without using High speed switching in PWM.
you can also double the voltage using the capacitors, however it needs to be alot more complex to run properly at varying motor RPM and load conditions.

http://vid936.photobucket.com/albums/ad203/bigmotherwhale/MOV02741_zpsrakaet4q.mp4
 

·
Registered
Joined
·
736 Posts
Allright, let's discuss possible issues with the topology in the schematic as Paul posted:
When I ran a simulation, I found that I got less output. I think this was due to the inductance and higher impedance at the higher frequency, but for a transformer the effective impedance of the primary is what is reflected from the secondary and its load. The inductance as calculated and measured above applies to the current draw under no load, and the maximum current depends on the resistance of the windings and the leakage inductance. There are other factors as well, such as the skin effect, which causes the effective resistance to increase with frequency.
The 20 uF DC LINK caps have an ESR of approximately 5 milliOhm and the Rds of the mosfets is about 10 mΩ.
No issues there. Current and voltage ratings are also within range.

Transformer leakage.
Even with a very difficult (read practically impossible) to achieve high coupling factor (say 0.997) and a primary inductance of 138 uH
the leakage inductance's impedance at the fundamental 20 to 25 kHz frequency is in the 100 mΩ range.
That is a factor ten higher than the Rds of the mosfets and the ESR of DC-LINK caps.
Voltage drop at 40A over leakage inductance: 40 * 0,1 = 4 Volt!!

My next steps would be: introduce a small airgap (i.e. reduce inductance values and make them less temperature dependent),
measure the leakage inductance, then adjust the turns ratio accordingly.

Skin effect.
At 25 kHz the current density in the center of a 1 mm CuL wire is roughly 35% of the density in the outer layer. So at this diameter the skin effect is already significant.
Nominal rating for 1 mm CuL (LF, at 3A/mm2) is 2,8Arms.
The design has only four parallel strands for roughly 40Arms primary current at 500W out, 24VDC in.
The wire diameter has to be larger than 1 mm.
So skin effect is an issue, why not switch to Litz?
Not that expensive.
Maybe Litz is not that easy to get on an E core (angles).
An ETD has a circular center leg.
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #9 (Edited)
Thanks for the detailed analysis. I have not done anything with this design lately but I plan to return to it soon, at least perhaps to make a prototype PCB.

I do have some Litz wire which I will use for the next prototype. I have 100ft of 105/#40 which is equivalent to about #17 or #18 and good for about 6-9 amps. It is 0.044" (1.13mm) diameter and cost $30 ($0.30/ft). This may be too small for the primary although I might be able to use six windings in parallel.

I also have 40ft of 7x3x#21 which is equivalent to about #14 AWG and good for 12-18 amps. It's 0.090" (2.3mm) diameter, and cost was $20 ($0.50/ft). Three primary windings will probably be enough.

In all cases I will need to determine how much window area I have, and make primary and secondary about equal. The secondary may not need to be made of Litz wire, as it will be carrying only about 3-5 amps and #20 to #22 should be sufficient. The window cross-sectional area of the 47/20/16 core is 194 mm^2, so there could be a total of 80 turns of the smaller Litz wire or about 20 turns of the larger size, in half of the space. I am using the area of an equivalent square section wire to allow for imperfect packing density. Thus I might get 8 primaries of 10 turns each of the smaller wire, or 3 primaries of 7 turns each for the larger.

#20 AWG has a diameter of 0.8mm and thus provide 152 turns with a current capacity of about 3 amps. For 250 VAC output that is 750 watts which is just about the design target. It also means that the primary should have 15 turns for a 10:1 ratio, while the 7 turns would be 20:1. With 48 VDC input the primary would see a square wave of 24 VAC under no load. The capacitors have a reactance of 0.4 ohms at 20 kHz so with an input current of 40 amps that is a 16V drop so that would seem to severely limit the output. But since it is capacitive, and at quadrature to the load, it may still provide 18 VAC instead of 24V, for a 25% drop of output. If the output is set to be about 320 VDC at no load with 48 VDC input, it could be as high as 346 VDC with fully charged battery voltage of 52V. And then at full load it would be 240 VDC which is still acceptable for a VFD bus link with a minimum of 200 VDC. I think we're good.

I will need to look further into the ramifications of leakage inductance. I am more familiar with 60 Hz power transformers where coupling is defined by regulation. This is typically 5% or more for smaller transformers and 1% for large ones with close coupled windings. For the high current transformers I have designed, with only a few turns of bus bar for output, 5% is considered pretty good. AIUI, this means that a more practical transformer for this design might have 2%-5% leakage inductance, but I think that would only mean that the output may be 5% lower under load.

BTW, Here are pictures of the actual prototype:





Output voltage with 24 VDC 1.93A input into 300 ohm (48W) resistive load:


Thanks! :)
 

·
Registered
Joined
·
736 Posts
My response was not a detailed analysis, but a ballpark discussion of possible issues that were posted.

Input cap values are indeed at the lower limit for 500 to 750W. Focus was on ESR. Can be OK at 20uF for DCLINK or equivalent (tan delta <= 0.001)

Yes, I'd also go for the safe upper input volt limit of 48V for high power values.
And a full bridge topology.
Is the tank cap missing (cause there is a 1uH inductance in the power supply line)?

Transformer: could have a high coupling factor. 0.98 or 0.99. But it's very difficult to make an adequate calculation or even estimation.
There is a test circuit. Why not measure the leakage inductance?

Btw, the leakage inductance also contributes to the power transfer.
 

·
Registered
Joined
·
3 Posts
Hello,

Two pins of the PIC were used to feed PWM to the MOSFET controller.

I could not figure out whether the same PWM was used for both of the pins or different PWMs were used and how. I am new in PIC programming. If you could post the PIC programming codes, I would be grateful.

regards
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #12
Recently I have pretty much decided to use a full bridge topology, and I would make other changes if I stayed with the half-bridge + two caps design. But this circuit does work reasonably well. I have the Microchip C Source code on my website. It is in quite rudimentary form:

http://enginuitysystems.com/pix/Half_Bridge_16F1825_Main.c

I will also show it here:

Code:
/* 
 * File:   Half_Bridge_16F1825_Main.c
 * Author: Paul2010
 *
 * Created on Dec 11, 2013
 */
#ifdef    __XC8
#include    <xc.h>
#else
#include    <htc.h>
#endif

//#include <stdio.h>
//#include <stdlib.h>
//#include    <pic12f1822.h>

//    __CONFIG _CONFIG1, 0x3FFF & ( _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_ON & _IESO_OFF & _FCMEN_OFF )
//    __CONFIG _CONFIG2, 0x3FFF & ( _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF )

#ifdef    __XC8
#pragma     config         PWRTE=ON, IESO=OFF, MCLRE=OFF, FOSC=INTOSC, WDTE=OFF, BOREN=OFF, CLKOUTEN=OFF, BORV=LO
#pragma     config         LVP = OFF, PLLEN = OFF, WRT=OFF, STVREN=OFF
#else
__CONFIG( FOSC_INTOSC & MCLRE_OFF & WDTE_OFF & PWRTE_ON & IESO_OFF);
__CONFIG(LVP_OFF & PLLEN_OFF);
#endif

#define    OFFSET              1
#define USE_OR_MASKS

#define    ADCON0SET    0b00001101    //<6:2>CHSEL: 00011=AN3, <1>GO/DONE, <0>ADON

#define    ADCON1SET    0b01010011    //<7>ADFM 0=left, <6:4>ADCS 101=Fosc/16, <3:2>N/A, <1:0>ADPREF 11=FVR

#define    ANSELASET    0b00010000    //<0,1,2,4>=ANSA0, ANSA1, ANSA2, ANSA4
                    //RA4=AN3, RA2=AN2, RA1=AN1, RA0=AN0
#define APF1SET         0b00000000      //<7:4>N/A, <3>P1DSEL, <2>P1CSEL, <1>P2BSEL, <0>CCP2SEL
#define CCP1SET         0b10001100      //<7:6>P1M 10=HalfBridgeFwd, <5,4>LSB, <3:0>CCP1M 1100=All Active High

#define    FVRCONSET    0b10000010    //<7>FVREN, <6>FVRRDY, <5>TSEN, <4>TSRNG, <3:2>CDAFVR, <1:0>10=2.048VREF

#define    OPTIONSET    0b10000111    //<7>WPU, <6>INTEDG, <5>TMR0CS 0=Fosc/4, <3>PSA 0=TMR0,
                                //<2:0>PS 000=1:2, 011=1:16, 111=1:256

#define    OSCCONSET    0b01111011    //<7>SPLLEN, <6:3>IRCF 1111=16MHz, <2>N/A, <1:0>11=IntOsc
                                // 500 kHz => 200uA, 4 MHz => 700uA, 8 mHz => 1000uA
#define PWM1SET        0b10000011    // <7> P1RSTen 1=Auto Restart, <6:0> P1DC Delay Counts

// PSTR1CON: <7:5> N/A, <4> 1=Sync on PWM, <3:0> Str1xEn<D:A>
#define PSTR1SET        0b00010011

#define T1CONSET    0b00001000  // <7:6>CS: 00-fOsc/4, 01=fOsc
                                    // <5:4>Prescale: 00=1, <3>1=enable, <2:1>N/A, <0>1=ON
                                // fOsc /T1CKPS /65536
                                // 16 MHz clock: 16000000 /65536 = 244.14 Hz = 4.096 mSec

#define    T2CONSET    0b00000000    // <6:3>Postscale 00=1, <0:1>PS 00=1 01=4 10=16 11=64

#define    TRISASET    0b00011011    // Set <0:1,3:4> as input, <2,5> as output
#define    TRISCSET    0b11001111    // Set <0:3> as input, <4,5> as output
#define    INTCONSET    0b11100000    // Setup INTCON 7:GEIE, 6:PEIE, 5:TMR0IE, 4:INTE, 3:IOCIE, 2:TMR0IF, 1:INTF, 0:IOCIF
#define    PIE1SET        0b01000000    // <7>TMR1GIE, <6>ADIE, <5>RCIE, <4>TXIE, <3>SSP1IE, <2>CCP1IE, <1>TMR2IE, <0>TMR1IE
#define    PIR1SET        0b00000000    // <7>TMR1GIF, <6>ADIF, <5>RCIF, <4>TXIF, <3>SSP1IF, <2>CCP1IF, <1>TMR2IF, <0>TMR1IF

/* Pin definitions for PIC16F1825
Pin 1    Vdd                         +5VDC
Pin 2    RA5/P2A
Pin 3    RA4/AN3/P2B/SDO1
Pin 4    RA3/MCLR-,VPP
Pin 5    RC5/P1A/RX                  PWMA
Pin 6    RC4/P1B/TX/SRNQ             PWMB
Pin 7    RC3/AN7/P1C/P2A/SSI-
Pin 8    RC2/AN6/P1D/P2B/SDO1
Pin 9    RC1/AN5/SDA/SDI
Pin 10    RC0/AN4/SCL/SCK
Pin 11    RA2/AN2/INT/SRQ             LED
Pin 12    RA1/AN1/RX/PC/SRI/Vref+
Pin 13    RA0/AN0/TX/PD/Vref-/DAC
Pin 14    Vss                         GND
 */

#define    ConvertADC   ADCON0bits.ADGO = 1
#define    ReadADC      256*(int)ADRESH + (int)ADRESL
#define    BusyADC      ADCON0bits.GO_nDONE

#define     CLKFREQ    16                //Clock Frequency (MHz)
#define     CLKPER    1000/CLKFREQ    //Clock period (nSec)
#define     PS          16              //Prescaler

#define     ADCMIN      164        // 10.5V / 8 = 1.312 * 256 / 2.048 = 164
#define     ADCMAX      216        // 13.8V / 8 = 1.725 * 256 / 2.048 = 216

unsigned char       timer1=0;        // running time in 800 uSec steps
int                 ADCresult;        // was unsigned

unsigned long       Period, PulseWidth;     // PWM period, pulse width in nSec
unsigned            Numerator;

void                SetupADC(void);
void                SetupPWM(void);
void                SetPWM(int DC);
void                Initialize(void);

void    interrupt   HighIntCode()    // for XC8 compiler
    {
    if( INTCONbits.TMR0IF ) {            // 4 uSec update of TMR1, 250 = 1 mSec (FF08), 2500 = 10 mSec => F63C+0x0A = F646
    if( ADCresult < ADCMIN )
            LATAbits.LATA2 = 0;        // Green LED ON
    else if( ADCresult > ADCMAX )
            LATAbits.LATA2 = 1;        // Red LED ON
    else
            LATAbits.LATA2 ^= 1;    // Red/Green LEDs flash
        ConvertADC;                 // 1000/sec
    INTCONbits.TMR0IF = 0;
        }
    else if(PIR1bits.ADIF && !BusyADC ) {
        ADCresult = ADRESH;
    PIR1bits.ADIF = 0;
    }
    else if(PIR1bits.CCP1IF) {
    PIR1bits.CCP1IF = 0;
    }
    }

int main(int argc, char** argv) {
    Initialize();
    SetupADC();
    SetupPWM();
    SetPWM(50);

    while(1) {
        asm("clrwdt");
    };
}

void    Initialize(void)    {
    OSCCON = OSCCONSET;
    OPTION_REG = OPTIONSET;
    INTCON = INTCONSET;
    TRISA = TRISASET;
    TRISC = TRISCSET;
//    T1CON = T1CONSET;
//    PR2 = 49;                  // 1 MHz/4/5 = 50 KHz, / 500 = 1 kHz
//    PIE1bits.TMR1IE = 1;
//    T1CONbits.TMR1ON = 1;
    INTCONbits.PEIE = 1;    //Turn on Peripheral Interrupts
    INTCONbits.GIE = 1;        //Turn on Global Interrupts
}

void    SetupADC(void)    {
    ADCON0 = ADCON0SET;
    ADCON1 = ADCON1SET;
    ANSELA = ANSELASET;
    FVRCON = FVRCONSET;
    PIE1bits.ADIE = 1;        //Use ADC Interrupt
    PIR1bits.ADIF = 0;
}


/****************************** Setup PWM - Uses TMR2, T2CON **************************/
void    SetupPWM(void)    {
    PWM1CON = PWM1SET;
    TRISC |= 0b00110000;           // disable output
// Period should be (14+1)*4*1*16 = 960 uSec = 240 cycles
// Pulse width should be 40*16 = 640 uSec = 160 Cycles
// Duty cycle should be 40/60 = 67%
    PR2 = 199;            // 16*4*15=960 uSec, 16*4*16=1024 uSec
    CCP1CON = CCP1SET;           
    CCPR1L = 10;                // Pulse width = 40*16=640/960 = 67%
    // Duty cycle = (CCPR2L + CCP2CON<4:5>) / 4*(PR4+1)
    // Duty cycle = 10*4 /4*15 = 40/60
    // Period = (PRx+1)*4*Tosc*TMRxPS
    // 16 MHz clock 20 kHz PWM
    // 20000 = (PR+1)*4*PS/fOsc;
    // PS = 1
    // PR+1 = fOsc/4*PS*fPWM = 16000/80 = 200; PR = 199
    T2CON = T2CONSET;                // <6:3> Postscale 1, <0:1> Prescale 1
    T2CONbits.TMR2ON = 1;
//    PIE1bits.CCP1IE = 1;
//    PIR1bits.CCP1IF = 0;
    PSTR1CON = PSTR1SET;
//    APFCONbits.CCP1SEL = 1;         // CCP1SEL 0=RA2, 1=RA5
    TRISC &= 0b11001111;           // enable output
}


void    SetPWM(int DC)  {   // Duty Cycle DC 0 to 100%
//    unsigned long     Period, PulseWidth;     // PWM period, pulse width in nSec
//    unsigned        Numerator;
    Period = (PR2+1)*4*PS;
    Period *= CLKPER;     //nSec
    PulseWidth = DC * Period / 100;
    Numerator = 4*(PR2+1)*DC; //4*PulseWidth / (4*(PR2+1));
    Numerator /= 100;
    CCP1CONbits.DC1B = Numerator & 0b00000011;
    CCPR1L = Numerator >> 2;
}
 

·
Registered
Joined
·
3 Posts
As I took help from you, I feel, I should bring something to your attention in the electronics.
The OpAmp you used is not that precise. You can consider InstAmp such as AD623 or little bit precise OpAmp such as MCP6V02 (dual OpAmp) or LTC1049. Or if you use ACS.... ICs, the amplifier circuits are already built-in, you don't need those amplifier circuits.

In the output, as the the current will oscillate, you do not need any IC at all. You can use a current sensing transformer which would reduce the cost and complications.
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #15
The LM358 was just a generic component in my parts library. I would probably use a more modern OPA2170 or similar. I am now building a prototype using full bridge topology and I will probably use a comparator on the PIC to detect and act on a high overcurrent condition. This won't need an amplifier for the 0.01 ohm sense resistor with 200 mV at 20 amps - I'll set the threshold about 300 mV. The final version will likely have various changes, but for now I just want a way to test the transformer at close to full load.

Thanks for the observations and suggestions. :)
 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #16 (Edited)
Here is an updated schematic for the design using a full-bridge configuration:



I connected it to the transformer I made using an EE55 N27 ferrite core, with four primary windings of three turns each, and a secondary of 30 turns, using Litz wire. The full primary of 12 turns has an inductance of 1.94 mH, Q=192, and the secondary of 30 turns is 12.63 mH. Leakage current at the primary is 7.7 uH, or about 0.4% (coupling factor 0.996). The primary is 0.37 ohms at 100 Hz and 0.65 ohms at 10 kHz. The secondary is 0.25 ohms at 100 Hz and 1.65 ohms at 10 kHz. Reverse leakage inductance is 48.7 uH or 0.38%, which is consistent.



Here is the output waveform with 20 volts input, and no load, with a drive waveform of 100 kHz with dead time delay of 1.75 uSec:



The output waveform looks like this:



With 10k load:



With 1500 ohm load:



I found that when I increased the input voltage over about 30 VDC the waveform became a sequence of pulses and no output. I think it may be the small 470 nF capacitor on the input or the current limit of the power supply briefly dropping the voltage and causing the PIC to reset.

Here is the prototype:



 

·
Registered
Joined
·
3,141 Posts
Discussion Starter #17 (Edited)
I discovered that the problem was the LM317HVH regulator overheating and temperature cycling. It is in a TO-39 metal can package, and it draws about 75 mA. Doesn't sound like much, but with 40 volts in and 15 volts out, that is 1.87 watts. I put a 180 ohm resistor in series which dissipates about 1 watt, and I made a heat sink using a coil of bare #16 copper wire. Now I can run the circuit up to 48V. Here are some waveforms:

With the lower duty cycle drive at 45V and 1500 ohm load:



With only 250 nSec dead time, at 22.5 VDC input:



This was for 40V input:

 

·
Registered
Joined
·
736 Posts
PSTechPaul said:
With the lower duty cycle drive at 45V and 1500 ohm load:

Seems that ZVS is within reach. The sinusoidal shaped part of the voltage goes to roughly to 2/3 of the full swing. I guess 0,5mm air gap should be enough. It should also get rid of the ringing at full swing.

How about multiple strands of 0.4mm (max diameter 100kHz, skin effect) triple insulated wire on the transformer? Complies with safety standards AFAIK.

Just my 2p thoughts seeing the pictures.
 
1 - 18 of 18 Posts
Top