ArturKon Napisano Luty 11, 2019 Udostępnij Napisano Luty 11, 2019 Cześć, montuję układ za pomocą Arduino + L293D. Do tego podłączam 2 silniki DC 3-6V. Aktualnie układ do silników posiada zewnętrzne zasilanie z koszyczka 4 x 1.5V. Arduino w tej fazie zasilam z USB podczas testowania projektu. Mój problem polega na tym, że chcę użyć pinów ENABLE 1 oraz ENABLE 2 do sterowania napięciem wyjściowym do silników. używam do tego pinów 5 (ENABLE 1) i 6 (ENABLE 2) + 4 pinów I/O: int circuitOneEnablePin = 5; // PWM pin int circuitOneInput1Pin = 2; // HIGH/LOW pin int circuitOneInput2Pin = 4; // HIGH/LOW pin int circuitTwoEnablePin = 6; // PWM pin int circuitTwoInput3Pin = 12; // HIGH/LOW pin int circuitTwoInput4Pin = 13; // HIGH/LOW pin Napisałem prosty program do testowania, który co 50 ms zmienia mi wartość PWM co 1 w przedziale 0-255 i po przekroczeniu przedziału silniki zmieniają kierunek prądu: delay(50); if (debugPwmInc) { if (debugPwm < 255) { debugPwm++; } else { debugPwmInc = false; } } else { if (debugPwm > 0) { debugPwm--; } else { debugPwmInc = true; debugMotorInverted = !debugMotorInverted; } } Następnie oba silniczki ustawiam identycznie, czyli oba silniczki chodzą w tym samym kierunku i z tym samym wypełnieniem PWM: // circuit DEBUG digitalWrite(circuitOneInput1Pin, debugMotorInverted ? LOW : HIGH); digitalWrite(circuitOneInput2Pin, debugMotorInverted ? HIGH : LOW); analogWrite(circuitOneEnablePin, debugPwm); digitalWrite(circuitTwoInput3Pin, debugMotorInverted ? LOW : HIGH); digitalWrite(circuitTwoInput4Pin, debugMotorInverted ? HIGH : LOW); analogWrite(circuitTwoEnablePin, debugPwm); Efekt tego jest taki, że silniczek pod INPUT 1/2 i ENABLE 1 dziala bez zarzutu, prędkość obrotowa zmienia się zgodnie z podaną wartością PWM oraz silniczek kręci się w odpowiednim kierunku. Podczas pomiaru napięcia na OUTPUT1/2 widzę zmianę wartości napięcia z 6V do 0V następnie do -6V i tak w kółko. Problem występuje z układem pod INPUT 3/4 i ENABLE 2. Wartość napięcia wyjściowego jest non stop 6V i zmienia się tylko wtedy, gdy zmienia się kierunek prądu (z + na - na mierniku). Tak jakby w ogóle ten ENABLE 2 nie działał i nie wypływał na napięcie dla drugiego silnika. Dodam tez, że układ ten zmontowałem jakiś czas temu. Następnie rozmontowałem go całkowicie i złożyłem ponownie, wykorzystując dla testów jednak INPUT1/2 i 3/4 jako PWM (widziałem, że niektórzy też tak robią) i tym sterowałem napięcie - działało bez zarzutu, ale niestety potrzebuję do mojego układu poza silniczkami pozostałe 4 piny PWM, więc na silniczki mogę wykorzystać tylko 2 (5 i 6). Złożyłem więc z powrotem układ z wykorzystaniem ENABLE 1 i 2 i problem jest ten sam co na początku. Czy ktoś spotkał się z takim przypadkiem, że ENABLE 1 działał poprawnie, zaś ENABLE 2 nie? Dodam, że mam kilka L293D i wymieniałem go w układzie myśląc, że może się spalił, niestety pudło.
Treker (Damian Szymański) Luty 12, 2019 Udostępnij Luty 12, 2019 @ArturKon, witam na forum Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start: Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników. Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć? Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości. Dnia 11.02.2019 o 20:09, ArturKon napisał: Problem występuje z układem pod INPUT 3/4 i ENABLE 2. Wartość napięcia wyjściowego jest non stop 6V i zmienia się tylko wtedy, gdy zmienia się kierunek prądu (z + na - na mierniku). Tak jakby w ogóle ten ENABLE 2 nie działał i nie wypływał na napięcie dla drugiego silnika. Pokaż cały program, bo takie pokazywanie kawałków utrudnia znalezienie błędu. Twój problem może leżeć w zupełnie innym miejscu np. jakaś inna biblioteka może blokować wykorzystanie PWM na danym pinie.
ArturKon Luty 12, 2019 Autor tematu Udostępnij Luty 12, 2019 (edytowany) Witaj Treker, dziękuję za ciepłe przyjęcie. Rozłączyłem wszystko, podłączyłem tylko i wyłącznie część układu odpowiedzialną za drugi obieg w L293D (INPUT 3/4 + ENABLE 2). Napisałem też nowy program (poniżej cały kod): ///// simple PWM L293D tester const int PIN_INPUT_A = 12; const int PIN_INPUT_B = 13; const int PIN_ENABLE_PWM = 6; const int DELAY_LENGTH = 4000; void setup() { // put your setup code here, to run once: pinMode(PIN_INPUT_A, OUTPUT); pinMode(PIN_INPUT_B, OUTPUT); pinMode(PIN_ENABLE_PWM, OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: // LEFT - HALF POWER engineDirection(PIN_INPUT_A, PIN_INPUT_B, 'L'); writePwm(PIN_ENABLE_PWM, 128); Serial.println("L - 128"); delay(DELAY_LENGTH); // LEFT - FULL POWER engineDirection(PIN_INPUT_A, PIN_INPUT_B, 'L'); writePwm(PIN_ENABLE_PWM, 255); Serial.println("L - 255"); delay(DELAY_LENGTH); // STOP engineDirection(PIN_INPUT_A, PIN_INPUT_B, 'S'); writePwm(PIN_ENABLE_PWM, 0); Serial.println("S"); delay(DELAY_LENGTH); // RIGHT - HALF POWER engineDirection(PIN_INPUT_A, PIN_INPUT_B, 'R'); writePwm(PIN_ENABLE_PWM, 128); Serial.println("R - 128"); delay(DELAY_LENGTH); // RIGHT - FULL POWER engineDirection(PIN_INPUT_A, PIN_INPUT_B, 'R'); writePwm(PIN_ENABLE_PWM, 255); Serial.println("R - 255"); delay(DELAY_LENGTH); // STOP engineDirection(PIN_INPUT_A, PIN_INPUT_B, 'S'); writePwm(PIN_ENABLE_PWM, 0); Serial.println("S"); delay(DELAY_LENGTH); } void writePwm(int pin_pwm, int value) { analogWrite(pin_pwm, value); } void engineDirection(int pin_a, int pin_b, char direction) { switch (direction) { case 'L': digitalWrite(pin_a, HIGH); digitalWrite(pin_b, LOW); break; case 'R': digitalWrite(pin_a, LOW); digitalWrite(pin_b, HIGH); break; default: digitalWrite(pin_a, LOW); digitalWrite(pin_b, LOW); break; } } Efekt ten sam: niezależnie czy podaję na PIN ENABLE '128' czy '255' - napięcie wyjściowe jest to samo. Co najciekawsze, jeśli przepnę te przewody pod pierwszy obieg L293D (INPUT 1/2 + ENABLE 1) wszystko działa poprawnie. Edytowano Luty 12, 2019 przez ArturKon
Treker (Damian Szymański) Luty 13, 2019 Udostępnij Luty 13, 2019 @ArturKon spróbuj całkiem wyrzucić mostek i podłącz do tych PWM zwykłe diody świecące. Zobacz czy zmiana wypełnienia PWM w programie wpływa na jasność świecenia diod. Pamiętaj tylko o rezystorach przy diodach Wykluczymy wtedy uszkodzenie Arduino.
ArturKon Luty 13, 2019 Autor tematu Udostępnij Luty 13, 2019 Sprawdziłem użycie pinu 6 w połączeniu z diodą. PWM bezproblemowo steruje napięciem na diodzie.
Treker (Damian Szymański) Luty 13, 2019 Udostępnij Luty 13, 2019 @ArturKon wychodzi na to, że w takim razie jakoś uszkodziłeś mostek H - mało prawdopodobne, ale możliwe
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »