Radiowy sterownik serwomechanizmów

Radiowy sterownik serwomechanizmów

Serwomechanizmy mogą ustawić oś w ściśle określonym położeniu. Prezentowany układ, umożliwia wybranie jednego z trzech wcześniej ustalonych wychyleń za pomocą przełącznika. Jednak informacja o ustawieniu jest przesyłana drogą radiową, od nadajnika z przełącznikiem do odbiornika połączonego z serwem. Urządzenie można zastosować np. do zamykania, uchylania i pełnego otwierania wywietrznika.

Podstawowe parametry:
  • ustawianie osi serwomechanizmu za pomocą potencjometrów,
  • wybór jednego z trzech położeń za pomocą przełącznika,
  • częstotliwość toru radiowego: 868 MHz,
  • możliwość wyłączenia zasilania serwomechanizmu,
  • zasilanie stałym napięciem 5…15 V,
  • pobór prądu nadajnika ok. 30 mA; odbiornika: ok. 30 mA (nie licząc prądu pobieranego przez serwomechanizm).

Układ składa się z dwóch modułów: nadajnika i odbiornika. Nadajnik posiada trójpozycyjny przełącznik oraz transceiver, który wysyła informację o położeniu przełącznika. Odbiornik posiada taki sam transceiver, który odbiera sygnał, dekoduje go i seruje serwomechanizmem. Ustawienie osi serwomechanizmu ustalają potencjometry montażowe, umieszczone na płytce odbiornika. Za pomocą przełącznika wybierany jest potencjometr, który odpowiada za położenie osi serwomechanizmu w danej chwili.

Budowa i działanie

Schemat ideowy układu nadajnika pokazano na rysunku 1. Jako transceiver zastosowano gotowy moduł typu RFM12B firmy HopeRF, który pracuje w nielicencjonowanym paśmie 868 MHz. Nie posiada wbudowanej anteny, należy dołączyć zewnętrzną, np. w postaci odcinka przewodu. Dane oraz parametry pracy modułu radiowego przesyłane są interfejsem ISP.

Rysunek 1. Schemat ideowy układu nadajnika

Pracą toru radiowego zarządza niewielki i tani mikrokontroler typu Attiny24A. Źródłem zegara taktującego dla mikrokontrolera jest jego wewnętrzny oscylator RC, o nominalnej częstotliwości pracy 8 MHz (po wyłączeniu preskalera). Układ nie wykonuje żadnych zadań krytycznych czasowo, wobec czego stabilizacja tej częstotliwości przy użyciu rezonatora kwarcowego jest zbyteczna. O stanie układu sygnalizuje mała dioda LED, jej każdorazowy błysk oznacza nadanie odpowiednio zakodowanej informacji o położeniu przełącznika.

Przełącznik dźwigniowy typu MTS103 posiada trzy pozycje stabilne: dwie skrajne, kiedy styk wspólny jest zwarty z jednym ze styków skrajnych oraz trzecią, kiedy dźwignia znajduje się w środkowym położeniu i obie pary styków są rozwarte. Wykrycie przez mikrokontroler zwartej pary styków polega na sprawdzeniu stanów logicznych na liniach SW1 i SW2. Stan wysoki po rozwarciu zapewniają rezystory R4 i R5.

Wszystkie podzespoły zasilane są napięciem stałym o wartości 3,3 V, dostarczanym ze stabilizatora liniowego typu LD1117AS33TR, typu LDO. Minimalne napięcie wejściowe wynosi ok. 4,4 V (dropout wynosi około 1,1 V), co w połączeniu ze spadkiem na diodzie Schottky’ego, determinuje minimalne napięcie zasilające na poziomie 5 V. Maksymalne napięcie zostało określone przez producenta stabilizatora i wynosi 15 V.

Na płytce umieszczono złącze IDC do programowania mikrokontrolera, w którym styki są ułożone zgodnie ze standardem KANDA ISP. Programowanie odbywa się przy użyciu tych samych wyprowadzeń, co komunikacja z modułem radiowym. Aby nie dochodziło do konfliktów, trzeba zablokować interfejs SPI w module radiowym. Służy do tego rezystor R2, który podciąga wyprowadzenie NSEL do stanu wysokiego. Mikrokontroler, w czasie prawidłowej pracy, nadaje temu wyprowadzeniu stan niski, co aktywuje układ RFM12B.

Trzy wyprowadzenia mikrokontrolera nie są używane. Zostały spolaryzowane potencjałem masy za pomocą rezystorów R6…R8, aby nie gromadziły się na nich ładunki elektrostatyczne.

Odbiornik jest bardziej złożony, a jego schemat pokazuje rysunek 2. Użyty w nim moduł radiowy oraz mikrokontroler są takie same jak w nadajniku, zatem ten fragment układu jest niemal identyczny. Również stabilizator napięcia 3,3 V nie uległ zmianie. Ustalenie pozycji serwomechanizmu odbywa się za pomocą potencjometrów montażowych POT1…POT3. Pierwsze dwa zostały dołączone bezpośrednio między linię zasilającą a masę, więc potencjał ich ślizgacza może zmieniać się w pełnym zakresie. Ścieżka oporowa potencjometru POT3 została wpięta szeregowo z rezystorem R4, więc minimalny potencjał na jego ślizgaczu wynosi ok. 0,15 V. Takie rozwiązanie służy do wykrywania czy w pozycji neutralnej przełącznika zasilanie serwomechanizmu będzie wyłączone (zworka JP1 zdjęta) czy załączone, a kąt jego wychylenia zgodny z tym, który został zadany potencjometrem POT3 (zworka JP1 nałożona).

Rysunek 2. Schemat ideowy układu odbiornika

Pomiar napięć odbywa się przy użyciu wbudowanego w mikrokontroler przetwornika analogowo-cyfrowego, którego napięciem referencyjnym jest napięcie zasilające układ. Wynikiem przetwarzania napięcia z potencjometrów POT1 i POT2 jest liczba z zakresu 0…1023. W przypadku potencjometru POT3, przetwornik wskaże 0, jeżeli zworka jest zdjęta lub 46…1023 po jej zwarciu. Te wartości są przeskalowywane na czas trwania impulsu sterującego serwomechanizmem.

Zasilanie serwomechanizmu jest odcinane przy użyciu tranzystora MOSFET P typu AO4407. Został włączony w konfiguracji wspólnego źródła, a obciążenie w postaci serwomechanizmu jest podłączone od strony drenu. Dużą zaletą tego tranzystora jest niska rezystancja otwartego kanału, ponieważ nie przekracza 30 mV przy UGS=–5 V. Maksymalny prąd pobierany przez serwomechanizm zależy wyłącznie od wytrzymałości tranzystora (ok. 6,3 A – przyjmując maksymalną moc traconą na poziomie 1,2 W) oraz ścieżek na płytce. Otwarcie tranzystora jest możliwe po obniżeniu potencjału bramki poniżej potencjału źródła, co umożliwia tranzystor T2. Diody Zenera D2 i D3 chronią izolator podbramkowy tranzystora T1 przed przebiciem w wypadku przekroczenia maksymalnego napięcia bramka-źródło, a rezystor R6 ogranicza ich prąd. Rezystor R5 rozładowuje pojemność bramka-źródło po zatkaniu tranzystora T2. Kondensatory C11 i C12 obniżają impedancję wewnętrzną takiego źródła zasilania (napięcie będzie „przysiadało” w mniejszym stopniu).

Napięcie zasilające mikrokontroler wynosi 3,3 V, a serwomechanizm jest zasilany wyższym napięciem, toteż zachodzi konieczność dopasowania poziomów napięć dla wygenerowanych przez mikrokontroler impulsów. Służy do tego tranzystor T3 z rezystorem R9. Ponieważ rezystancja wyjściowa takiego układu jest wysoka, do układu został dodany wtórnik komplementarny, składający się z tranzystorów T4 i T5, który zapewnia prawidłowe wysterowanie linii sygnałowej serwomechanizmu. Za polaryzację emiterów odpowiada rezystor R10, a prąd wyjściowy został ograniczony rezystorem R11.

Montaż i uruchomienie

Układ nadajnika został zmontowany na dwustronnej płytce drukowanej o wymiarach 65×30 mm, której schemat montażowy oraz wzór ścieżek pokazuje rysunek 3. Płytka odbiornika jest większa, jej wymiary to 65×45 mm i została pokazana na rysunku 4. Otwory montażowe na obu płytkach znajdują się w odległości 3 mm od krawędzi płytki.

Rysunek 3. Schemat płytki nadajnika
Rysunek 4. Schemat płytki odbiornika

Przebieg montażu elementów na obu płytkach nie wymaga szczegółowego komentarza. Należy tylko pamiętać, by wlutować obu modułom anteny, chociażby w postaci kawałków cienkiego przewodu o długości 17,5 cm.

Zasilanie obu modułów może pochodzić ze źródła o napięciu stałym z przedziału 5…15 V. Jednak należy pamiętać, że napięcie zasilające odbiornik musi być dostosowane do wymagań serwomechanizmu (typowo, jest to ok. 5…6 V), ponieważ jest dołączony bezpośrednio do tego napięcia.

Po włączeniu zasilania, oba moduły (nadawczy i odbiorczy) muszą zostać zaprogramowane wsadami pamięci Flash. Należy również zmienić wartości fuse-bitów: Low Fuse=0xE2, High Fuse=0xDD. Dzięki temu, mikrokontroler będzie taktowany z wewnętrznego oscylatora RC z pominięciem preskalera, a dodatkowo, wbudowany układ Brown-Out Detector zapewni jego wyzerowanie, jeżeli napięcie zasilania spadnie poniżej 2,7 V. Szczegółowe ustawienia zostały pokazane na rysunku 5, który zawierza zrzut z okna programu BitBurner. Dla obu mikrokontrolerów wartości tych bitów są takie same.

Rysunek 5. Ustawienie fuse-bitów mikrokontrolera Attiny24A

Pobór prądu przez układ nadajnika jest stosunkowo stały i wynosi ok. 30 mA. W przypadku odbiornika, pobór prądu jest zróżnicowany: 20 mA przy wyłączonym serwomechanizmie, 30 mA po włączeniu serwomechanizmu (po ustaleniu pozycji) i wielokrotnie więcej w czasie poruszania osią – zależy od konkretnego serwomechanizmu oraz obciążenia osi. Zmontowane płytki nadajnika i odbiornika pokazują fotografie 6 i 7.

Fotografia 6. Zmontowana płytka nadajnika
Fotografia 7. Zmontowana płytka odbiornika

Eksploatacja

Po włączeniu zasilania nadajnika, dioda LED1 umieszczona na jego płytce powinna błyskać z częstotliwością 20 Hz, ponieważ informacje o stanie przełącznika wysyłane są do odbiornika co 50 ms. Wychylenie dźwigni w stronę rezystora R4 to „1”, w stronę R5 to „2”, a ustawienie jej na środku to „3”. Zwarcie obu styków jednocześnie również zostanie zinterpretowane jako „3”.

Odbiornik nie potwierdza w żaden sposób odebrania prawidłowych danych, dlatego są one tak często retransmitowane. Zaświecenie diody LED następuje, kiedy przez co najmniej 1,5 s nie został odebrany poprawny pakiet danych z nadajnika. Wtedy też zostaje wyłączone zasilanie serwomechanizmu.

Informacje o wychyleniu serwomechanizmu są pobierane ze wskazanego przełącznikiem potencjometru. Ustawienie potencjometru w połowie zakresu powoduje ustawienie osi w połowie dostępnego zakresu ruchu. Opis na płytce (MIN i MAX) wskazuje położenie ślizgacza potencjometru dla uzyskania minimalnej i maksymalnej długości impulsu sterującego serwem.

Wyłączenie zasilania serwomechanizmu jest możliwe również w pozycji „3” przełącznika, po zdjęciu zworki JP1. Kiedy jest ona nałożona, serwomechanizm odwzorowuje położenie ślizgacza POT3.

Dla dociekliwych

Do sterowania serwomechanizmami analogowymi konieczne jest wytworzenie ciągu impulsów o odpowiednich parametrach. Powinien to być sygnał prostokątny, którego stan niski jest zbliżony do potencjału masy, a stan wysoki do napięcia zasilającego serwomechanizm. Impulsy powinny być powtarzane cyklicznie co 20 ms (z częstotliwością 50 Hz). Na listingu 1 pokazany jest fragment kodu odpowiedzialny za wytwarzanie impulsów o takich parametrach.

Listing 1. Kod odpowiedzialny za wytwarzanie impulsów o zadanym czasie
//sterowanie wyjściem serwomechanizmu
//załączenie zasilania serwomechanizmu
#define SERVO_ON_1 PORTB|=0b00000010
//wyłączenie zasilania serwomechanizmu
#define SERVO_ON_0 PORTB&=0b11111101
//ustawienie stanu niskiego na wyjściu sygnałowym
#define OUT_1 PORTB|=0b00000100
//ustawienie stanu wysokiego na wyjściu sygnałowym
#define OUT_0 PORTB&=0b11111011

//granicza wartość pobrana z ADC0 (POT3)
//kiedy układ uznaje, że serwo nie ma być wyłączone
#define POT3_MIN 35

//liczba skalująca wartość pobraną z ADC0 do pełnego zakresu
#define POT3_SCALE 1024/(1024-POT3_MIN)
//---------------------------------------------------------------
// Tim1 do odmierzania czasu impulsów dla serwomechanizmu
//---------------------------------------------------------------
ISR(TIM1_OVF_vect){
OUT_1; //zakończenie wytwarzania impulsu
TIMSK1 = 0; // powrót TIM1 do stanu spoczynku
TCCR1B = 0;
}
//---------------------------------------------------------------
// Tim0 do odmierzania czasu przerw między impulsami
//---------------------------------------------------------------
ISR(TIM0_OVF_vect){
if(decision == DEC_1) { //czas trwania impulsów z POT1
ADMUX = (1 << MUX1); //przełączenie multipleksera
pulse_len = (ADCL | (ADCH << 8)); //pobranie wartości z POT1
onoff = 1; //zezwolenie na załączenie zasilania serwomechanizmu
}
if(decision == DEC_2) { //czas trwania impulsów z POT2
ADMUX = (1 << MUX0); //przełączenie multipleksera
pulse_len = (ADCL | (ADCH << 8)); //pobranie wartości z POT2
onoff = 1; //zezwolenie na załączenie zasilania serwomechanizmu
}
if(decision == DEC_3) { //czas trwania impulsów z POT3
ADMUX = 0; //przełączenie multipleksera (ADC0)
if((ADCL | (ADCH << 8)) >= POT3_MIN) {//jeżeli zworka JP1 jest zwarta
pulse_len = POT3_SCALE * (ADCL | (ADCH << 8)); //przeskaluj wartość z ADC
onoff = 1; //zezwolenie na załączenie zasilania serwomechanizmu
} belse { //jeżeli zworka JP1 jest rozwarta
onoff = 0; //wyłącz zasilanie serwomechanizmu
}
}

if(onoff == 0) { //jeżeli serwomechanizm ma być wyłączony
OUT_1; //nie generuj impulsu
SERVO_ON_0; //odetnij jego zasilanie
} else { //jeżeli serwomechanizm ma być załączony
OUT_0; //rozpocznij impuls (T3 odwraca fazę)
SERVO_ON_1; //załącz zasilanie serwomechanizmu
TCNT1 = 65536-988-pulse_len; //odliczanie do przepełnienia
TIMSK1 |= (1 << TOIE1); //przerwania od przepelnienia
TCCR1B |= (1 << CS11); //Timer1 odlicza co 1 us, preskaler 8
}
TCNT0 = 100; //musi odliczyć 156 takich impulsów, aby minęło 20ms
}

//=================================================
int main(void) {
//tryb Free Running, preskaler 64
ADCSRA |= (1 << ADEN) | (1 << ADSC) |
( 1 << ADATE) | (1 << ADPS2) | (1 << ADPS1);
//wyłączenie bufora cyfrowego dla wejść ADC0, ADC1 i ADC2
DIDR0 |= (1 << ADC2D) | (1 << ADC1D) | (1 << ADC0D);
//przerwania od przepelnienia
TIMSK0 |= (1 << TOIE0);
//Timer0 odlicza co 128 us, preskaler 1024
TCCR0B |= (1 << CS02) | (1 << CS00);
//musi odliczyć 156 takich impulsów, aby minęło 20 ms
TCNT0 = 100;

sei(); //uruchomienie systemu przerwań
}

Licznik Timer1 jest taktowany sygnałem o częstotliwości 1 MHz, więc możliwa do uzyskania rozdzielczość czasowa wynosi 1 ms. Licznik Timer0 generuje przerwanie co 20 ms, czym zapoczątkowuje generację impulsu. o ile program w danej chwili na to pozwala. Czas trwania impulsu musi wynosić od 1 do 2 ms, więc cały ten zakres jest pokrywany przez wartość pobraną z 10-bitowego przetwornika A/D. W przypadku potencjometru POT3 zachodzi konieczność przeskalowania, co nieznacznie zmniejsza rozdzielczość regulacji wychylenia serwomechanizmu. Położenie środkowe serwomechanizmu odpowiada impulsom o czasie ok. 1,5 ms.

Wymagany zakres regulacji czasu trwania impulsu to 1 ms (czas trwania 1…2 ms), a zmienna pulse_len przyjmuje wartości 0…1023. Jednak nie ograniczano tej wartości, a zastosowano niewielki margines (po 12 ms) dla najkrótszego i najdłuższego impulsu, wobec czego impuls sterujący zmienia się w przedziale od 988 do 2012 ms.

Michał Kurzela, EP

Wykaz elementów: Nadajnik
Rezystory:
  • R1, R2, R4…R8: 100 kΩ SMD0805
  • R3: 330 Ω SMD0805
Kondensatory:
  • C1, C3, C8: 10 µF/16 V SMD0805
  • C2, C4: 10 nF SMD0805
  • C5: 47 pF SMD0805
  • C6: 100 µF/25 V THT
  • C7: 100 nF SMD0805
Półprzewodniki:
  • D1: SS14
  • LED1: czerwona SMD0805
  • US1: Attiny24A SO14
  • US2: RFM12B 868 MHz SMD
  • US3: LD1117AS33TR SOT223
Pozostałe:
  • J1: IDC 10pin THT męski 2,54 mm
  • J2: ARK2 5 mm
  • S1: MTS103
  • Odcinek przewodu na antenę (opis w tekście)
Odbiornik
Rezystory:
  • R1, R2, R7, R8: 100 kΩ SMD0805
  • R3, R6, R11: 330 Ω SMD0805
  • R4, R5, R9, R10: 4,7 kΩ SMD0805
  • P1…P3: 100 kΩ montażowe leżące
Kondensatory:
  • C1, C3, C10, C12: 10 µF/16 V SMD0805
  • C2, C4: 10 nF SMD0805
  • C5: 47 pF SMD0805
  • C6, C9, C11: 100 nF SMD0805
  • C7: 1000 µF/16 V THT raster 5 mm
  • C8: 100 µF/25 V THT
Półprzewodniki:
  • D1: SS14
  • D2, D3: Zener 12 V 0,4 W MiniMELF
  • LED1: czerwona SMD0805
  • T1: AO4407 SO8
  • T2, T3: BSS123 SOT23
  • T4: BC847 lub podobny
  • T5: BC857 lub podobny
  • US1: Attiny24A SO14
  • US2: RFM12B 868 MHz SMD
  • US3: LD1117AS33TR SOT223
Pozostałe:
  • J1: IDC 10 pin THT męski 2,54 mm
  • J2: ARK2 5 mm
  • J3: goldpin 3pin męski 2,54 mm THT
  • JP1: goldpin 2pin męski 2,54 mm THT + zworka
  • Odcinek przewodu na antenę (opis w tekście)
Artykuł ukazał się w
Elektronika Praktyczna
grudzień 2019

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 maj - czerwiec 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 maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów