W porównaniu ze standardowymi rozwiązaniami, płytka ma możliwość płynnego ustawiania ograniczenia prądu silnika, monitorowania bieżącej wartość prądu, regulacji PWM. Sygnały sterujące są zgodne ze standardem PWM/DIR, jest dostępny sygnał BRAKE wraz z wyborem sposobu (Fast/Slow). Zadziałanie zabezpieczenia przeciążeniowego silnika sygnalizowane jest przerwaniem. Piny portu analogowego zostały wyprowadzone na złącza SIP3, zgodne z Arduino Brick, co umożliwia łatwe dołączenie czujników współpracujących z silnikiem.
Schemat modułu pokazano na rysunku 1. Sercem AVTDuinoDCMotor jest U1, specjalizowany sterownik-driver L6206 firmy ST. Układ zawiera wszystkie niezbędne dla sterowania silnikiem obwody (rysunek 2): mostek H z tranzystorami MOSFET o małej Rdson, zintegrowaną przetwornicę podwyższającą napięcie dla bramek mostka H, niewymagający zewnętrznych elementów układ monitorowania prądu i detekcji przeciążenia, o możliwości ustawienia wartości progowej oraz układ logiki sterującej z zabezpieczeniami.
Napięcie zasilania silnika MVCC jest oddzielone od napięć sterujących i musi pochodzić ze źróła zewnętrznego. Napięcie MVCC, podawane poprzez złącze PWRM, zasila mostki H układu U1. Diody D1 i D2, kondensatory Cb i Cp oraz rezystor Rp są elementami przetwornicy napięcia niezbędnej dla prawidłowego sterowania „górnych” tranzystorów mostka. Do wyprowadzenia U1-SENSEA są dołączone „dolne” wyprowadzenia mostka H. Rezystory szeregowe RAS1...RAS4 umożliwiają pomiar prądu silnika. Sygnał jest dostępny na złączu CSA. Ze względu na traconą moc jest zbudowany z 4 rezystorów 1206/0,5 W. Rezystory RAS1…RAS4 mogą zostać zastąpione zworą, jeżeli nie potrzebujemy informacji o prądzie uzwojeń. Można je też pozostawić wlutowane, a zworę zakładać na złącze CSA zmniejszając w ten sposób moc rozpraszaną na płytce. Wewnętrzny pomiar prądu L6206, w porównaniu do starszych wersji, nie wymaga rezystora w obwodzie silnika. Wykorzystuje jeden z kilkunastu równolegle połączonych tranzystorów składających się na tranzystor mocy mostka H jako proporcjonalny czujnik prądu. Umożliwia to znaczące zredukowania mocy traconej i upraszcza układ. Wyprowadzenie PROGCLA umożliwia ustawienie progu zabezpieczenia przeciążeniowego silnika zgodnie z rysunkiem 3.
Do ustawienia dokładnej wartości prądu zabezpieczenia służy potencjometr RVA. Rezystor RCLA ustawia wstępnie maksymalny próg zadziałania. Zadziałanie zabezpieczenia przeciążeniowego jest sygnalizowane wyzerowaniem wyjścia (otwarty dren) OCDA wstępnie zasilanego przez rezystor RA1. Bramka AND (U2-1) buforuje sygnał przerwania OVCA, który poprzez przełącznik DIP SW2-2 jest doprowadzony do złącza IOL. Przerwanie może być „odłączone” SW2-2, jeśli nie będzie używane przez kontroler, „uwalniając” piny dla innych zastosowań. Sygnał przerwania OVCA poprzez bramkę U2-3 blokuje wysterowanie sygnałem PWM wejścia sterującego U1-ENA. Powoduje to wyłączenie mostka H przy przeciążeniu. Sterowanie silnikiem odbywa się przez sygnały kierunku DIRA, zezwolenia PWMA oraz hamowania BRKA (wszystkie sygnały aktywne na poziomie wysokim). Przełącznikiem SW-4 zadajemy sygnał BRA określający sposób hamowania silnika. Sygnały doprowadzone są do multipleksera U3-HC153 pełniącego funkcję transkodera. Funkcje realizowane przez U3 określa tabela 1.
Znaczenie sygnałów „B” i zasada działania dla drugiego silnika są identyczne. Złącza GNDA, VCCA, IAD umożliwiają wyprowadzenie sygnałów portu analogowego zgodnie z ArduinoBricks i mogą być wykorzystane do podłączenia współpracujących z silnikami czujników.
Przełącznik PWS umożliwia wybór napięcia zasilającego logikę pomiędzy 3,3 V, a 5 V zależnie od wymogów płytki bazowej. Złącze ISP jest opcjonalne, moduł nie wykorzystuje jego sygnałów, należy je wlutować, gdy zamierzamy „kanapkować” płytki rozszerzeń dla zachowania pełnej zgodności z Rev3 Arduino. Silniki i zasilanie doprowadzone są do płytki rozłączanym złączem śrubowym MC. Układ zmontowano na dwustronnej płytce drukowanej. Rozmieszczenie elementów pokazano na rysunku 4.
Montaż jest typowy i nie wymaga opisu. Bardzo istotne jest prawidłowe wlutowanie U1, a szczególnie padu termicznego, który ułatwia odprowadzenie ciepła. Poprawnie zmontowany układ nie wymaga uruchamiania. W celu przetestowania płytki przygotowałem program zamieszczony na listingu 1.
// AVTDuinoDCMotor TEST, Adam Tatus
// Kolejno dwa silniki w rewersie
#define PWMA 6
#define DIRA 7
#define BRKA 9
#define PWMB 5
#define DIRB 4
#define BRKB 8
byte LDT = 1000;
byte SDT = 10;
void setup() {
pinMode(PWMA, OUTPUT); digitalWrite(PWMA,0);
pinMode(PWMB, OUTPUT); digitalWrite(PWMB,0);
pinMode(DIRA, OUTPUT);
pinMode(DIRB, OUTPUT);
pinMode(BRKA, OUTPUT);
pinMode(BRKB, OUTPUT);
}
void loop() {
digitalWrite(DIRA,0); // A Right
digitalWrite(BRKA,0);
for (int i=0; i <= 255; i++){ // A PWR RUN
analogWrite(PWMA, i);
delay(SDT);
}
digitalWrite(BRKA,1); // A Brake
delay(LDT);
digitalWrite(DIRA,1); // A Left
digitalWrite(BRKA,0);
for (int i=0; i <= 255; i++){ // A PWR RUN
analogWrite(PWMA, i);
delay(SDT);
}
digitalWrite(BRKA,1);
digitalWrite(DIRA,0);
digitalWrite(PWMA,0); // A Stop
digitalWrite(DIRB,0); // B Right
digitalWrite(BRKB,0);
for (int i=0; i <= 255; i++){ // B PWR RUN
analogWrite(PWMB, i);
delay(SDT);
}
digitalWrite(BRKB,1); // B Brake
delay(LDT);
digitalWrite(DIRB,1); // B Left
digitalWrite(BRKB,0);
for (int i=0; i <= 255; i++){ // B PWR RUN
analogWrite(PWMB, i);
delay(SDT);
}
digitalWrite(BRKB,1);
digitalWrite(DIRB,0);
digitalWrite(PWMB,0); // B Stop
}
Przed załadowaniem i podłączeniem silników, należy zgodnie z rysunkiem 3 ustalić wartość prądu zabezpieczenia i potencjometrami RVA,B ustawić przybliżoną wartość. Oprogramowanie najpierw rozpędza silnik A za pomocą PWM, zatrzymuje, zmienia kierunek i ponownie rozpędza. Po zatrzymaniu silnika A cykl jest powtarzany dla silnika B. Jeżeli wszystko działa zgodnie z założeniami, moduł jest gotowy do realizacji bardziej złożonych zadań.
Adam Tatuś, EP
- R1, RA2, RB2: 2,2 kΩ (SMD 1206)
- RA1, RA3, RB1, RB3: 100 kΩ (SMD 1206)
- RAS1…RAS4, RBS1…RBS4: 1 Ω (SMD 1206, 1%, 0,5 W)
- RCLA, RCLB: 5,1 kΩ (SMD 1206)
- RP: 100 Ω (SMD 1206)
- RVA, RVB: 47 kΩ (potencjometr do druku)
- C1…C4, CB: 220 nF (SMD 12106)
- CA2, CB2: 5,6 nF (SMD 1206)
- CE1, CE2: 47 μF/50 V (elektrolit. SMD FKV8E)
- CP: 10 nF (SMD 1206)
- D1, D2: LL4148 (MINI MELF)
- U1: L6206PD (POWERSO36)
- U2: HC08 (SO14)
- U3, U4: 74HC153 (SO16)
- AD: złącze przelotowe SIP6
- RES: przycisk 6×3 mm
- SW: przełącznik DIP SW-4
- CSA, CSB: złącze męskie SIP2+zwora
- IAD, GNDA, VCCA: złącze męskie SIP6
- IOH: złącze przelotowe SIP10
- IOL, PWR: złącze przelotowe SIP8
- ISP: złącze przelotowe IDC6
- PW: dioda LED SMD
- PWRM: złącze MC kątowe, kompletne
- PWS: złącze MSS-2235