- sterowanie poprzez magistralę I2C,
- sterowanie czterema silnikami o prądzie maksymalnym 400 mA,
- napięcie znamionowe silników musi mieścić się w zakresie 2,5...5,5 V,
- konstrukcja płytki PCB przystosowana do RPi Zero ale może współpracować także z innymi komputerkami.
Moduł zawiera trzy układy scalone – dwa podwójne mostkowe drivery silników typu A3901 oraz ośmiokanałowy generator PWM typu PCA9634. Budowę wewnętrzną pierwszego pokazuje rysunek 1.
Driver A3901 umożliwia sterowanie dwoma silnikami o prądzie maksymalnym 400 mA zasilanymi napięciem z zakresu 2,5...5,5 V. Regulacja prędkości obrotowej może odbywać się poprzez sterowanie sygnałem PWM o częstotliwości do 250 kHz. Układ został wyposażony w zabezpieczenie termiczne. Logika wejść sterujących został pokazana w tabeli 1.
Uproszczony schemat wewnętrzny drugiego układu – PCA9634, został pokazany na rysunku 2. Sterowanie układem odbywa się poprzez magistralę I2C. Funkcje układu oraz jego konfiguracja i sterowanie zostaną omówione w dalszej części artykułu.
Budowa i działanie
Schemat ideowy nakładki został pokazany na rysunku 3. Sterowniki U2 i U3 typu A3901 są sterowane z wyjść generatora PWM U1 typu PCA9634. Wyprowadzenia adresowe A0, A1 umożliwiają ustawienie jednego z 4 adresów na magistrali I2C, czyli teoretycznie możliwe jest sterowanie do szesnastu mikrosilników na jednej magistrali. Wejście !OE sterujące trójstanowym buforem wyjściowym PCA9634 nie jest w układzie wykorzystane i jest połączone z masą (!OE = 0).
Zasilanie modułu doprowadzone jest do złącza PWR. Zwora V50 umożliwia zasilanie Raspberry Pi napięciem zasilania silników. Zasilanie z jednego źródła Raspberry Pi i silników należy każdorazowo odpowiednio przeanalizować, aby nie doprowadzić do nieprawidłowego działania Pi, z mocno zakłócanego przez silniki źródła zasilania. Zasilanie silników z Raspberry Pi nie jest zalecane ze względu na małą wydajność prądową systemowego napięcia 5 V. Należy także pamiętać o odpowiedniej wydajności źródła zasilania PWR, kondensatory CE1, CE2, CE3 zapewnią tylko podstawową filtrację. Dla zwiększenia stabilności zasilania można dołączyć dodatkowy kondensator poza modułem.
Każdy z układów U2 i U3 zabezpieczony jest przed uszkodzeniem przy pomocy bezpiecznika polimerowego (F1, F2). Magistrala I2C została doprowadzona do złącza I2C (Grove) lub złącza I2CA (PH 2 mm) które umożliwiają dołączenie jej do współpracujących układów. Rezystory R1, R2 zapewniają właściwą polaryzację magistrali.
Montaż i uruchomienie
Moduł został zmontowany na dwustronnej płytce drukowanej o wymiarach zgodnych z Raspberry Pi Zero, ale oczywiście może być stosowany także w innych wersjach komputerka i z innymi płytkami uruchomieniowymi (Arduino, Pi Pi Pico, STM32). Wymaga tylko doprowadzenia zasilania silników do złącza PWR, i magistrali I2C do złącza I2C (można nawet nie lutować złącza GPIO). Schemat płytki PCB został pokazany na rysunku 4.
Montaż jest typowy, należy tylko zwrócić uwagę na przylutowanie pada termicznego na dolnej stronie obudów układów U2 i U3. Jest to niezbędne dla zapewnienia prawidłowego odprowadzania ciepła. Na koniec należy ustawić adresu modułu na magistrali I2C zworami A1, A0.
Sterowanie silnikami odbywa się poprzez odpowiednią konfigurację generatorów PWM układu PCA9634. Na niektórych wyjściach należy ustawić tylko stany logiczne 0 lub 1, określając w ten sposób kierunek obrotów. Generowanie sygnału PWM podłączonego do jednego z wejść A3901 umożliwi płynną regulację obrotów w odpowiadającym kierunku.
Strukturę rejestrów konfiguracyjnych układu PCA9634 zawiera tabela 2. W zależności od potrzeb możliwa jest komunikacja z poszczególnymi rejestrami poprzez adresowanie indywidualne rejestrów, wskazujące na konkretny rejestr, zgodnie z rysunkiem 5.
Drugim sposobem jest adresowanie grupowe wszystkich rejestrów, co pokazano na rysunku 6. Ostatnim sposobem jest adresowanie grupowe rejestrów PWM po wcześniejszej konfiguracji układu, co zostało pokazane na rysunku 7.
Odczyt odbywa się podobnie. Dokładniejsze informacje zamieszczone są w nocie katalogowej. Podstawową konfigurację dla omawianego modułu zawiera tabela 3.
Dla sprawdzenia działania modułu można wykorzystać skrypt z listingu 1.
#!/bin/bash
echo "Pi Zero UDCM4 PCA9634 + A3901
MicroMotor Driver ADR:0x60"
i2ctransfer -y 1 w17@0x60 0x80 0x80 0x04
0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F
0x80 0x00 0xff 0xe2 0xe4 0xe8
echo "Stop"
i2cset -y 1 0x60 0x0C 0x00
i2cset -y 1 0x60 0x0D 0x00
sleep 2
echo "Left 50%"
i2cset -y 1 0x60 0x0C 0x88
i2cset -y 1 0x60 0x0D 0x88
sleep 2
echo "Brake"
i2cset -y 1 0x60 0x0C 0x55
i2cset -y 1 0x60 0x0C 0x55
sleep 2
echo "Right 50%"
i2cset -y 1 0x60 0x0C 0x22
i2cset -y 1 0x60 0x0D 0x22
sleep 2
echo "Stop"
i2cset -y 1 0x60 0x0C 0x00
i2cset -y 1 0x60 0x0D 0x00
sleep 2
Po podłączeniu zasilania silników, obecność układu na magistrali sprawdzamy poleceniem: i2cdetect -y 1. Powinien zostać wskazany adres układu PCA9634 z zakresu 0x60...0x63 odpowiadający ustawieniu zworek A1, A0. Jeżeli adres został zmieniony z domyślnego 0x60, należy uwzględnić to edytując skrypt testowy. Skrypt testowy steruje jednocześnie wszystkimi silnikami z wypełnieniem sygnału PWM równym 50% poprzez rejestry PWM0:9. Zmiana kierunku ich obrotów odbywa się poprzez odpowiednią konfigurację wyprowadzeń w rejestrze LEDOUT0/1 oraz MODE2.
Adam Tatuś, EP
- R1, R2: 4,7 kΩ SMD0603
- RP1, RP2: 47 kΩ drabinka rezystorowa CRA06S08
- C1, C2: 0,1 μF SMD0603 X7R/50 V
- C3, C4: 4,7 μF SMD0603 X7R/16 V
- CE1, CE2, CE3: 100 μF/10 V elektrolityczny miniaturowy SMD 6,3 mm
- U1: PCA9634PW (SSOP20)
- U2, U3: A3901SEJTR-T (DFN10)
- F1, F2: 1 A SMD1206 bezpiecznik polimerowy
- A0, A1: zwora SMD0603
- GPIO: złącze IDC40 żeńskie 2×20
- M1, M2, M3, M4: złącze SIP2 2,54 mm kątowe
- PWR: złącze śrubowe DG381-3,5-2
- V50: złącze SIP2 2,54 mm + zwora