Sari la conținut
ELFORUM - Forumul electronistilor

Tranzistoare pentru punte H


Vizitator Lucian1122

Postări Recomandate

  • Răspunsuri 33
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nico_2010

    8

  • sesebe

    6

  • Mircea

    3

  • kinderu56

    2

Top autori în acest subiect

Da, aceeasi categorie nici_2010. Păcat ca nu conduci tu masini cu electronica făcută de tine dupa regulile tale, am fi scăpat forumul de astfel de comentatori.( prin doua metode).

Link spre comentariu

@Lucian112: posteaza si softul (daca se poate). Este posibil sa fie vreo greseala neintentionata strecurata.

 

OFF_TOPIC

@sesebe: Este a doua oara cand scrii fara sa gandesti. Degeaba esti inconjurat de scule de valoare la serviciu daca esti incapabil sa citesti o foaie de catalog.

Daca poti da un sfat corect fa-o, daca nu, abtine-te.

Si se scrie nico_2010

Link spre comentariu

Bine ca tu stii.La fel bine ca dai si sfaturi foarte valoroase.Va fi permanent o diferenta între noi doi si ceea ce facem noi, in ce sens?!? las pe altii da decidă.Eu nu m- am legat niciodată de nici un post de al tau orientindu-ma dupa user/nume dar se pare ca tu ai o aversiune pe ceea ce postez eu si imi urmărești posturile. Iti recomand să-ti vezi de schemele tale super bazate si sa lasi pe altii în pace.

Link spre comentariu
Vizitator Lucian1122

@nico_2010 

#include <LiquidCrystal.h>LiquidCrystal lcd(7, 6, 5, 4, 3, 2);int Pin01=8;int Pin02=12;int pos=0;void setup(){   pinMode(10, OUTPUT);   pinMode(11, OUTPUT);  digitalWrite(10, HIGH);   digitalWrite(11, HIGH);  pinMode(Pin01,INPUT);  pinMode(Pin02,INPUT);  lcd.begin(16, 2);  lcd.print("Start LCD");}void loop(){   if(digitalRead(Pin01)==LOW){      digitalWrite(10, HIGH);  	  digitalWrite(11, LOW);      lcd.clear();      lcd.setCursor(0,0);      lcd.print("Spre dreapta");      delay(50);  }     if(digitalRead(Pin02)==LOW){      digitalWrite(10, LOW);   	  digitalWrite(11, HIGH);      lcd.clear();      lcd.setCursor(0,0);      lcd.print("Spre stanga");      delay(50);  }  	 digitalWrite(10, LOW);  	 digitalWrite(11, LOW);}
Link spre comentariu
Vizitator andreyfitza

Maxim 200 mA intre Vcc si GND, corect. II scoate fara probleme. Ca si chestie generala, in datasheet va fi intotdeauna valoarea maxima la care componenta va functiona normal. Ca o analogie, te poti uita in cartea autoturismului la viteza maxima constructiva si apoi il scoti pe autostrada si vezi ca poate mai mult doar ca o sa inceapa sa iti creasca temperatura motorului.

 

Codul nu merge pentru ca la fiecare loop tu pui 0V in poarta ambelor mosfeturi. Mai poti adauga un buton de stop eventual sau poti opri motorul prin apasarea simultana a celor doua butoane.

 

Pentru a face codul sa mearga, sterge ultimele doua instructiuni (Acelea unde setezi ambii pini pe LOW).

Editat de andreyfitza
Link spre comentariu

Lucian, diodele alea nu-s pentru "supracurenti". Oricum, sunt incluse in 99% din mosfetii actuali.In principiu, alege mosfeti cu Vds de 20-30V. Si cu Ciss cat mai mic, sute de pF.Se pot da detalii despre motor?@SSB, sunt ghiduri de calculat curentul necesar portii mosfetului ca sa comute suficient de repede.La 3-5V si cateva usec RT nu ai nevoie de prea mult curent. Asta ca sa punem capac polemicii daca se poate sau nu direct din iesirea uc.

Link spre comentariu

Astfel de probleme daca esti electronist se testeaza f simplu setand din soft pinii corespunzatori on/off ca sa conduca permanent o ramura a puntii si se poate masura ce si cum , daca poate merge calumea motorul in principiu ... nu era mare filozofie , asa ne scarpinam in cap daca o fi de la soft sau (si ) hard problema . Multa poveste si presupuneri fara sa se cunoasca exact cauza , ca de obicei .

Editat de Depanatoru
Link spre comentariu

Codul de mai jos nu este perfect, dar pentru inceput poate fi verificat:

#include <LiquidCrystal.h>LiquidCrystal lcd(7, 6, 5, 4, 3, 2);int Pin01 = 8;int Pin02 = 12;int pos = 0;int PWM_pin1 = 9;int PWM_pin2 =  10;int pulse_speed_left = 200;int pulse_speed_right = 50;int stop_pulse = 0;;void invertAnalogWrite(int pin, int value){  analogWrite(pin, value);  TCCR1A = TCCR1A & ~B00110000; //switch off output B  TCCR1A |= B00110000;  //switch on the B output with inverted output}void setup() {  pinMode(PWM_pin1, OUTPUT);  pinMode(PWM_pin2, OUTPUT);  digitalWrite(PWM_pin1, HIGH);  digitalWrite(PWM_pin2, HIGH);  pinMode(Pin01, INPUT_PULLUP);  pinMode(Pin02, INPUT_PULLUP);  lcd.begin(16, 2);  lcd.print("Start LCD");}void loop() {  if (digitalRead(Pin01) == LOW) {    digitalWrite(PWM_pin1, HIGH);    digitalWrite(PWM_pin2, HIGH);    TCCR1B = 0;    delay(500);    TCCR1B = 0x03;    analogWrite(PWM_pin1, pulse_speed_right);    invertAnalogWrite(PWM_pin2, pulse_speed_right);    lcd.clear();    lcd.setCursor(0, 0);    lcd.print("Spre dreapta");    delay(50);  }  if (digitalRead(Pin02) == LOW) {    digitalWrite(PWM_pin1, HIGH);    digitalWrite(PWM_pin2, HIGH);    TCCR1B = 0;    delay(500);    TCCR1B = 0x03;    analogWrite(PWM_pin1, pulse_speed_left);    invertAnalogWrite(PWM_pin2, pulse_speed_left);    lcd.clear();    lcd.setCursor(0, 0);    lcd.print("Spre stanga");    delay(50);  }  }

Si schema de principiu (fara floricele si fara pretentia de a fi aplicabila suta la suta). Valorile au fost trecute exclusiv in scop de testare a softului si vor fi adaptate functie de componentele existente.

 

forum_test.BMP

Link spre comentariu
Vizitator andreyfitza

Mi se pare ok codul lui nico_2010 cu o singura exceptie: In momentul in care verific unul dintre butoane daca este low, l-as verifica pe celalalt daca este high. Asa evit eventualele neplaceri si poate defectiuni in cazul apasarii simultane a butoanelor.

 

PS. Nu m-as fi complicat cu timmerii. :aplauze

Link spre comentariu

Trebuie sa te complici cu timerul, altfel apar tot soiul de minuni. Oricum, asa cum am mai spus, este o versiune didactica si in niciun caz perfecta.

Sunt curios daca userul Lucian112 a verificat si schema si codul si care au fost rezultatele.

Link spre comentariu
Vizitator Lucian1122

@andrefitza La final puneam pinii in 0V pentru ca motorul sa nu se mai invarta daca nu am nici un buton apasat. In caz contrar acesta continua sa functioneze pana cand apasam celalalt buton care ii comanda sensul opus si tot asa.

 

@thunderer Motorul de test functioneaza la 6V, totusi l-am conectat la placa la 3,3V sa vad daca totusi functioneaza (desi stiu ca nu este recomandata conectarea directa) si functiona corect.

 

@nico-2010 Iti multumesc ca ti-ai facut timp sa ma ajuti cu codul. Acum il tot citeam si incercam sa-l inteleg. Eu foloseam TCCR1B pentru a modifica frecventa pinului dorit. In orice caz tot nu imi functioneaza, citeste doar butoanele si afiseaza pe ecran spre dreapta/stanga dar motorul nu se invarte. Cred ca pana la urma trebuie sa il depanez din pin in pin cu un multimetru si sa vad ce se intampla.

 

Edit : daca eu tineam un sens cu valoare pozitiva si altul pe 0, tu ai pus unul cu valoare pozitiva si altul cu valoare negativa ?

Editat de Lucian1122
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări