PDA

View Full Version : peak and hold fuel injector driver



mrhrholden
- 1st October 2008, 04:50
Hi i am new to pic programming and i am wanting to make a PIC16f84A peak and hold injector driver circuit.
The injectors are .7ohm @ 12volts .7/12=17.14amps this current it too great. it only needs to saturate the injector for 500us and then osilate 5k-10k 50% duty for current limiting.
The Peak and Hold current look like this 17amp for 500us then 8amps
we need to current limit as the injector over heat with 17amp full saturation.

I am using PortA as 4 inputs and PortB as 4 Outputs.
But i need the pic16f84 to trigger the mosfet like this, Peak switch on for 500us then pwm 5k-10k hertz 50% duty for current limiting.
and when the signal is removed from input Port A input the output PortB must switch off and then wait for another input signal. all 4 Inputs and Outputs must be separate from each other.

any help will be much apreciated
thank you
Mark

mackrackit
- 1st October 2008, 09:08
Welcome to the forum.


Hi i am new to pic programming
OK, the first thing you need to do is get some LEDs. Hook them up as outputs and make them bkink. Got to start somewhere.

Then we will take a look at PWM.


all 4 Inputs and Outputs must be separate from each other.
That is the trick. You will want a PIC with hardware PWM. Not sure if there is one with four channels.

Melanie
- 1st October 2008, 09:34
You could share a single PWM and use an external AND gate for each channel, but even with the best will in the world, monitoring 4 channels, you could easilly get upto a 20uS Delay using a PIC - this could affect your engine timing significantly. Dump the PIC. You could do this with a splattering of discrete logic far better with nanosecond accuracy.

mrhrholden
- 1st October 2008, 12:37
Hi Dave i have all ready got a program setup that when you press a input button on portA it lights up an led on the output portB.

just need to do some peak and hold in the middle there thats what i am not to shure on.

Hi Melanie in a engine things happen pretty slow compared to electronics the pulse coming out of the Engine managment computer into the Injector driver box. When the engine is idling the ECU output is 1ms earth pulse and when the engines at 8000rpm it has a 8ms earth pulse, The milli second time is how long the injector is open for.


Melanie i am very keen about you idea or using discrete logic components for nanosecond timing. Could you maybe point me in the right direction with a diagram o somthing? that would be much apreaciated

Thank you

Mark

Acetronics2
- 1st October 2008, 13:06
Hi,

I Really believe our Friend Skimask is the best here for injectors driving ...

his realizations have already reached top levels ...

Alain

mackrackit
- 1st October 2008, 13:26
Mark,
At least you have a start. By your first post I figured you have not done anything yet and was wanting to start big. My apologies.

Alan is correct, skimask is the best solution to this problem.

mrhrholden
- 1st October 2008, 13:39
whats is skimask or is this a persons name on this forum? or somthing?

skimask
- 1st October 2008, 13:41
I Really believe our Friend Skimask is the best here for injectors driving ...

Thanks for the vote, but I'm all with Melanie on this one.
Use some ready made injector driver chips. They've already been road proven, road tested, and so on and so on. Did I mention they're already made? :)
Can't think of any off the top of my head, but they are all over out there.

mackrackit
- 1st October 2008, 13:41
whats is skimask or is this a persons name on this forum? or somthing?

That is a good question :D

skimask
- 1st October 2008, 13:42
That is a good question :D
mmmmmwwwwhaaahaaahaaaa!

LM1949 is one good one I just thought of.

mrhrholden
- 1st October 2008, 14:18
Hi Skimask

well i have already looked at the lm1949 and it will only peak and holds 8amps 1.5amps thats why i haven't gone down that track.

my injectors are .7ohm impedance and @ 12volts they pull 17amps saturated this is the reason we are making the injector drive as the Haltech E11V2 dosn't have the grunt to operate the injectors correctly its only 5amps /1.2amps even run them on a 8amp saturated and engine miss fires



Thank you mark

skimask
- 1st October 2008, 14:28
Hi Skimask
well i have already looked at the lm1949 and it will only peak and holds 8amps 1.5amps thats why i haven't gone down that track.
my injectors are .7ohm impedance and @ 12volts they pull 17amps saturated this is the reason we are making the injector drive as the Haltech E11V2 dosn't have the grunt to operate the injectors correctly its only 5amps /1.2amps even run them on a 8amp saturated and engine miss fires
Thank you mark

That's .7 ohm IMPEDANCE, not resistance. While it's basically the same thing, it's not really the 'same thing'.
As far as your original post about using the 16F84A to do this...there are much better ways. The ol' 16F84A, while it was the shiznit back in it's day and is still very useful, is wayyy outdated these days and has been superceded more than a few times.
Get a faster PIC, an 18Fxxx that'll run 40Mhz vs. 10Mhz. At least then you have the possibility of sub-microsecond accuracy (not saying you'll get it, but the possibility is there).
Get a PIC with multiple PWM outputs. There's a few out there. Use the parametric search function at www.microchip.com
And as I said before, use a REAL injector driver. National, Motorola, not sure about Microchip itself, Linear. They're out there. I'm not at the house, don't have access to my good notes for this info.

mrhrholden
- 1st October 2008, 14:38
thank you for you information will have a look for some discrete components and also look at the bigger pic18f with PWM

please let me know if you find some part numbers on some discrete's

Thank you
Mark

LinkMTech
- 5th October 2008, 17:01
Hey Mark,
There's a great satisfaction in making your own device. One that suits your needs when what's available just won't cut it. And even when there is one out there, the cost can sometimes prohibit just playing around with for the sake of curiosity. Besides, how else will we learn to improve our craft if we are just consumers? Anyways...
I ran into the same problems on two different projects that I hope might help a little.
1. I needed to monitor and control a four cylinder which would have overlapping inputs at 14K RPM. Since this meant having to treat each input individually, I just used four PIC's and all programmed at the same time. I know there's a better way of doing it but I'm just learning and using Darrel's Instant Interrupt technique is just way over my head for now.
2. A simple PWM driver. Here's a small program I use to drive a 24V/24A relay bank. Just replace PAUSE with PAUSES for micro second increments instead. And PIC type of course.


'************************************************* ***************
'* Name : HEXFET PWM driver Rev2.BAS *

'* Date : 8/18/2008 *
'* Version : 2.0 *
'* Notes : This routine uses the PIC16F688 to monitor all of *
'" : PORTA inputs and will mirror PWM PORTC outputs by *
'" : a 5ms Power Pulse followed with a 500Hz, 50%dt *
'" : pulse train. This circuit was required to drive a *
'" : solenoid with 24V at 24A without over heating the *
'" : HEXFET device. *
'************************************************* ***************
@ DEVICE PIC16F688, INTRC_OSC_NOCLKOUT
@ DEVICE PIC16F688, WDT_ON
@ DEVICE PIC16F688, PROTECT_OFF
@ DEVICE PIC16F688, MCLR_OFF
define OSC 8
OSCCON = %01110000 ' Oscillator set to 8MHz, bits 6-4
CMCON0 = 7 ' Analog comparators off
TRISA = %00111111 ' Sets all PORTA pins as inputs
TRISC = %00000000 ' Sets first 4 PORTC as inputs and 2 as outputs
ADCON0 = 0 ' A/D turned OFF
ANSEL = %00000000 ' All inputs made digital I/O

PORTC = $0 ' Turn off all outputs
Pause 100 ' Let's wait 100ms before starting

' This part of the routine will output the beginning of the pulse train
' with a 5ms power pulse to be followed with the rest of the hold pulses.
loop:
IF PORTA = $0 then goto loop ' Stay here when all inputs OFF
PORTC = PORTA ' Mirror outputs (active HIGH inputs)
PAUSE 5 ' Pulse starts with 5ms Power Pulse
PORTC = $0 ' Turn OFF outputs
PAUSE 1 ' Wait 1ms then continue with pulse train

' The rest of the pulse train here is 500Hz at 50%dt as long as the input
' remains active. It also monitors for a change at the inputs so that it
' will start over to include the new input with a Power Pulse too.
While PORTA <> $0 ' Do routine as long as input active
PORTC = PORTA ' Mirror outputs (active HIGH inputs)
Pause 1 ' Keep outputs ON for 1ms
PORTC = $0 ' Turn OFF outputs
PAUSE 1 ' Keep outputs OFF for 1ms
WEND ' Input inactive, leave routine
GOTO loop ' Start from beginning

END

If you haven't already, look into International Rectifier's list of N-CH HEXFETs, found at DigiKey, such as the IRFP4321 as an example. Just don't let the big capability numbers fool you. Look at the Maximum Safe Operating Area of its data sheet. This looks like 10A at DC but nearly 40A at 1ms pulses.
Good luck...

arniepj
- 5th October 2008, 23:48
Here's a link that might be of interest,its not a pic but has schematics and components.
http://www.bgsoflex.com/megasquirt.html

Macgman2000
- 6th October 2008, 04:01
There are other mcu's that you can use to do the precision timing. An SX chip (50 MIPS) bit banging with an interrupt can be used in conjunction with a PIC UART to update and control the SX . I am sure you have timing position sensors, feed those into the SX to trigger the next set of pulses. I have a brushless 3-Phase motor made up of the above mentioned, my motor spins at 30,000 rpm (variable speed) using zero crossing comparators for feedback.


Nick

mrhrholden
- 7th October 2008, 02:18
Hi linkmtech
Thanks for your info yeah that's just what i need. in my saturated driver i am using 60V 60AMP 60n06 n channel mosfet stp60nf06 man i have melted the winding in injectors with these mosfets when i had a problem with my driver it hung the injectors open and the mosfets didn't burn out they are real grunters!!!!!!!!

Thank you will let you know how it will all goes

Mark



Hey Mark,

There's a great satisfaction in making your own device. One that suits your needs when what's available just won't cut it. And even when there is one out there, the cost can sometimes prohibit just playing around with for the sake of curiosity. Besides, how else will we learn to improve our craft if we are just consumers? Anyways...
I ran into the same problems on two different projects that I hope might help a little.
1. I needed to monitor and control a four cylinder which would have overlapping inputs at 14K RPM. Since this meant having to treat each input individually, I just used four PIC's and all programmed at the same time. I know there's a better way of doing it but I'm just learning and using Darrel's Instant Interrupt technique is just way over my head for now.
2. A simple PWM driver. Here's a small program I use to drive a 24V/24A relay bank. Just replace PAUSE with PAUSES for micro second increments instead. And PIC type of course.


'************************************************* ***************
'* Name : HEXFET PWM driver Rev2.BAS *

'* Date : 8/18/2008 *
'* Version : 2.0 *
'* Notes : This routine uses the PIC16F688 to monitor all of *
'" : PORTA inputs and will mirror PWM PORTC outputs by *
'" : a 5ms Power Pulse followed with a 500Hz, 50%dt *
'" : pulse train. This circuit was required to drive a *
'" : solenoid with 24V at 24A without over heating the *
'" : HEXFET device. *
'************************************************* ***************
@ DEVICE PIC16F688, INTRC_OSC_NOCLKOUT
@ DEVICE PIC16F688, WDT_ON
@ DEVICE PIC16F688, PROTECT_OFF
@ DEVICE PIC16F688, MCLR_OFF
define OSC 8
OSCCON = %01110000 ' Oscillator set to 8MHz, bits 6-4
CMCON0 = 7 ' Analog comparators off
TRISA = %00111111 ' Sets all PORTA pins as inputs
TRISC = %00000000 ' Sets first 4 PORTC as inputs and 2 as outputs
ADCON0 = 0 ' A/D turned OFF
ANSEL = %00000000 ' All inputs made digital I/O

PORTC = $0 ' Turn off all outputs
Pause 100 ' Let's wait 100ms before starting

' This part of the routine will output the beginning of the pulse train
' with a 5ms power pulse to be followed with the rest of the hold pulses.
loop:
IF PORTA = $0 then goto loop ' Stay here when all inputs OFF
PORTC = PORTA ' Mirror outputs (active HIGH inputs)
PAUSE 5 ' Pulse starts with 5ms Power Pulse
PORTC = $0 ' Turn OFF outputs
PAUSE 1 ' Wait 1ms then continue with pulse train

' The rest of the pulse train here is 500Hz at 50%dt as long as the input
' remains active. It also monitors for a change at the inputs so that it
' will start over to include the new input with a Power Pulse too.
While PORTA <> $0 ' Do routine as long as input active
PORTC = PORTA ' Mirror outputs (active HIGH inputs)
Pause 1 ' Keep outputs ON for 1ms
PORTC = $0 ' Turn OFF outputs
PAUSE 1 ' Keep outputs OFF for 1ms
WEND ' Input inactive, leave routine
GOTO loop ' Start from beginning

END

If you haven't already, look into International Rectifier's list of N-CH HEXFETs, found at DigiKey, such as the IRFP4321 as an example. Just don't let the big capability numbers fool you. Look at the Maximum Safe Operating Area of its data sheet. This looks like 10A at DC but nearly 40A at 1ms pulses.
Good luck...