16 kanałowy kontroler PWM - sterownik serwomechanizmów dla RPi Zero

16 kanałowy kontroler PWM - sterownik serwomechanizmów dla RPi Zero

Prezentowany moduł to 16-kanałowy kontroler PWM, pozwalający rozszerzyć możliwości niejednego komputerka o sterowanie serwomechanizmami, regulację jasności LED lub, po zastosowaniu stopni mocy, regulację prędkości silników prądu stałego. Będzie przydatny w robotyce amatorskiej czy automatyce.

Podstawowe parametry:
  • zawiera kontroler typu PCA9685 sterowany poprzez magistralę I2C,
  • 16 niezależnych kanałów PWM o rozdzielczości 12 bitów,
  • wydajność prądowa wyjść pozwala na sterowanie prądem do 25 mA,
  • możliwość wyboru konfiguracji wyjść (open-drain lub totem-pole).

Moduł bazuje na specjalizowanym generatorze PWM typu PCA9685 sterowanym poprzez magistralę I2C. Ma on 16 niezależnych kanałów o rozdzielczości 12 bitów. Wydajność prądowa wyjść pozwala na sterowanie prądem do 25 mA (otwarty dren OD), co umożliwia bezpośrednie zasilanie np. diod RGB. Częstotliwość PWM może zostać wybrana z zakresu od 24 do 1526 Hz poprzez zmianę podziału częstotliwości wbudowanego oscylatora. Wyjścia Ln mają możliwość wyboru konfiguracji pomiędzy open drain lub totem pole przydatnej przy współpracy z zewnętrznymi driverami. Schemat wewnętrzny układu PCA9685 został pokazany na rysunku 1.

Rysunek 1. Schemat wewnętrzny układu PCA9685

Budowa i działanie

Schemat modułu został pokazany na rysunku 2. Układ zasilany jest zewnętrznym napięciem 5 V doprowadzonym do złącza PWR. Zwora V50 umożliwia zasilanie Raspberry Pi napięciem zasilającym moduł. W przypadku współpracy z serwomechanizmami należy zapewnić odpowiednia jakość i wydajność źródła zasilania, aby Raspberry Pi pracowało niezawodnie. Napięcie 5 V doprowadzone jest do złączy VS oraz SA...SD, gdzie służy do zasilania podłączonych elementów wykonawczych.

Rysunek 2. Schemat modułu

Układ U1 jest odpowiedzialny za generowanie sygnałów PWM, które doprowadzone są do dwóch grup złączy: PWM typu SIP2,54 (sygnały PWM0...7) umożliwiających podłączenie standardowych serwomechanizmów z przewodem 3-żyłowym oraz do złączy SA...SD (sygnały PWM8...15) w standardzie Grove. Do złączy Grove doprowadzone są po dwa sygnały PWM, standardowy serwomechanizm w wersji mini wykorzystuje tylko jeden sygnał, aby wykorzystać oba wyprowadzone PWM, należy użyć kabla rozdzielającego.

Każdy z sygnałów PWM0...15 ma rezystor szeregowy 220 Ω, co nie zakłóca sterowania serwomechanizmem, a upraszcza bezpośrednie sterowanie LED i stanowi także podstawowe zabezpieczenie wyjść PCA9685. Układ U2 typu PCA9306 jest konwerterem poziomów logicznych pomiędzy PCA9685 zasilanym z 5 V, a magistralą I2C Raspberry Pi pracującą w standardzie 3,3 V. Układ uzupełniają zwory A0, A1 umożliwiające ustawienie czterech adresów bazowych modułu, co umożliwia generowanie do 64 kanałów PWM.

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 pozostałych wersjach. Schemat płytki wraz z rozmieszczeniem elementów został pokazany na rysunku 3. Montaż jest typowy, należy tylko zwrócić uwagę na przylutowanie padu termicznego układu U1, który zapewnia prawidłowe odprowadzanie ciepła. Na koniec należy ustawić adres układu na magistrali I2C za pomocą zworek A1, A0.

Rysunek 3. Schemat płytki PCB wraz z rozmieszczeniem elementów

Sterowanie wyjściami Ln odbywa się poprzez odpowiednią konfigurację generatorów PWM układu PCA9685. W sieci można znaleźć wiele bibliotek ułatwiających sterowanie układem, ale do sprawdzenia działania wystarczy odpowiednia konfiguracja rejestrów układu. Strukturę rejestrów konfiguracyjnych układu zestawiono w tabeli 1.

W zależności od potrzeb możliwa jest komunikacja z poszczególnymi rejestrami poprzez adresowanie indywidualne, zgodnie z rysunkiem 4 lub adresowanie grupowe, co zostało pokazane na rysunku 5. Odczyt odbywa się podobnie. Dokładniejsze informacje i dodatkowe tryby adresowania zamieszczone są w nocie katalogowej.

Rysunek 4. Adresowanie indywidualne rejestrów
Rysunek 5. Adresowanie grupowe rejestrów

Podstawowe rejestry konfiguracyjne dla zastosowanego w module trybu pracy zostały umieszczone w tabeli 2.

Po włączeniu zasilania i uruchomieniu systemu obecność układu na magistrali sprawdzamy poleceniem:

i2cdetect -y 1

Powinien zostać wskazany adres PCA9685 z zakresu 0x50...0x53 odpowiadający ustawieniu zwór A1, A0. Dla sprawdzenia działania modułu do złącza PWM0 oraz VS podłączamy diodę LED. Poleceniem:

i2cset -y 1 0x50 0x00 0x90

ustawiamy tryb sleep. Teraz możemy skonfigurować prescaler na 1562 Hz poleceniem:

i2cset -y 1 0x50 0xFE 0x03

Następnie wracamy do normalnego trybu pracy układu, wpisując:

i2cset -y 1 0x50 0x00 0x00

Ustawiamy wyjścia zanegowane (bezpośrednie sterowanie LED) oraz konfigurację wyjścia typu otwarty dren:

i2cset -y 1 0x50 0x01 0x10

Inicjujemy rejestry cykli PWM:

i2cset -y 1 0x50 0x06 0x00
i2cset -y 1 0x50 0x07 0x00
i2cset -y 1 0x50 0x08 0x00
i2cset -y 1 0x50 0x09 0x00

Sprawdzamy załączenie LED0, bez generatora PWM:

i2cset -y 1 0x50 0x07 0x10
i2cset -y 1 0x50 0x07 0x00

Sprawdzamy wyłączenie LED0, bez generatora PWM:

i2cset -y 1 0x50 0x09 0x10
i2cset -y 1 0x50 0x09 0x00

Sterowanie sygnałem PWM odbywa się przez dwa 12-bitowe rejestry. Pierwszy – LEDn_ON określa czas załączenia, drugi – LEDn_OFF czas wyłączenia wyjścia Ln. Długości cyklu ustawione w rejestrach są porównywane z 12-bitowym licznikiem, co umożliwia elastyczne sterowanie wyjściem (rysunek 6).

Rysunek 6. Zasada sterowania wyjściem Ln

Wygenerowanie sygnału PWM z wypełnieniem 50%, bez początkowego przesunięcia cyklu wymaga następujących zapisów do rejestrów:

cykl załączenia ON: 2048,

cykl wyłączenia OFF: 2047 (2048 – 1).

Po rozbiciu na wartości 8-bitowe wpisujemy do rejestrów odpowiednio:

LED0_ON_H = 0x00,

LED0_ON_L = 0x00,

LED0_OFF_H = 0x07,

LED0_OFF_L = 0xFF.

Realizujemy to poleceniami:

i2cset -y 1 0x50 0x06 0x00
i2cset -y 1 0x50 0x07 0x00
i2cset -y 1 0x50 0x08 0xFF
i2cset -y 1 0x50 0x09 0x07

Dobierając odpowiednio ustawienia preskalera i generatorów PWM, tak aby okres przebiegu wynosił 20 ms, a czas załączenia wyjścia zależnie od kąta obrotu 1...2 ms oraz ustawiając wyjścia jako totem pole otrzymujemy możliwość precyzyjnego sterowania do 16 serwomechanizmów.

Adam Tatuś, EP

Wykaz elementów:
Rezystory:
  • R1, R2: 2,2 kΩ SMD0603
  • R3, R4: 4,7 kΩ SMD0603
  • R5: 200 kΩ SMD0603
  • RP1…RP4: 220 Ω drabinka rezystorowa
Kondensatory:
  • C1…C3, C6: 4,7 µF SMD0603
  • C4, C5, C7: 0,1 µF SMD0603
  • CE1…CE3: 100 µF/10 V elektrolityczny SMD 6,3 mm
Półprzewodniki:
  • U1: PCA9685BS (QFN28)
  • U2: PCA9306DCT (SSOP8)
Inne:
  • GND, PWM, VS: złącze SIP8 (1×8 pinów) 2,54 mm
  • GPIO: złącze IDC40 żeńskie (2×20 pinów) 2,54 mm
  • PWR: złącze śrubowe DG381-3,5-2
  • V50: złącze SIP2 (1×2 piny) 2,54 mm
Artykuł ukazał się w
Elektronika Praktyczna
wrzesień 2021
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów