- dwa niezależnie sterowane kanały,
- prąd szczytowy uzwojeń: 3 A/kanał,
- napięcie zasilania silników: 3...30 V (niezależne w obydwu kanałach),
- możliwość sterowania kierunkiem i prędkością obrotów,
- możliwość monitorowania prądu silników,
- konstrukcja na bazie scalonych sterowników pełnomostkowych MAX22202,
- wbudowana przetwornica DC/DC typu buck z opcją wyboru źródła zasilania logiki (napięcie zasilania kanału 1 lub 2).
Nakładka umożliwia dwukierunkowe sterowanie sygnałem PWM dwóch silników prądu stałego z niezależną regulacją prędkości. Prąd szczytowy uzwojeń może sięgnąć maksymalnie 3 A przy zasilaniu każdego silników z osobnego źródła napięcia 3...30 VDC. Wbudowana opcjonalna przetwornica obniżająca ułatwia zasilanie płytki bazowej, gdy napięcie jednego z silników mieści się w zakresie 9...30 V. Zastosowane układy sterowników zapewniają płynną regulację prądu uzwojeń, z wartością ustalaną potencjometrem montażowym; mają ponadto funkcję monitorowania prądów uzwojeń oraz sygnalizację stanów awaryjnych.
Nakładka wyposażona jest w dwa nowoczesne, pełnomostkowe układy sterownika silnika prądu stałego typu MAX22202 (Analog Devices), którego budowę przedstawiono na rysunku 1.
Układ MAX22202 zawiera wszystkie bloki niezbędne do sterowania silnikiem prądu stałego, a jego aplikacja ogranicza się do zaledwie kilku elementów zewnętrznych. Wbudowany mostek MOSFET charakteryzuje się niewielką rezystancją w stanie przewodzenia R_ds(on)~0,3 Ω, co zmniejsza straty i umożliwia pracę przy niskich napięciach zasilania, już od 3 V, bez zmniejszenia wydajności prądowej. MAX22202 ma wbudowany układ pomiaru prądu silnika, niewymagający zewnętrznego rezystora pomiarowego – dzięki temu jego aplikacja jest uproszczona, a straty mocy zminimalizowane. Układ pracuje w dwóch trybach: pierwszy to włączona regulacja prądu silnika, przy którym maksymalny prąd uzwojeń ustalany jest rezystancją podłączoną do wprowadzenia ILIM, drugi to praca z wyłączoną regulacją, gdy do wyprowadzenia ILIM podłączony jest rezystor 14 kΩ, a aktywne pozostaje tylko ograniczenie prądu maksymalnego 3,5 A. Regulacja prądu silnika ułatwia np. rozruch napędu bez przeciążeń prądowych i zbędnych obciążeń mechanicznych. W każdym trybie możliwa jest regulacja PWM. Wartość rezystora podłączonego do wyprowadzenia ILIM ustalającego prąd silnika Itrip wyznacza się ze wzoru:
Itrip [A]= Kilim/Rlim [kΩ]
gdzie Kilim=~50 KV (Rlim: 18...250 kΩ)
Jeżeli w danej aplikacji przewidywane jest sterowanie silnika w zamkniętej pętli sprzężenia zwrotnego lub konieczna jest informacja o prądzie uzwojeń, to wyprowadzenie ISEN udostępnia potrzebny sygnał monitorujący. Podłączony do niego rezystor obciąża wbudowane źródło prądowe, a uzyskiwane napięcie wyjściowe opisane jest wzorem:
Risen [Ω] = Kisen·Vfs [V]/Imax [A]
gdzie Kisen=~5 kA/A
Stany awaryjne – takie jak przeciążenie, przegrzanie lub zbyt niskie napięcie zasilania – sygnalizowane są stanem niskim na wyprowadzeniu FAULT.
Za sterowanie silnikiem odpowiadają sygnały ENABLE, PHASE(DIR) oraz MODE, zgodnie z tabelą 1. Jeżeli stan niski na wyprowadzeniu MODE trwa dłużej niż (1,5...3,5 ms), układ przechodzi w stan obniżonego poboru mocy. W przypadku włączonej regulacji prądu silnika i przekroczenia jej nastawy, sterowanie mostkiem przełączane jest na wewnętrzne, ograniczające prąd uzwojenia niezależnie od stanu wyprowadzeń.
Schemat nakładki przedstawiono na rysunku 2. Układy U1, U2 (MAX22202) pracują w typowej aplikacji. Każdy z silników podłączony jest wraz z napięciem zasilania do odpowiadającego mu złącza M1, M2. Odsprzęganie zasilania zapewniają kondensatory C2, C3, CE1 i C5, C6, CE2, zaś transile TVS1, TVS2 zabezpieczają drivery przed skutkami przepięć. Pojemności filtrujące mają minimalne wartości, niezbędne do zapewnienia poprawnej pracy U1, U2 (każdorazowo należy zapewnić odpowiednią filtrację i przekroje przewodów zasilających dobranych pod kątem wymagań współpracujących silników). Regulacja prądu silnika odbywa się za pomocą potencjometrów RV1, RV2. Ustawienie ślizgaczy w maksymalnym położeniu wyłącza regulację, ustalając rezystancję widzianą przez wyprowadzenie ILIM na R1, R3=14 kΩ. Sygnał monitorujący prąd silnika, dostępny na wyprowadzeniu ILIM, przetwarzany jest na napięcie i dodatkowo buforowany przez wzmacniacz U3 o wzmocnieniu ustalonym na 2 V/V. Maksymalny mierzony prąd to 3,5 A, co odpowiada napięciu 2 V na wyprowadzeniach A0 lub A2 i A1. Zakres prądu i napięcia może zostać zoptymalizowany poprzez dobór rezystorów R2, R10 i R4, R8 odpowiednio do każdego z silników – należy pamiętać tylko, by nie przekraczać zakresu napięcia wejściowego ADC (zależnego od użytej płytki bazowej). Bezpiecznie jest pracować w zakresie 0...3 V, ponieważ gwarantuje zgodność z płytkami zasilanymi napięciami zarówno 3,3 V, jak i 5 V. Zwora A0 (zalutowana domyślnie w położeniu A0) umożliwia zmianę wyprowadzenia monitorującego prąd silnika M1 z A0 na A2, co jest istotne w aplikacjach, w których chcemy wykorzystać wyprowadzony na A0 przetwornik D/A w UNO R4. Sygnał monitorujący prąd silnika nie podlega w układach U1 i U2 żadnej obróbce oprócz skalowania zakresu – o stosowne przeliczenie należy zatem zadbać we własnym zakresie, zwłaszcza jeśli sterujemy silnikiem sygnałem PWM. Kiedy sygnał monitorujący prąd silników nie jest niezbędny w aplikacji, może zostać całkowicie odłączony od wyprowadzeń A0(2), A1 przy użyciu przełączników DIP M1CFG, M2CFG, a linie te zostaną uwolnione do użycia w innych celach. Stan awaryjny driverów: FLT1, FLT2, dostępny jest na wyprowadzeniach D6, D7 i także może zostać od nich odłączony przełącznikami DIP M1CFG, M2CFG. Sterowanie silnikami sprowadza się do trzech sygnałów: ENB1/2 (załączającego silnik z możliwą regulacją PWM), PHA1/2 (odpowiadającego za zmianę kierunku) oraz MD1/2 (odpowiadającego za tryb pracy). Przypisanie sygnałów jest zgodne z Motor Shield. Diody LD1...LD4 – podłączone bezpośrednio na wyjściach OUT układów U1 i U2 – sygnalizują wysterowanie silnika, dzięki czemu możliwa jest też obserwacja napięcia indukowanego w silniku przy braku wysterowania uzwojenia (przejście do pracy prądnicowej) i kontrolowanie rzeczywistego stanu wyjść mostka.
W celu ułatwienia aplikacji nakładki, na złącza Grove wyprowadzono magistralę I²C (wyprowadzenia A4, A5) oraz UART (D0, D1), umożliwiającą podłączenie czujników zasilanych napięciem IOREF. Opcjonalnie układ uzupełnia przetwornica obniżająca PSU typu AMSR-787.2Z, pozwalająca na zasilanie płytki bazowej z jednego z napięć zasilających silniki, doprowadzonych do złącza VIN – położenie współpracującej z nim zwory ustala wybór napięcia VM1 lub VM2. Przetwornica obniża wybrane napięcie do 7,2 V (obciążalność maksymalna 500 mA). Do poprawnej pracy konwertera DC/DC wymagane jest napięcie wejściowe 9...30 V, co nieznacznie ogranicza możliwości driverów, ale upraszcza aplikację w przypadku, gdy podłączamy silniki do typowego napięcia z przedziału 9...24 V, np. z pakietu akumulatorów. Gdy wymagane jest sterowanie silnikami niskonapięciowymi 3...9 V, napięcie do płytki bazowej musi być doprowadzone niezależnie. W przypadku AVTDuino UNO R4 Plus, aby wykorzystać zasilanie z napięcia silników, należy założyć na płytkę bazową zworę VIN; w przypadku innych płytek Arduino trzeba koniecznie sprawdzić dopuszczalny zakres zasilania VIN.
Układ zmontowany jest na dwustronnej płytce drukowanej zgodnej z Arduino Shield Rev3. Rozmieszczenie elementów przedstawiono na rysunku 3. Sposób montażu nie wymaga opisu, montaż zwory VIN i przetwornicy PSU jest opcjonalny (zgodnie z uwagami w tekście). W zależności od przewidywanego zastosowania, przedłużane złącza szpilkowe PWR, AD, IOL, IOH, ISP (wysokość 13...15 mm) można zastąpić „stackowalnymi” złączami Arduino, umożliwiającymi montowanie modułów w kanapki.
Prosty szkic z listingu 1 ułatwia przetestowanie sterowania silnikami przy użyciu PWM i zmiany kierunku. W przypadku zastosowania szkiców z Arduino Motor Shield należy zmodyfikować funkcję obsługującą wyprowadzenie BRAKE, która w AVTDuino UNO_R4_DCMotor Shield pełni funkcję MODE i konieczna jest jej negacja.
int dirPin1 = 12;
int pwmPin1 = 3;
int modePin1 = 9;
int pwm1 = 0;
int dirPin2 = 13;
int pwmPin2 = 11;
int modePin2 = 8;
int pwm2 = 0;
int step = 1;
void setup() {
//define pins
pinMode(dirPin1, OUTPUT);
pinMode(pwmPin1, OUTPUT);
pinMode(modePin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(pwmPin2, OUTPUT);
pinMode(modePin2, OUTPUT);
digitalWrite(modePin1, LOW);
digitalWrite(modePin2, LOW);
digitalWrite(dirPin1, LOW);
digitalWrite(dirPin2, LOW);
analogWrite(pwmPin1, 0);
analogWrite(pwmPin2, 0);
}
void loop() {
// M1 speed up/down
digitalWrite(modePin1, HIGH);
delay(5);
// M1 >>
digitalWrite(dirPin1, LOW);
for (pwm1 = 0; pwm1 <= 255; pwm1++) {
analogWrite(pwmPin1, pwm1);
delay(10);
}
delay(3000);
for (pwm1 = 0; pwm1 <= 255; pwm1++) {
analogWrite(pwmPin1, 255 - pwm1);
delay(10);
}
delay(1000);
// M1 <<
digitalWrite(dirPin1, HIGH);
for (pwm1 = 0; pwm1 <= 255; pwm1++) {
analogWrite(pwmPin1, pwm1);
delay(10);
}
delay(3000);
for (pwm1 = 0; pwm1 <= 255; pwm1++) {
analogWrite(pwmPin1, 255 - pwm1);
delay(10);
}
delay(1000);
// M1 fast decay
digitalWrite(modePin1, LOW);
analogWrite(pwmPin1, 0);
// M2 speed up/down
digitalWrite(modePin2, HIGH);
delay(5);
// M2 >>
digitalWrite(dirPin2, LOW);
for (pwm2 = 0; pwm2 <= 255; pwm2++) {
analogWrite(pwmPin2, pwm2);
delay(10);
}
delay(3000);
for (pwm2 = 0; pwm2 <= 255; pwm2++) {
analogWrite(pwmPin2, 255 - pwm2);
delay(10);
}
delay(1000);
// M2 <<
digitalWrite(dirPin2, HIGH);
for (pwm2 = 0; pwm2 <= 255; pwm2++) {
analogWrite(pwmPin2, pwm2);
delay(10);
}
delay(3000);
for (pwm2 = 0; pwm2 <= 255; pwm2++) {
analogWrite(pwmPin2, 255 - pwm2);
delay(10);
}
delay(1000);
// M2 fast decay
digitalWrite(modePin2, LOW);
analogWrite(pwmPin2, 0);
}
Listing 1. Przykładowy szkic testowy
Jeżeli wszystko działa poprawnie, moduł może zostać użyty we własnej aplikacji.
Adam Tatuś, EP
- R1, R3: 14 kΩ (SMD 0603)
- R2, R4: 1,5 kΩ (SMD 0603)
- R5...R10: 22 kΩ (SMD 0603)
- R11, R12: 10 kΩ (SMD 1206)
- R13, R14: 220 kΩ (SMD 0603)
- C1, C4: 1 μF/10 V (SMD 0603, X7R)
- C2, C5, C7: 100 nF/50 V (SMD 0603, X7R)
- C3, C6: 4,7 μF/50 V (SMD 1206, X7R)
- C8: 100 nF/50 V (SMD 0603, X7R)
- C9: 10 μF/10 V (SMD 0603, X7R)
- CE1...CE3: 47 μF/50 V elektrolityczny, typ EEEFT1H470AP
- LD1, LD3: dioda LED czerwona (SMD 0603)
- LD2, LD4: dioda LED zielona (SMD 0603)
- TVS1, TVS2: transil SM6T33A (SMB)
- U1, U2: MAX22202ATC (TDFN12)
- U3: LMV358DGK (VSSOP8_065)
- AD: złącze szpilkowe 6 pin 2,54 mm (13...15 mm)
- I²C, UART: złącze Grove kątowe
- IOH: złącze szpilkowe 10 pin, 2,54 mm (13...15 mm)
- IOL, PWR: złącze szpilkowe 8 pin, 2,54 mm (13...15 mm)
- ISP: złącze szpilkowe 2×3 pin, 2,54 mm (13...15 mm) (opcja)
- M1, M2: złącze śrubowe kompletne 4 pin 3,81 mm kątowe
- M1CFG, M2CFG: przełącznik DIP switch, 2 sekcje, typ A6H-2101
- PSU: przetwornica AMSR-787.2Z (opcja)
- VIN: złącze SIP3 + zwora (opcja)
- RES: przycisk TACT-switch 6×3 mm
- RV1, RV2: potencjometr montażowy 200 kΩ