Ze starego skanera budujemy slider


Tomasz Bartuś



2019-07-30
Ze starego skanera budujemy slider

Wstęp

Skanery, które pod koniec lat 90. ubiegłego stulecia były bardzo popularnymi urządzeniami biurowymi, dzisiaj są zastępowane przez różne urządzenia wielofunkcyjne. Stare i niepotrzebne sprzęty często można znaleźć porzucone w punktach odbioru elektrośmieci. O ile ze zintegrowanych płytek elektroniki (poza przetwornicami zasilającymi neonówki), raczej nie ma większego pożytku, o tyle warto się zainteresować występującymi w nich komponentami mechanicznymi. Znajdziemy tam silnik krokowy i gotowe układy trakcyjne z przekładniami, paskami zębatymi i prętami prowadnic. Z jednego z takich starych i nikomu niepotrzebnych urządzeń postanowiłm zrobić prosty slider fotograficzny (Fig. 1) - czyli urządzenie mechaniczne płynnie przesuwające przymocowaną kamerę wzdłuż jakiegoś odcinka.

Slider ze starego skanera
Fig. 1. Slider ze starego skanera

Części

W urządzeniu, które pozyskałem znajdował się silnik krokowy Mototech S35S5-6002 (Fig. 2).

Silnik krokowy Mototech S35S5-6002
Fig. 2. Silnik krokowy Mototech S35S5-6002

Silnik posiada 5 wyprowadzeń elektrycznych. Nie udało mi się znaleźć jego noty katalogowej. Aby poznać funkcje poszczególnych końcówek takiego nieznanego silnika, należy zmierzyć rezystancje pomiędzy jego wyprowadzeniami, a wyniki zapisać w tabeli prawdy (Tab. 1).

Tab. 1. Tabelka prawdy silnika Mototech S35S5-6002
pomarańczowy żółty czarny czerwony brązowy
pomarańczowy x 122Ω 122Ω 61Ω 122Ω
żółty 122Ω x 123Ω 61Ω 122Ω
czarny 123Ω 123Ω x 61Ω 122Ω
czerwony 61Ω 61Ω 61Ω x 61Ω
brązowy 122Ω 122Ω 122Ω 61Ω x

Rezystancje mierzone pomiędzy wszystkimi wyprowadzeniam, za wyjątkiem wyprowadzenia czerwonego wynosiły około 122Ω. Z kolei opory pomiędzy końcówką czerwoną a dowolną inną był o połowę niższy. Stąd wynika, że to unipolarny, 4-fazowy silnik krokowy (Fig. 3). Z informacji jakie udało się pozyskać wynika, że jego napięcie znamionowe wynosi 12V.

Schemat wyprowadzeń silnika krokowego Mototech S35S5-6002
Fig. 3. Schemat wyprowadzeń silnika krokowego Mototech S35S5-6002

Unipolarne silniki krokowe mają 5, 6 lub 8 wyprowadzeń (Fig. 4). Sterowanie nimi nie wymaga posiadania podwójnego mostka H (jak w przypadku silników bipolarnych). Zamiast tego, dla każdej cewki należy użyć tranzystora o wysokim wzmocnieniu (darlingtona) i diody rozładowującej (ang. flyback diode; Fig. 5). Wykorzystuje się ją aby zapobiec skokom napięcia, gdy zasilanie cewki jest wyłączone, a silnik krokowy chwilowo działa jak generator.

Rodzaje unipolarnych silników krokowych
Fig. 4. Rodzaje unipolarnych silników krokowych

Cewki silnika krokowego sterowane za pomocą tranzystorów darlingtona
Fig. 5. Cewki silnika krokowego sterowane za pomocą tranzystorów darlingtona

Sterowanie silnikami unipolarnymi polega na generowaniu przez układ mikrokontrolera impulsowych sygnałów, które poprzez tranzystory zasilają poszczególne cewki. Przepływ prądu przez cewkę w odpowiednim kierunku, zgodnie z regułą lewej dłoni generuje pole magnetyczne, które przyciąga rotor silnika powodując jego obrót. W kolejnych taktach działania mikrokontrolera, do odpowiednich cewek podawane są kolejno sygnały. W ten sposób utrzymuje się ruch obrotowy wirnika. Istnieją różne konfiguracje impulsów napędzających silniki. W prezentowanym przypadku biblioteka steper.h generuje cztery następujące kolejno po sobie ciągi sygnałów (Fig. 6, Tab. 2).

Sterowanie unipolarnym silnikiem krokowym w trybie dwufazowym
Fig. 6. Sterowanie unipolarnym silnikiem krokowym w trybie dwufazowym (Stepper motor (unipolar))
Tab. 2. Sygnały sterujące generowane przez mikrokontroler i podawane na cewki silnika unipolarnego w trybie dwufazowym (ruch wirnika zgodny z ruchem wskazówek zegara)
krok Cewka
LA LB LC LD
1 1 0 0 1
2 1 1 0 0
3 0 1 1 0
4 0 0 1 1

W praktyce, w urządzeniach sterujących unipolarnymi silnikami krokowymi zamiast pojedynczych tranzystorów darlingtona wykorzystuje się odpowiednie układy scalone. W prezentowanym urządzeniu, zastosowano układ ULN2003A (Fig. 7). ULN2003A to zestaw siedmiu tranzystorów NPN Darlingtona o mocy wyjściowej 500 mA i 50 V (każde wyjście). Wejścia układu są kompatybilne z logiką 5-woltową.

Schemat połączeniowy układu ULN2003A z silnikiem unipolarnym
Fig. 7. Schemat połączeniowy układu ULN2003A z silnikiem unipolarnym

Moduł sterownika ULN2003A

Gdy potrzebujemy sterować unipolarnymi silnikami krokowymi, wykorzystuje się gotowe moduły sterowników. Jest ich na rynku całe mnóstwo. Najczęściej wykorzystują one układy ULN2003A lub podobne. Sterownik, który będzie wykorzystywany w tym projekcie (Fig. 8) jest wyposażony w diody świecące wskazujące na to, która cewka jest w danej chwili zasilana. Moduł umożliwia zasilanie silników o napięciu znamionowym 5-12V.

Moduł sterownika unipolarnych silników krokowych ULN2003A
Fig. 8. Moduł sterownika unipolarnych silników krokowych ULN2003A

Moduł z Fig. 8 jest wyposażony w:

  • 7 wejść z sterujących (Int1-Int7),
  • 7 wyjść (A-G)
  • złącze silnika (białe) umożliwiające bezpośrednie podpięcie silników krokowych,
  • złącze zasilania VCC i GND z Arduino z jumperem umożliwiającym podłączenie diod LED (Fig. 7),

Schemat modułu przedstawia Fig. 9.

Schemat modułu sterownika unipolarnych silników krokowych ULN2003A
Fig. 9. Schemat modułu sterownika unipolarnych silników krokowych ULN2003A

Montaż układu

Układ będzie zasilany za pomocą pakietu trzech ogniw litowo-jonowych połączonych szeregowo o napięciu wyjściowym ok. 12,5V (Fig. 10). Sercem urządzenia będzie Arduino Nano. Aby zapewnić mikrokontrolerowi odpowiednie napięcie zasilania, dodatkowo zastosujemy przetwornicę step-down LM2596.

Schemat

Schemat montażowy slidera
Fig. 10. Schemat montażowy slidera

Do zbudowania układu będziemy potrzebowali:

Lista części

  1. platforma Arduino Nano,
  2. silnik krokowy Mototech S35S5-6002 (lub podobny)
  3. sterownik unipolarnych silników krokowych ULN2003E,
  4. przetwornica step-down LM2596 lub podobna,
  5. potencjometr,
  6. przełączniki krańcowe (2 sztuki),
  7. kondensator ceramiczny 100nF,
  8. kondensator elektrolityczny 220uF, 25V,
  9. płytka prototypowa,
  10. przewody/mostki,
  11. układ trakcji ze starego skanera (Fig. 11),

Odcięta część skanera
Fig. 11. Odcięta część skanera

Źródło zasilania podłączamy do górnej magistrali zasilającej płytki prototypowej. Aby zabezpieczyć układ przed skokami napięcia o niskich czestotliwościach, spowodowanymi zmianami obciążenia, równolegle do szyny zasilającej wpinamy kondensator elektrolityczny 220uF, 25V. Mikrokontroler wymaga zasilania napięciem 5V, dlatego, jak już wspomniano, dodatkowo wykorzystujemy przetwornicę LM2596. Jej wejście podłączamy do magistrali zasilającej 12,5V. Przetwornicę regulujemy potencjometrem aby dostarczała napięcie 5V. Wyjście przetwornicy podpinamy do dolnej magistrali zasilającej. Łączymy masy obu szyn zasilających. Piny VCC i GND mikrokontrolera podłączamy do magistrali zasilającej 5V. Możliwie blisko zacisków zasilających Arduino wpinamy kondensator ceramiczny 100nF. Będzie on filtrował zasilanie i zabezpieczał mikrokontroler przed niepożądanymi skokami napięcia o bardzo wysokiej częstotliwości. Wejścia VCC i GND sterownika silników krokowych ULN2003A podłączamy do magistrali zasilającej 12,5V. Wejścia IN1, IN2, IN3 i IN4 sterownika ULN2003A podłączamy odpowiednio do pinów cyfrowych 8, 9, 10 i 11 układu Arduino. Do wyjść A, B, C, D sterownika ULN2003A podpinamy silnik krokowy Mototech S35S5-6002. W przypadku zastosowania innych silników krokowych, jeżeli ich praca będzie nieprawidłowa, kolejność podłączanych cewek LA, LB, LC i LD należy dobrać eksperymentalnie. "+" zasilania silników krokowych podłączamy do magistrali zasilającej 12,5V. Upewnijmy się, że jumper "on/off" sterownika znajdujący się obok pinu "VCC" jest włożony. Zapewni to optyczną kontrolę sterowania cewkami za pomocą diod LED wbudowanych w sterownik. Do układu dodajemy potencjometr. Do jego skrajnych nóżek podłączamy 5V. Nóżkę środkową łączymy z pinem analogowym A6 Arduino. Ostatnimi urządzeniami wejściowymi, które dodamy do układu są dwa wyłączniki krańcowe. Zastosowano rozbiórkowe krańcówki ze starych napędów DVD (Fig. 12). Łączymy je równolegle. Naciśnięcie dowolnej przycisku będzie w programie wyzwalało zmianę kierunku obrotów silnika. Krańcówki podłączamy do pinu cyfrowego D2 Arduino. Przyciski nie wymagają zastosowania rezystorów podciągających. Zastosujemy podciąganie programowe.

Użyty przycisk krańcowy
Fig. 12. Użyty przycisk krańcowy

Zmontowany układ wraz z zastosowanym układem trakcji przedstawia Fig. 13.

Fig. 13. Zmontowany układ slidera

Działanie

Urządzenie będzie przesuwało kamerę ze stałą prędkością regulowaną potencjometrem. Po zwarciu styków dowolnego przełącznika krańcowego, mikrokontroler zmieni kierunek obrotów silnika, po czym wznowi jego pracę z wczesniej ustaloną prędkością obrotową. Slider będzie się więc poruszał w kółko w jedną, a potem w drugą stronę.

Kod

#include <Stepper.h>

#define stepsPerRevolution 32     // change this to the number of steps on your motor

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(stepsPerRevolution, 8, 9, 10, 11);

const int button =  2;            // direction control button is connected to Arduino pin 2
const int pot    = A7;            // speed control potentiometer is connected to analog pin A7

void setup() {
  Serial.begin(9600);
  pinMode(button, INPUT_PULLUP);  // configure button pin as input with internal pull up enabled
}

int direction_ = 1, speed_ = 0;
boolean flag = 0;                 // status of the limit switch (0 - off; 1 - on)
byte count = 0;                   // number of counts to change of the flag variable to the normal value = 0

void loop() {
  Serial.println(digitalRead(button));
  if (( digitalRead(button) == 0 ) && (flag == 0)) {  // if the limit switch is on and it is the 1'st moment of the pressing...
    direction_ *= -1;                                 // reverse direction variable
    flag = 1;                                         // change the flag variable to 1
  }

  if (( digitalRead(button) == 0 ) && (flag == 1)) {  // if the limit switch is on but it is not the 1'st moment of the pressing...
    count++;                                          // increment the count variable
    if (count > 20) {                                 // if the count variable > 20:
      flag = 0;                                       // change the flag variable to the normal value = 0
      count = 0;                                      // change the count variable to 0
    }
  }


  int val = analogRead(pot);                        // read analog value from the potentiometer
  // map digital value from [0, 1023] to [2, 500]
  //(min speed = 2 and max speed = 500 rpm)
  if ( speed_ != map(val, 0, 1023, 2, 500) ) {      // if the speed was changed
    speed_ = map(val, 0, 1023, 2, 500);
    stepper.setSpeed(speed_);                       // set the speed of the motor
  }
  stepper.step(direction_);                         // move the stepper motor
}

Film




Wykorzystane materiały

Arduino + Stepper (ULN2003A)
Stan, 2014. 28BYJ-48 Stepper Motor with ULN2003 driver and Arduino Uno
Silniki elektryczne: szczotkowe, bezszczotkowe, krokowe
Simple Projects, 2018. Arduino Unipolar Stepper Motor Control
Board Partner, 2017. Stepper motor (unipolar)
Sterowanie silnikami krokowymi
https://forum.arduino.cc/index.php?topic=584564.0 - zworki
https://www.youtube.com/watch?v=S42X_mZqj-8
 
 

Doktorat

Spis treści
Rozdzialy
Abstrakt [pl]
Abstract [eng]