Jste zde

Programovateľný - dvojitý generátor pravouhlích impulzov s meniteľnou striedou.

obr.5.JPG

Určite každému amatérovi, ale možno i profesionálovi sa stalo, že potreboval na odskúšanie svojho zapojenia generátor pravouhlých impulzov. Mne sa to stalo už niekoľkokrát. Keďže nemám k dispozícii profesionálny (pre mňa moc drahý),vždy som to riešil postavením jednoduchého kmitavého obvodu z tranzistorov, alebo operačných zosilňovačov, na skúšobnej doske, ktorú som po odladení vždy rozobral. Tu bol problém jednoduchej a širokej zmeny frekvencie a hlavne striedy. Preto som sa rozhodol pre stavbu veľmi jednoduchého generátora z hľadiska HW aj SW. Pozostáva z dvoch integrovaných obvodov ATmega162 a MAX232.

Úvod:

Určite každému amatérovi, ale možno i profesionálovi sa stalo, že potreboval na odskúšanie svojho zapojenia generátor pravouhlých impulzov. Mne sa to stalo už niekoľkokrát. Keďže nemám k dispozícii profesionálny (pre mňa moc drahý),vždy som to riešil postavením jednoduchého kmitavého obvodu z tranzistorov, alebo operačných zosilňovačov, na skúšobnej doske, ktorú som po odladení vždy rozobral. Tu bol problém jednoduchej a širokej zmeny frekvencie a hlavne striedy. Preto som sa rozhodol pre stavbu veľmi jednoduchého generátora z hľadiska HW aj SW. Pozostáva z dvoch integrovaných obvodov ATmega162 a MAX232.

Popis generátora:

Potreboval som zostrojiť generátor s dvomi nezávislými výstupmi, rozsahom frekvencii 0,1Hz až 1MHz, so zmenou striedy od 5 až do 95 %. Na moje riešenie som využil mikroprocesor ATmega162, ktorý je jeden z mála s dvomi 16 bitovými čítačmi / časovačmi TC1 a TC3 s možnosťou PWM módu (Pulse Width Modulation).Konštantypre nastaveniefrekvencie a striedy vypočítavam v PC a to jednoduchým programom v EXCEL a sériovou linkou (USART) ich posielam do EEPROM mikroprocesora. Môžem si takto kedykoľvek predprogramovať až desať dvojíc, t.j. 20 impulzných priebehov s rôznymi frekvenciami a striedami. Zvolenú dvojicu volím dvoma tlačitkmi (+) a (-) a je signalizovaná binárne štyrmi LED diódami. (prvá dvojica má pozíciu 0 – všetky LED zhasnuté). Striedy mením 2 tlačítkami (+) a (-) pre TC1 a 2 tlačítkami (+) a (-) pre TC3. Zmena je o 5%.

Pre obidva čítače/časovače som použil mód fast Pulse Width Modulation(rýchla pulzne šírková modulácia). Princíp je podrobne popísaný v technickej dokumentácii od ATMEL na stránke http://www.atmel.com/dyn/products/product_card.asp?part_id=2023

Stručný popis princípu Fast PWM mode:

TC1 aj TC3 majú po dva výstupné komparačné registre, OCRnA a OCRnB, kde n je buď 1 alebo 3. V tomto móde, číslo v registri OCRnA nastavuje TOP t.j. vrchol počítania čítača TCn. Po jeho dosiahnutí sa počítadlo automaticky znuluje a znovu počíta od 0000H po TOP. Týmto číslom teda meníme frekvenciu impulzov. Čím menšie číslo je v OCRnA, tým vyššia je frekvencia. Výstupy impulzov sú na pinoch OCnB (pin 29 pre TC1 a pin 5 pre TC3). Výstupy OCnA nekmitajú. Číslom v druhom komparačnom registri OCRnB sa nastavuje šírka impulzu (menšie číslo širší impulz). Musí platiť , číslo v OCRnA musí byťvždy väčšie ako číslo v OCRnB, aby F-PWM vôbec pracovala. Popis je jasný z obrázku 1.

Princíp Fast PWM mode
Obr.1. Princíp Fast PWM mode
 

Z obrázku je vidieť, že výstup OCnB (na obr.1 OCnx) je držaný na nule až kým počítadlo TCn nedosiahne hodnoty komparačného registra OCRnB. Od tejto hodnoty výstup OCnB prepne do 1 a v tejto hodnote zostava až do dosiahnutia TCn = TOP (TOP hodnota je uložená v druhom komp. registri OCRnA). Pri tejto hodnote sa počítadlo automaticky znuluje a cyklus sa opakuje.

Frekvencia sa dá vypočítať podľa vzorca (ako uvádza výrobca):

                                               fOCnB = fosc / (N*(1+TOP))                                       1.

kde

fosc - je taktovacia frekvencia procesora (je použitý interný oscilátor 8MHz)

N – deliaci pomer preddeličky na vstupe počítadiel. Pre TC1 môže byť N =1, 8, 64, 256, alebo 1024, pre TC3 môže byť N =1, 8, 16, 32, 64, 256, alebo 1024. Vidíme, že TC3 má viac kombinácii, z toho vyplýva aj väčšia oblasť frekvencií. Zapojenie generátora je na obr.2

Zapojenie generátora
Zapojenie generátora: obr.2
 

Pozostáva z dvoch obvodov – z mikroprocesora ATmega162 a z MAX232 na komunikáciu s PC.

Konektor JP1 – na pripojenie 6 tlačítiek k PA0 az PA5.

Pin 9- PA0 – tlačítko Zníž výber, Pin 8 -PA1 -  tlačítko Zvýš výber
Pin 7 -PA2 - tlačítko Zníž striedu TC1 Pin 6 -PA3 - tlačítko Zvyš striedu TC1
Pin 5- PA4 - tlačítko Zníž striedu TC3  Pin 4 -PA5 - tlačítko Zvyš striedu TC3

Konektor JP2 – na pripojenie LED ,

Pin 6 - PC0 – 20, pin 5 - PC1 – 21, pin 4 - PC2 – 22, pin 3 - PC3 – 23

Konektor JP3 – výstupy impulzov , pin 2 - výstup TC1, pin 4 – výstup TC3

Konektor JP4 – JTAGinterfacena odlaďovanie programu.


Plošný spoj: obr.3
 

Software

Stručný popis SW v ATmega162:  Procesor po inicializácii prejde do SLEEP modu. Tu čaká na prerušenie buď od Sériového portu (UART0) alebo od tlašítok (Pin Change Interrupt Request 0).

Prerušovacia rutina od UART0 načíta konštanty poslané z EXCELu PC, program ich uloží na patričnú adresu v EEPROM a zároveň sa na tieto hodnoty nastavia počítadlá, ktoré okamžite začnú vyrábať impulzy. Po vykonaní rutiny procesor prejde znovu do SLEEP modu

Prerušovacia rutina Pin Change Interrupt – po zmene logického stavu na porte A, rutina zistí ktoré z tlačítok bolo stlačené a vykoná sa príslušná udalosť. Zmena striedy prebieha následovne: najskôr vypočítam aká je momentálna strieda - st[%]=OCRnB*100/OCRnA,    k nej pričítam alebo odčítam 5 a porovnám či je menšie ako 5 alebo väčšie ako 95. Potom vypočítam novú hodnotu OCRnB=st[%]*OCRnA/100, ktorú zapíšem do registra. Zmena striedy nastáva hneď po zápise. Po vykonaní rutiny procesor prejde znovu do SLEEP módu.

Pozn: Program v inicializačnom procese zisťuje, či je na posledných dvoch miestach pamäte EEPROM zapísaná konštanta 5AA5H. Ak nie, tak na nultú pozíciu pamäte pre voľbu frekvenčných dvojíc zapíše konštanty frekvencií 1kHz pre TC1 a 100Hz pre TC3 a impulzy sú okamžite vysielané. Zároveň zapíše na koniec pamäte už spomínanú konštantu  5AA5H. Týmto je ošetrené to, že keď ešte nie je naprogramovaná EEPROM z PC, aby už generátor pracoval aspoň na nultej pozícií (nesvieti ani jedna LED).

Stručný popis SW v programe EXCEL: Program vypočítava konštanty potrebné pre generátor z nami zadanej požadovanej frekvencie. Ako už vieme frekvencia sa vypočíta podľa vzorca :            

fOCnB = fosc / (N*(1+TOP))                                                   1.

pričom            N = 1, 8, 16, 32, 64, 256, alebo 1024

                        TOP = 0000H až FFFFH

                        fosc = 8MHz (frekvencie pod 0,12Hz už nie je možné dosiahnuť s 8MHz

 preto mením frekvenciu na 4Mhz, čiže zapojím preddelič 2.)

 

Pozn:   frekvencie menšie ako 0,12Hz už nie je možné dosiahnuť s 8MHz preto excel pošle do mikroprocesora požiadavku na zmenu frekvencie na 4MHz. Je nutné si uvedomiť, že procesor potom pracuje o polovicu pomalšie a na jednej úrovni frekvenčných dvojíc nemôže byť zadaná frekvencia ktorá potrebuje fosc = 8MHz a druhá ktorá potrebuje fosc = 4MHz. Procesor sa prepne na posledne vyslanú frekvenciu. Príklad: Ak na TC1 nastavím 0,5Hz (treba fosc = 8MHz) a na TC3 0,1Hz (treba fosc = 4MHz). Pretože TC3 som nastavoval ako druhú, procesor ostane prepnutý na fosc = 4MHz, čím na TC1 nebude 0,5Hz, ale 0,25Hz.

Program cyklicky vypočítava frekvenciu podľa rovnice 1. - pre každé N dosadzuje TOP od 0 po 65535. Zároveň počíta delta1 = focn – fvyp (zadaná frekvencia mínus vypočítaná). Ak je delta1 = 0, t.j. frekvencie sa rovnajú, program skončí, hodnota frekvencie sa zapíše do tabuľky, kde sa zapíšu aj konštanty, ktoré treba poslať do mikroprocesora (fclk, N, TOP). . Ak sa nenašla rovnosť, ale našla sa delta1 > 0, táto hodnota sa zapíše do tabuľky a pokračuje výpočet pre ďalšie N. Keď sa nenájde rovnosť, do tabuľky sa zapíšu všetky konštanty pre každé N a delta1 > 0. Riadok, kde je najmenšia delta1 ostane šedý a tieto hodnoty budú poslané do mikroprocesora. Viď obrázok 4. Tu vidíme výsledok pre zadanú frekvenciu focn=110000 Hz. Vidíme, že najbližšia možná frekvencia, aká sa dá vygenerovať, je od požadovanej o cca. 411 Hz menšia.

Žiadanú hodnotu frekvencie zadávame do bunky 12A pre TC1 a 15A pre TC3. Po zadaní dvakrát klikneme na bunke kde sme zadali frekvenciu a po chvíli sa otvorí okno ako na obr.5. Horné 3 okienka sú vyplnené hodnotami z riadku s najmenšou deltou, v ďalšom môžeme zadať striedu od 1 do 99% a v ďalšom poradie. Po stlačení OK sa hodnoty automaticky pošlú do mikroprocesora a na výstupe sa hneď generuje poslaná frekvencia.

Záver

Generátor som zostrojil na univerzálnom plošnom spoji, kde som osadil transformátor aj zdroj.   Celé je to zabudované v plastovej krabičke, s AL predným aj zadným panelom. Ku generátoru som pridal aj merač frekvencie, ktorý som pred rokmi kúpil ako stavebnicu v GM electronic pod názvom Merač kmitočtu 10Hz – 100MHz s LCD. Tým som generátor rozšíril aj o merač frekvencie a zároveň  môžem merať aj frekvencie môjho generátora. V prípade záujmu o stavbu generátora môžem MAILOM dodať súbor hex. pre ATmega162, ako aj excelovský program.


Obr.4
 

Obr. 5

Komentáře

Někde je asi chyba, zkouším to ze třech PC, ale obrázky nejsou nikde vidět

Prosim o kontakt. Zaujala ma dane schema.
Dakujem

Které prase kreslilo DPS?
Fušeřina...

Skuste pouzit niektore z obvodov Luminary Micro (TI) a jednoduchym naprogramovanim pomocou kniznych funckii dosiahnete pekne vysledky. Nehovoriac o tom, ze je mozne pouzit naraz niekolko nezavislych PWM kanalov. Cital som tu kdesi, ze pri navrhu s tymito obvodmi je treba stvorvrstvovu DPS a ine zvasty. Ja pouzivam s uspechom LM3S818 na doma vyrobenych DPS. Ak chcete mat tieto kniznice v ROM a pouzit operacny system skuste SafeRTOS, ktory je uz v obvodoch priamo "napaleny" a ine velmi zaujimave veci a iny pristup co vam Atmega128 isto neponukne.