Skocz do zawartości

ArturKon

Użytkownicy
  • Zawartość

    3
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O ArturKon

  • Ranga
    1/10
  1. Sprawdziłem użycie pinu 6 w połączeniu z diodą. PWM bezproblemowo steruje napięciem na diodzie.
  2. 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.
  3. 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.
×
×
  • Utwórz nowe...