View previous topic :: View next topic |
Author |
Message |
Favalito
Joined: 08 Nov 2010 Posts: 6
|
H bridge Problem |
Posted: Mon Nov 08, 2010 4:32 pm |
|
|
Hi, I made a H bridge, but apparently I have a problem with the code control h bridge has 2 inputs and management control with a 16F628, but in switching mosfets engines burn, here the diagram and the code.
Thanks.
Code: |
#include <16F628A.h>
#fuses XT,NOMCLR
#use delay(clock = 4000000)
int1 b1=0;
int1 b2=0;
int1 b3=0;
void main()
{
set_tris_b(0b00110000);
output_low(PIN_b1);
output_low(PIN_b2);
output_low(PIN_B3);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_1,50, 1);
while(true){
pri:
if (input(PIN_B4)==0 && input(PIN_B5)!=0) {
if (b1==0){ set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
b1=1;
b2=0;
b3=0;
delay_ms(300);}
set_pwm1_duty(0);
output_high(PIN_B1);
if (input(PIN_B4)==0 && input(PIN_B5)!=0)goto pri;
else { set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(500);
set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(200);}
}
if (input(PIN_B4)!=0 && input(PIN_B5)==0) {
if (b2==0){ set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
b1=0;
b2=1;
b3=0;
delay_ms(300);}
set_pwm1_duty(50);
output_low(PIN_B1);
if (input(PIN_B4)!=0 && input(PIN_B5)==0) Goto pri;
else { set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(500);
set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(200);}
}
if (input(PIN_B4)!=0 && input(PIN_B5)!=0) {
if (b3==0){ set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
b1=0;
b2=0;
b3=1;
delay_ms(300);}
set_pwm1_duty(40);
output_low(PIN_B1);
if (input(PIN_B4)!=0 && input(PIN_B5)!=0)goto pri;
else { set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(500);
set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(200);}
}
set_pwm1_duty(0);
output_low(PIN_B1);
output_low(PIN_B3);
delay_ms(200);
}
} |
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9229 Location: Greensville,Ontario
|
|
Posted: Mon Nov 08, 2010 5:21 pm |
|
|
If it was me..I'd checkout the hardware first without the PIC.
Simply put a couple LEDs(one red, one green) back to back ,with current limiting resistors as the 'motor'.Add a couple of pulldown resistors to the transistor drivers to ensure they are OFF unless YOU pull them high!.
Now turn one on(pulled high with 10Kr) and see which LED lights. Repeat for the other driver transistor(other LED should light.
If this simple test fails, you have a hardware problem and MUST be fixed berfore connecting the PIC.
When it works THEN program the PIC with similar logic without the PWM code. A simple press button A turns on red LED, press button b turns on green LED type code...
After all that you should be able to carry on......
hope this helps |
|
|
Favalito
Joined: 08 Nov 2010 Posts: 6
|
|
Posted: Mon Nov 08, 2010 5:57 pm |
|
|
Quote: |
If it was me..I'd checkout the hardware first without the PIC.
Simply put a couple LEDs(one red, one green) back to back ,with current limiting resistors as the 'motor'.Add a couple of pulldown resistors to the transistor drivers to ensure they are OFF unless YOU pull them high!.
Now turn one on(pulled high with 10Kr) and see which LED lights. Repeat for the other driver transistor(other LED should light.
If this simple test fails, you have a hardware problem and MUST be fixed berfore connecting the PIC.
When it works THEN program the PIC with similar logic without the PWM code. A simple press button A turns on red LED, press button b turns on green LED type code...
After all that you should be able to carry on......
|
hi, thanks for replying, I did the test without the pic testing and everything works fine, actions 5v each entrance to the bridge and it works fine, so I say that the problem is the program, but not where the problem is.
Greetings |
|
|
pmuldoon
Joined: 26 Sep 2003 Posts: 218 Location: Northern Indiana
|
|
Posted: Mon Nov 08, 2010 6:01 pm |
|
|
Good thoughts, Temtronic.
You also might disconnect your motor ckt and just look at the two drive lines coming out of the PIC with a scope. It sounds like they may be overlapping. Sometimes a trusty scope is faster than trying to find a bug in code.
Also may want a solid pulldown on the transistor inputs since the PIC lines float until TRIS'd. |
|
|
pmuldoon
Joined: 26 Sep 2003 Posts: 218 Location: Northern Indiana
|
|
Posted: Mon Nov 08, 2010 6:20 pm |
|
|
Okay humor me, I'm a little slow sometimes.
Question 1: Are you driving your circuit with PIN_B1 and PIN_B3?
Question 2: Are you using PIN_B3 as a PWM output (switching hi/lo)?
Question 3: If 1 and 2 are true, won't running the PWM with PIN_B1 high turn on all 4 bridge transistors? |
|
|
Favalito
Joined: 08 Nov 2010 Posts: 6
|
|
Posted: Mon Nov 08, 2010 6:38 pm |
|
|
Quote: |
Okay humor me, I'm a little slow sometimes.
Question 1: Are you driving your circuit with PIN_B1 and PIN_B3?
Question 2: Are you using PIN_B3 as a PWM output (switching hi/lo)?
Question 3: If 1 and 2 are true, won't running the PWM with PIN_B1 high turn on all 4 bridge transistors? |
hi pmuldoon tks for reply, for questions 1, 2 and 3: yes, yes, no.
Pic probe outputs with LEDs and all apparently working as it should, but when connected, the fuse blows.
For example, with 5 v activating a rotation repeatedly this works fine, but when done with the pic, the fuse blows. Very strange, so I think that is a matter of time, do not know.
Greetings |
|
|
Douglas Kennedy
Joined: 07 Sep 2003 Posts: 755 Location: Florida
|
|
Posted: Mon Nov 08, 2010 6:49 pm |
|
|
The gates on the high side have to have enough voltage to turn on. Unlike the low side this voltage is not referenced to ground. Often a high side driver is needed to get the FET fully turned on. Also watch for any possibility the gates are on and create a short . |
|
|
pmuldoon
Joined: 26 Sep 2003 Posts: 218 Location: Northern Indiana
|
|
Posted: Mon Nov 08, 2010 6:55 pm |
|
|
How is your PIC connected to your circuit?
Is the Vcc that feeds the motors the same 5v that is supplying the PIC?
The PIC would not like the motor/pwm noise on it's supply line.
Are the PIC lines B1 -> J1P1 and B3 -> J1P2?
Have you tried connecting only one of the motor lines to the PIC and grounding the other? That should drive the motor without the chance of blowing anything up. And it will prove your code is running (not being reset by noise) and at least kind of working.
I'm still not seeing how you could ever take B1 high and PWM B3 without blowing up your drivers. Is the PWM intended for one direction only? |
|
|
pmuldoon
Joined: 26 Sep 2003 Posts: 218 Location: Northern Indiana
|
|
Posted: Mon Nov 08, 2010 7:00 pm |
|
|
Yeah, what Doug said.
I was assuming the other connector was to a higher voltage source.
(hmmm. misguided electrons and goto's. this could be a long thread, eh Mr. Kennedy?) |
|
|
pmuldoon
Joined: 26 Sep 2003 Posts: 218 Location: Northern Indiana
|
|
Posted: Mon Nov 08, 2010 7:06 pm |
|
|
I would also start the code over with something very simple (like what TEM said earlier). Forget about the PWM stuff and avoid the goto's.
also, you do realize that when you try to detect both buttons:
Code: | if (input(PIN_B4)!=0 && input(PIN_B5)!=0) |
since both buttons cannot be pressed at exactly the same time, one of the other IF's will launch first. |
|
|
Favalito
Joined: 08 Nov 2010 Posts: 6
|
|
Posted: Mon Nov 08, 2010 7:14 pm |
|
|
Quote: |
The gates on the high side have to have enough voltage to turn on. Unlike the low side this voltage is not referenced to ground. Often a high side driver is needed to get the FET fully turned on. Also watch for any possibility the gates are on and create a short . |
hi Douglas Kennedy, at the top of the schema can see the entrance of MC step-up converter 34063, with that offset the decline in tension with the N-channel mosfet upper H-bridge
As you say your door to check the short?
Quote: | How is your PIC connected to your circuit?
Is the Vcc that feeds the motors the same 5v that is supplying the PIC?
|
if this can be a big problem?
Quote: | Are the PIC lines B1 -> J1P1 and B3 -> J1P2?
Have you tried connecting only one of the motor lines to the PIC and grounding the other? That should drive the motor without the chance of blowing anything up. And it will prove your code is running (not being reset by noise) and at least kind of working.
|
now proves it
Quote: | I'm still not seeing how you could ever take B1 high and PWM B3 without blowing up your drivers. Is the PWM intended for one direction only? |
good thing I implement pwm to rotate slightly
Greetings. |
|
|
Favalito
Joined: 08 Nov 2010 Posts: 6
|
|
Posted: Mon Nov 08, 2010 7:20 pm |
|
|
Quote: | would also start the code over with something very simple (like what TEM said earlier). Forget about the PWM stuff and avoid the goto's.
|
ok, i probe.
Quote: |
also, you do realize that when you try to detect both buttons:
Code:
if (input(PIN_B4)!=0 && input(PIN_B5)!=0)
since both buttons cannot be pressed at exactly the same time, one of the other IF's will launch first. |
Tickets are not buttons, but another pic that receives an RF signal
greetings. |
|
|
pmuldoon
Joined: 26 Sep 2003 Posts: 218 Location: Northern Indiana
|
|
Posted: Mon Nov 08, 2010 7:40 pm |
|
|
Okay, I think your telling me that grounding one of the wires allowed the pic to drive the motor. That is good. I think if you rewrite the code in smaller steps, and test each step, you will get it running very soon.
Yes, it is bad to connect your PIC supply to the motor supply. The noise can cause the PIC to reset unexpectedly.
Make sure you run your PIC & Motor grounds and VCC SEPARATELY all the way back to the power supply.
Make sure you have a couple of capacitors across the PIC power pins. Something like a 1uF Alum and a 0.1uf Ceramic would be nice, to supress the noise.
Since you are driving transistors, you could probably even DIODE ISOLATE your PIC by putting a forward biased diode between the power supply and the PIC (and capacitors). It will reduce your PIC output voltage slightly, but it will keep the PIC from being starved for current when the motor turns on.
Also, you are reading the input pins individually - that takes time. Even from an RF board you could get unexpected states if the change-in-state happens between reads. Better to read the entire port at once and mask for the bits of interest. Better yet, read-mask then read-mask and don't do anything unless the two readings match.
Hope that helps some. |
|
|
Favalito
Joined: 08 Nov 2010 Posts: 6
|
|
Posted: Mon Nov 08, 2010 7:53 pm |
|
|
pmuldoon, prove all the recommendations you gave me.
Thank you very much and greetings. |
|
|
|