Generator akustyczny na ATtiny25 Generator wytwarza falę sinusoidalną w zakresie 20 Hz...20 khz o wartości międzyszczytowej ok. 3,5 V i zniekształceniach poniżej 0,5%. Jest przestrajany skokowo i płynnie. Przebieg jest wytwarzany cyfrowo z rozdzielczością 8 bitów i częstotliwością próbkowania 625 khz. Dodatkowe materiały na CD i FTP Na CD: karty katalogowe i noty aplikacyjne elementów oznaczonych na wykazie elementów kolorem czerwonym AVT-1569 w ofercie AVT: AVT-1569A płytka drukowana AVT-1569B płytka drukowana + elementy Dodatkowe materiały na CD i FTP: ftp://ep.com.pl, user: 15257, pass: 1ajsf046 wzory płytek PCB karty katalogowe i noty aplikacyjne elementów oznaczonych na Wykazie Elementów kolorem czerwonym Wykaz elementów Rezystory: (0,125 W/1%) R1: 1,1 kv R2: 18 kv R3: 1 kv R4...R6 10...22 kv (trzy jednakowe, 5%) Kondensatory: C1: 2,7 nf (5 mm) C2: 470 pf (5 mm) C3: 10 mf/16 V (5 mm) C4: 0,1 mf (ceramiczny, 5 mm) Półprzewodniki: U1: ATtiny25-20PU (obudowa DIP8) Inne: J1: gniazdo sygnałowe (np. BNC lub cinch) J2: złącze kalibracji (np. szpilkowe 3 1) J3: złącze szpilkowe 2 3 J4: złącze zasilania (np. szpilkowe 2 1) P1, P2: potencjometr 10 kv, liniowy S1: przełącznik 3-pozycyjny Celem projektu było zbudowanie prostego układu opartego na mikrokontrolerze AVR w małej, 8-nóżkowej obudowie, przy czym układ miał wykorzystywać do maksimum możliwości mikrokontrolera i zawierać minimalną liczbę elementów zewnętrznych. Jako serce wybrano układ ATtiny25, zawierający 2 kb pamięci FLASH, 10-bitowy przetwornik A/C i szybki układ czasowy z wyjściami PWM. Do wytwarzania przebiegu sinusoidalnego użyto bezpośredniej syntezy cyfrowej. W pamięci stałej umieszczono 1024 próbki wartości jednego okresu przebiegu sinusoidalnego. Wartości te są odczytywane w odstępach czasu równych okresowi próbkowania T S (1,6 ms). Po każdym odczycie adres pamięci (reprezentujący fazę przebiegu) zmienia się o wartość D=f 1024T S, gdzie f jest częstotliwością generowanego przebiegu. W ogólnym przypadku D jest liczbą ułamkową. Rys. 1. Zasada pracy przetwornika PWM Mikrokontroler używa formatu stałoprzecinkowego. Zarówno faza, jak i jej przyrost mają 32 bity, z których 6 najstarszych jest ignorowanych, kolejne 10 wyznacza adres pamięci, a 16 najmłodszych stanowi część ułamkową. Najmniejsza możliwa do uzyskania niezerowa wartość D to 1/65536; odpowiadałaby jej częstotliwość 1/65536/ (1024 1,6 ms)=0,00931 Hz. W generatorze wartość D zawiera się w przedziale od 0,03276 do 32,76. Rys. 2. Redukcja tętnień dzięki dodaniu 2-go filtra AVT 1569 Synteza odbywa się w przerwaniach Timera 0, które są generowane co 32 okresy wewnętrznego systemowego zegara taktującego (20 MHz). Częstotliwość wytwarzanego przebiegu sinusoidalnego jest więc pochodną częstotliwości zegara systemowego. Źródłem tego zegara jest wewnętrzny generator RC. W danym egzemplarzu układu scalonego jego częstotliwość może się nieco różnić od standardowej. Dlatego w układzie wprowadzono możliwość dostrojenia (ka- 44 ELEKTRONIKA PRAKTYCZNA 5/2010
trzaski potencjometru są filtrowane cyfrowo ze stałą czasową 50 ms. Charakterystyka potencjometru zawiera trzy strefy nieczułości o niewielkiej szerokości. Ułatwiają one ustawienie częstotliwości 20 Hz, 100 Hz, 200 Hz, 1 khz, 2 khz, 10 khz i 20 khz, często używanych w praktyce. Kalibracja Kalibracja wewnętrznego generatora RC polega na zmniejszaniu lub zwiększaniu stanu rejestru OSCCAL. Nową wartość OSCCAL program generatora zapisuje w nieulotnej pamięci EEPROM i wartość ta jest przywracana po każdym włączeniu zasilania. Rys. 3. Schemat ideowy generatora ELEKTRONIKA PRAKTYCZNA 5/2010 libracji) generatora RC z dokładnością ok. 1%. Przetwornik C/A jest oparty na układach modulacji szerokości impulsu (PWM) mikrosterownika. Metoda przetwarzania PWM wykorzystuje fakt, że prostokątny przebieg cyfrowy o amplitudzie U i współczynniku wypełnienia K (0...1) ma wartość średnią równą U K. Po odfiltrowaniu składowej zmiennej przebiegu otrzymujemy napięcie wprost proporcjonalne do współczynnika K. Układ złożony z generatora fali prostokątnej o sterowanej szerokości i z filtru dolnoprzepustowego staje się więc przetwornikiem C/A. Na rys. 1 przedstawiono ideę przetwarzania PWM. Kolorem niebieskim narysowano przebieg cyfrowy (przed filtrem), a kolorem czerwonym jego wartość średnia (po filtrze). Założeniem przyjętym przy projektowaniu generatora było użycie wysokiej częstotliwości f PWM kilka MHz. Modulator PWM, taktowany z 80 MHz i pracujący z rozdzielczością 8 bitów, generowałby jednak przebieg o częstotliwości 80 MHz/256=312,5 khz. Dlatego wykorzystano dwa modulatory. Każdy z nich ma rozdzielczość 4-bitową, a więc f PWM =80 MHz/16=5 MHz. Modulator A przetwarza górne 4 bity każdej próbki, a modulator B 4 bity dolne (o 16-krotnie mniejszej wadze). Przebiegi obu modulatorów są sumowane w R1/R2. Odpowiednie wagi zapewnia stosunek rezystancji wynoszący 1:16. Rezystory tworzą wraz z C1 filtr dolnoprzepustowy 1. rzędu. Sinusoidalny sygnał wyjściowy ma częstotliwość do 20 khz. Filtr nie powinien tłumić go bardziej niż o 0,5 db, stąd częstotliwość graniczna f g wynosząca 70 khz. f PWM wynosi 5 MHz, tętnienia osiągają więc ok. 100 mv pp. Przewidziano ich redukcję poprzez dodanie drugiego filtru dolnoprzepustowego, jak pokazano na rys. 2. Nastawa częstotliwości Zakres generatora jest wybierany 3-pozycyjnym przełącznikiem S1 i wynosi, w pozycjach 1, 2 i 3, odpowiednio 20...200 Hz, 200 Hz...2 khz i 2...20 khz. Przełącznik ustawia na wejściu PB2 napięcia 0 V, +2,5 V lub +5 V, mierzone przez przetwornik A/C. Regulacja częstotliwości wewnątrz zakresu jest wykonywana potencjometrem P1. Ewentualne W celu przeprowadzenia kalibracji należy wybrać zakres 200 Hz...2 khz (przełącznik S1 w pozycji 2), a potencjometrem P1 ustawić częstotliwość 200 Hz, 1 khz lub 2 khz. Zmniejszenie/zwiększenie częstotliwości o jeden krok odbywa się przez dołączenie wejścia PB2 odpowiednio do masy lub +5 V przez rezystor 10 kv. Można w tym celu dodać na stałe rezystor (R6) i zworki (J2) ew. przyciski. Aby zapobiec efektowi drgania styków, program nie reaguje na zmiany stanu na PB2, jeśli są one krótsze niż 20 ms. Podczas kalibracji należy unikać ustawiania częstotliwości większych niż znamionowa, gdyż wiązałoby się to z przekroczeniem dopuszczalnej częstotliwości zegara systemowego. Rys. 4. Schemat montażowy generatora 45
Montaż i uruchomienie Schemat generatora przedstawia rys. 3. Żółtą linią zaznaczono układ w wersji minimalnej. Aby zapewnić możliwość regulacji poziomu sygnału wyjściowego i jednocześnie odciąć składową stałą wynoszącą ok. +2,2 V, należy dołączyć kondensator C3 i potencjometr P2. Elementy R3 i C2 tworzą dodatkowy opcjonalny filtr dolnoprzepustowy, obniżający tętnienia do poziomu kilku miliwoltów. Złącze J2 i rezystor R6 służą do kalibracji częstotliwości. Przez złącze J3 można zaprogramować mikrokontroler (przedtem należy przełączyć S1 w pozycję 2). Ustawienia bitów-bezpieczników są następujące: LOW BYTE = 0xF1: CKDIV8=1, CKO- UT=1, SUT1:0=11 (14 CK+16K CK+64 ms), CKSEL3:0=0001 (PLL Clock_ HIGH BYTE = 0xDF: RSTDISBL=1, DWEN = 1, SPIEN=0, WDTON=1, EESAVE=1, BODLEVEL2:0=111 EXTENDED=0xFF: SELFPRGEN = 1 Zaprogramowanie pamięci flash jest jedyną czynnością wymaganą przy uruchamianiu układu. Do zasilania generatora należy użyć stabilizowanego napięcia stałego 5 V±10%. Jarosław Ziembicki j.ziembicki@gmx.at Generator szumu różowego W elektroakustyce do ustawienia parametrów audio używa się generatora szumu. Podany na wejście urządzenia szum bada się na wyjściu analizatorem widma. Podobne badanie przy użyciu przestrajanego generatora i miernika poziomu sygnału trwa dość długo. Generator szumu i analizator dają wynik w ułamku sekundy. Dzięki temu na bieżąco możemy widzieć zmiany wnoszone przez np. korektor barwy dźwięku. Badaniu pasma przenoszenia można poddać wzmacniacz, głośniki czy mikrofon. Szum może pomóc ustawić korektorem graficznym płaską charakterystykę przenoszenia zestawu audio, łącznie z głośnikami. Szum można wygenerować przy użyciu komputera z kartą dźwiękową. Rozwiązanie jest proste, ale może nie być zbyt wygodne, jeśli nie dysponujemy laptopem. W Internecie można znaleźć wiele schematów generatorów. Najczęściej są to ukła- Rys. 1. Schemat ideowy generatora szumu dy oparte o szumiące złącze PN tranzystora lub diody. Generatory takie są proste, ale ich parametry nie są powtarzalne. Dobry generator można zbudować na procesorze sygnałowym. Niestety, takie procesory nie są zbyt tanie. Używając jednak generatora pseudolosowego zbudowanego z rejestru przesuwnego i bramki exor oraz filtru, można zbudować AVT-1571 w ofercie AVT: AVT-1571A płytka drukowana AVT-1571A płytka drukowana + elementy Dodatkowe materiały na CD i FTP: ftp://ep.com.pl, user: 15257, pass: 1ajsf046 wzory płytek PCB karty katalogowe i noty aplikacyjne elementów oznaczonych na Wykazie Elementów kolorem czerwonym Wykaz elementów R1, R3: 220 kv R2, R4: 100 kv R5: 47 kv R6: 22 kv R7: 10 kv R8: 4,7 kv R9: 2,2 kv R10: 1 kv C1, C2, C4, C12: 10 mf/16 V C3, C5: 47 nf C6: 22 nf C7: 10 nf C8: 4,7 nf C9: 2,2 nf C10: 1 nf C11: 470 pf U1: ATtiny85-20SU U2: 78L05 U3: TL062 D1: S380 mostek prostowniczy D2: dioda LED J1: PC-GL2.1 złącze J2: goldpin 3 2 J3, J4: goldpin 2 1 AVT 1571 Na CD: karty katalogowe i noty aplikacyjne elementów oznaczonych na wykazie elementów kolorem czerwonym 46 ELEKTRONIKA PRAKTYCZNA 5/2010
List. 1. Najważniejszy fragment programu //Pętla generująca szum - LSFR void LosLSFR() { while(1) { ClkEor; // Do pomiaru częstotliwości zegarowej wdt_reset(); // Reset WDG if ( (_rand(255) & 1) == 0 ) // Zależnie od wylosowanej liczby OutH; // ustaw wyjście w stan wysoki else OutL; // lub niski } } //Generuje liczbę pseudolosową int _rand(unsigned int zakres) { static unsigned long lfsr = 1; lfsr = (lfsr >> 1) ^ (-(lfsr & 1) & 0xd0000001); return( lfsr ); } Generator może być zasilany napięciem w zakresie 8...15 V, AC lub DC, ponieważ ma własny prostownik i stabilizator. Rys. 2. Schemat montażowy generatora szumu Montaż i uruchomienie Schemat montażowy generatora umieszczono na rys. 2. Montaż generatora przeprowadzamy w sposób klasyczny. Po wlutowaniu wszystkich elementów (poza mikrokontroletani generator o zadowalających parametrach. Chciałem generator zbudować w taki właśnie sposób, ale przyszedł mi do głowy inny pomysł. Generator na rejestrach zastąpiłem mikrokontrolerem. Dzięki temu można eksperymentować z różnymi algorytmami pseudolosowymi. Schemat generatora pokazano na rys. 1. Zastosowałem mikrokontroler AVR ATtiny85. Wybór procesora był podyktowany jego małymi wymiarami, niską cena oraz bardzo niską ceną debuggera AVR Dragon. W docelowym rozwiązaniu wystarczy ATtiny25, ponieważ program zajmuje niecałe 700 b. Sygnał pseudolosowy jest filtrowany w pasywnych filtrach RC (R4-R9 i C5-C11). Odfiltrowany sygnał jest buforowany przez wzmacniacz operacyjny U3B. Na wyjściu wzmacniacza dostępny jest sygnał szumu różowego (złącze J4). Dodatkowo, sygnał bez filtrowania trafia na bufor U3A. Dzielnik R1/ R2/C3 ogranicza amplitudę sygnału na wyjściu U3A do poziomu zbliżonego do sygnału na wyjściu U3B. Ponadto, dzięki zastosowaniu w dzielniku kondensatora, wysokie częstotliwości leżące poza pasmem akustycznym są odcinane, dzięki czemu w szumie są ograniczone wyższe harmoniczne. Na wyjściu J3 bufora dostępny jest sygnał szumu białego. Program Dzięki zastosowaniu mikrokontrolera program jest banalny. Napisano go w języku C, w bezpłatnym środowisku AVR Studio. Do generowania liczb pseudolosowych C udostępnia funkcję rand(). Niestety funkcja ta wykonuje się dość długo, przez co umożliwia przy zegarze 8 MHz generowanie szumu z częstotliwością około 4,5 khz. Próbowałem użyć innego algorytmu. Wykonywał się około 3 razy szybciej, ale to wciąż za mało, aby generować dobry szum. Zastosowałem więc metodę LSFR (http://en.wikipedia.org/wiki/ Linear_feedback_shift_register). Dzięki temu uzyskałem częstotliwość generowania szumu około 120 KHz, co przy ciągu 32-bitowym, daje powtórzenie po 35 sekundach. Najistotniejszy fragment kodu programu znajduje się na list. 1. Pierwszą czynnością po uruchomieniu programu jest ustawienie kierunku portów procesora. Następnie funkcja srand() inicjalizuje generator pseudolososowy. W głównej pętli sprawdzany jest stan wejścia PB0. Jeśli wejście to jest w stanie wysokim, to szum jest generowany funkcją LSFR. Gdy wyprowadzenie to jest podłączone do masy, szum jest generowany funkcją rand(). Wyprowadzenie PB0 jest testowane tylko raz po restarcie procesora. Rys. 3. Bity konfiguracji rem) podłączamy zasilanie. Następnie kontrolujemy wartość napięcia na wyjściu stabilizatora. Jeśli napięcie jest poprawne, można zamontować mikrokontroler. Można go zaprogramować przed wlutowaniem lub po nim. Służy do tego 6-pinowe złącze J2. Ustawienie bitów konfiguracyjnych procesora przedstawiono na rys. 3. Po poprawnym zaprogramowaniu procesora urządzenie podejmie pracę. Sygnał szumu można skontrolować, podłączając do wyjścia wzmacniacz lub słuchawki. Płytka jest przeznaczona do umieszczenia w obudowie KM35. Sławomir Skrzyński, EP slawomir.skrzynski@ep.com.pl www.sklep.avt.pl ELEKTRONIKA PRAKTYCZNA 5/2010 47
Spowalniacz serwomechanizmu Modelarze zajmujący się budową modeli zdalnie sterowanych często napotykają problem, jak odwzorować powolne ruchy mechanizmów modelu. Dotyczy on takich mechanizmów, jak opuszczane podwozie lub klapy w modelach samolotów lub śmigłowców, obracane wieże artyleryjskie w modelach okrętów. Podałem tylko przykłady. Każdy modelarz może z łatwością rozszerzyć tę listę. Współczesne aparatury projektowane są z myślą o jak najszybszej odpowiedzi serwomechanizmu na ruch drążka lub przełącznika w nadajniku. Oczywiście można połączyć bezpośrednio serwomechanizm z odbiornikiem, ale efekt w przypadku choćby opuszczanego i podnoszonego podwozia jest po prostu śmieszny. Koła wyskakują z kadłuba, jakby poruszane były sprężyną. Sam widziałem kilka takich rozwiązań na filmach dostępnych w Internecie i za każdym razem miałem wrażenie zupełnego braku realizmu. Opisywane urządzenie ma pomóc w rozwiązaniu tego problemu. Odbiorniki zdalnego sterowania mogą być zasilane napięciem 3,5...9 V, natomiast serwomechanizmy 4,8...6 V. Aby dostosować napięcie ze źródła zasilania do potrzeb toru odbiorczego, wykorzystuje się stabilizatory, które obniżają napięcie. Sterowanie modelem odbywa się Rys. 1. Parametry impulsu sterującego pracą serwomechanizmu poprzez wysyłanie impulsów o określonym okresie powtarzania i zmiennym wypełnieniu do serwomechanizmów. Wypełnienie impulsu określa aktualne położenie serwomechanizmu. Typowym czasem powtarzania impulsów sterujących jest 20 ms, chociaż serwomechanizmy działają poprawnie nawet przy czasach powtarzania 30 i więcej ms. Czas trwania impulsu to 1...2 ms. Położeniu środkowemu serwomechanizmu odpowiada czas 1,5 ms. Amplituda impulsu zawiera się w granicach 3...5 V. Na rys. 1 przedstawiono parametry impulsu sterującego serwomechanizmem. Opisywany układ służy do sterowania urządzeniami pomocniczymi, wobec czego dokładność ustawienia nie ma tu większego znaczenia, natomiast kluczową rolę odgrywają AVT 1570 przede wszystkim małe wymiary, niski pobór prądu, możliwość pracy przy dużej rozpiętości napięć zasilania, prostota i niski koszt urządzenia. Aby spowolnić ruch serwomechanizmu, należy wykonać trzy czynności: zmierzyć długość impulsu z odbiornika, odczytać wartość opóźnienia oraz zgodnie z odczytaną wartością zmieniać wypełnienie impulsu wysyłanego do serwomechanizmu, aż do osiągnięcia zrównania się wypełnienia impulsów na wejściu i wyj- AVT-1570 w ofercie AVT: AVT-1570A płytka drukowana AVT-1570B płytka drukowana + elementy Dodatkowe materiały na CD i FTP: ftp://ep.com.pl, user: 15257, pass: 1ajsf046 wzory płytek PCB karty katalogowe i noty aplikacyjne elementów oznaczonych na Wykazie Elementów kolorem czerwonym Wykaz elementów R1, R2: 1 kv R3: 300 V P1: 10 kv potencjometr montażowy C1,C2: 10 mf (ceramiczny, SMD) U1: SPX1117-MP3.3 U2: ATiny85 (SMD) T1: BSS138 D1: LED (SMD) Z1,Z2: goldpin męski, kątowy 3 1 ZW1: goldpin męski, prosty 6 1 ZW2: goldpin męski, prosty 3 1 Na CD: karty katalogowe i noty aplikacyjne elementów oznaczonych na wykazie elementów kolorem czerwonym Rys. 2. Schemat elektryczny układu spowalniacza 48 ELEKTRONIKA PRAKTYCZNA 5/2010
Rys. 3. Schemat montażowy spowalniacza ściu. Mikrokontroler musi zatem być wyposażony w co najmniej 2 timery, w tym jeden umożliwiający generowanie impulsu o zmiennym wypełnieniu. Musi mieć również możliwość zadawania wielkości opóźnienia. Do tego celu dobrze nadaje się potencjometr połączony z wejściem przetwornika A/C. Z tych powodów wybór padł na ATtiny85 w obudowie SMD. Na rys. 2 widać schemat układu. W celu umożliwienia pracy układu w szerokim zakresie napięć zasilania zastosowano stabilizator SX1117. Układ ten zapewnia poprawną stabilizację napięcia wyjściowego już przy napięciu zasilania 4,5 V. Maksymalne napięcie wejściowe nie może przekraczać 20V. Napięcie zasilania serwomechanizmu jest podawane bezpośrednio z odbiornika. Jest to najczęściej stosowana metoda. Każdy szanujący się odbiornik może zasilać wszystkie podłączone do niego serwomechanizmy. Impulsy wejściowe z odbiornika są podawane na złącze Z1. Należy zwrócić uwagę na układ wyprowadzeń złącza. Jest on typowy dla zdecydowanej większości aparatur zdalnego sterowania. W celu zminimalizowania zewnętrznych elementów wykorzystałem wewnętrzny generator RC procesora. Pracuje on z częstotliwością 8 MHz i dokładnością wystarczającą na potrzeby urządzenia. Pomiar wypełnienia impulsu jest realizowany przez timer T0 mikrokontrolera. Częstotliwość taktowania ustawiono na 125 khz. Ponieważ zmiana wypełnienia to około 1 ms, dokładność pomiaru wynosi ok. 1,2%. Jeżeli założymy, że serwomechanizm ma zakres ruchu 180, dokładność ustawienia wynosi ok. 2. Program sprawdza, czy nie został przekroczony minimalny oraz maksymalny czas wypełnienia, co może się zdarzyć w przypadku działania odbiornika. Jeżeli sprawdzenie da wynik negatywny, wynik pomiaru jest ignorowany. Do generowania impulsu sterującego serwomechanizmem użyłem timera T1. Jest on taktowany przebiegiem o częstotliwości 100 khz. Przy tak dobranej częstotliwości impuls wyjściowy ma od 10 ms do 2,54 ms. Taki zakres umożliwia pełny ruch serwomechanizmu. Dokładność ustawienia wynosi 1/254 całego zakresu. Poza generowaniem impulsu sterującego timer T1 wyznacza czas powtarzania impulsów. Czas jego pracy podzielony jest na 13 odcinków czasowych. W jednym generowany jest impuls, w pozostałych 12 do rejestru porównania jest wpisywana wartość FF, co blokuje wyjście licznika. Rezystor R5 ogranicza prąd wejścia PB2 procesora. Potencjometr P1 jest podłączony do wejścia przetwornika A/C. Służy on do ustawiania czasu opóźnienia ruchu. Czas opóźnienia może być ustawiany w zakresie 1...10 s. Sterowanie serwomechanizmem odbywa się poprzez tranzystor T1. Zwora Z2 służy do ustawiania napięcia zasilającego tranzystor. Umożliwia to zmianę amplitudy impulsów sterujących serwomechanizmem. Dioda LED, po połączeniu wyprowadzeń ZW1 5 i ZW1-3, sygnalizuje pojawianie się poprawnych impulsów z odbiornika. Złącze ZW1 służy do zaprogramowania procesora. Zygmunt Dziewoński zygdziew@polnet.cc R E K L A M A ELEKTRONIKA PRAKTYCZNA 5/2010 49