Programy ćwiczeń laboratoryjnych:
Transkrypt
Programy ćwiczeń laboratoryjnych:
SYSTEMY POMIAROWE WIELKOŚCI FIZYCZNYCH - LABORATORIUM Ćw. 11 Układy normalizacji sygnałów w przemysłowych systemach pomiarowych Modułowy system kontrolno-pomiarowy (μMAC-1060) Problemy teoretyczne: Kondycjonowanie sygnałów analogowych (na przykładzie modułów serii 5B f-my ANALOG-DEVICES) Próbkowanie i kwantowanie sygnałów analogowych, Przetwornik A/C typu U/f, Własności mikroprocesorów serii I80186/188 Program ćwiczenia: 1. Zapoznać się z mikrokontrolerem MAC-1060 na podstawie skróconej dokumentacji technicznej. architektura systemu, organizacja pamięci RAM, ROM, przetwornik A/C i C/A zapoznać się z podstawowymi dyrektywami systemu zapoznać się z podstawowymi funkcjami programowymi systemu zapoznać się z przykładowym programem demonstracyjnym wz.c. 2. Włączyć zasilanie mikrokomputera IBM PC-386DX40. Wybrać opcję startową systemu operacyjnego AZTEC - uMAC1060. Po uruchomieniu zgłasza się program NortonComander v5. Zweryfikować zmienne systemowe poleceniem SET (CLIB, INCLUDE i PATCH – niezbędne do poprawnego działania cross-compilatora C). 3. Włączyć zasilanie mikrokontrolera MAC-1060. 4. Jako katalog roboczy wybrać katalog: C:\AZTEC\ROBOCZY. Utworzyć poleceniem md nowy unikalny katalog dla grupy laboratoryjnej. Z katalogu WZORC skopiować do swojego katalogu pliki: wz.c, docc.bat, doram.bat. Poleceniem attrib dokonać modyfikacji atrybutu READ_ONLY na wyłączony, co umożliwi edycję w/w pliku. 5. Uruchomić program komunikacyjny: TED.EXE oraz wywołać funkcję RESET systemu MAC-1060 specjalnym przyciskiem. 6. Zapoznać się z podstawowymi funkcjami programu TED.EXE ( F10, ALT-F, ALT-O, ... ) 7. Zapoznać się z podstawowymi funkcjami bezpośredniego sterowania systemu MAC-1060 (LOAD, RUN, CLEAR, DEBUG, SETUP, CONSOLE, AUX1, AUX2, TIME, DATE,RAM, REV, HELP, QUIT) 8. Przeprowadzić podstawowe testy systemu w oparciu o wybrane funkcje jądra systemu (autokalibracja przetworników A/C i C/A, kontrola napięć zasilających, test komunikacji) 9. Uruchomić przykładową aplikację programową (program wz.c). W oparciu o ten program dokonać jego modyfikacji zgodnie ze wskazówkami prowadzącego zajęcia. Program powinien zawierać: część nagłówkową definiującą przy pomocy dyrektyw #define unikalne numery/nazwy kanałów pomiarowych, oraz specyficzne zmienne dla programu, część wykonawczą inicjującą działanie programowanych kanałów pomiarowych uwzględniająca analizę błędów konfiguracyjnych kanałów pomiarowych (sygnalizacja błędów oraz awaryjne zatrzymanie systemu), część pomiarową wywołującą procesy samo-kalibracji systemu dla co najmniej jednego kanału pomiarowego, część pomiarową, realizującą pomiary w wybranych kanałach pomiarowych w jednostkach fizycznych mierzonych wielkości, 1 SYSTEMY POMIAROWE WIELKOŚCI FIZYCZNYCH - LABORATORIUM część pomiarową, realizującą pomiary w wybranych kanałach pomiarowych bez procesu skalowania (wyniki bitowe), część rejestrującą wyniki pomiarów pogrupowane w rekordy danych jednakowego typu w nieulotnej pamięci RAM systemu, część pomiarową rejestrującą czas (interwały czasu), zaproponować programowy model wyzwalania pomiaru w równych interwałach czasu przy wykorzystaniu procedury WAIT lub procedur obsługi zegarów systemowych i obsługi wewnętrznych przerwań. zaproponować moduł programowy analizy danych pomiarowych (wartość minimalna, maksymalna, średnia, średnia ruchoma z N-wyników pomiarowych, bufor cykliczny danych pomiarowych). 8. Przeprowadzić kompilację programu poleceniem: docc wz (komunikaty przebiegu procesu kompilacji na konsoli) 9. Przeprowadzić konsolidację programu poleceniem doram wz 377 (komunikaty przebiegu procesu konsolidacji na konsoli) 10. Uruchomić program ted i pod jego kontrolą poleceniem LOAD wz.exe przepisać program do systemu uMAC-1060 (podczas transmisji przełączyć tryb pracy mikrokomputera terminala – przycisk TURBO w stan Lo). 11. Poleceniem RUN uruchomić załadowany program. Podczas obserwacji wyników działania programu należy dokonać rejestracji wybranych fragmentów uzyskiwanych danych do pliku ted.log (ALT-F1). 12. Przeprowadzić w programie konfigurację kanałów analogowych pakietu jednostki centralnej μMAC-1060: REF_POS, GND_POS, TEMP_POS, IN5B_POS, PWR_POS, DAC0_POS, DAC1_POS, OUT5B_POS oraz kanałów analogowych znajdujących się na module rozszerzającym pnl=1 współpracującymi z modułami kondycjonującymi typu 5B: 5B47-J-01 i 5B34-N. Moduł typu 5B47-J-01 współpracuje z termoparą typu J, moduł 5B34_N współpracuje z rezystorem dekadowym, który symuluje rezystor termometryczny 120 Ω nikiel RTD. 13. W każdym kanale pomiarowym dokonać skalowanego przetwarzania A/C przy pomocy procedury ain oraz przetwarzania binarnego iain, porównać wyniki przetwarzania A/C tymi procedurami. 14. Wykorzystać aktywnie w programie funkcję adccal tak, aby przed każdym skalowalnym pomiarem wartości analogowej realizowana była funkcja samo-kalibracji. 15. Zapoznać się z działaniem bufora cyklicznego. Dokonać modyfikacji współczynników filtru cyfrowego – zgodnie z poleceniem prowadzącego zajęcia. Dokonać oceny działania filtru na przykładzie przetwarzania A/C w wybranym kanale pomiarowym (zwrócić uwagę na warunki początkowe – pierwsze kroki realizacji filtru cyfrowego), 16. Zapoznać się z obsługą przetwornika C/A, podstawowymi parametrami konfigurowania kanałów przetwarzania C/A (w szczególności parametr slew rate). Zaobserwować działanie przetwornika C/A dla parametrów: period=1, du=1.5, slew=NO_SLEW period=1, du=1.5, slew=1.0 period=1, du=1.5, slew=2.0 17. Źródłową wersję programu zamieścić w sprawozdaniu (wraz z komentarzami) oraz dołączyć fragment uzyskanych wyników (funkcja log programu ted.exe). Literatura: 1. Z.Kulka, A.Libura, M.Nadachowski: Przetworniki analogowo-cyfrowe i cyfrowo-analogowe. WkiŁ, Warszawa 1987 2 SYSTEMY POMIAROWE WIELKOŚCI FIZYCZNYCH - LABORATORIUM Przykładowy program: #include <stdio.h> #include <signal.h> #include <math.h> #include <umac1060.h> #define N 10 #define _C_RTD #define _C_TPR #define _C_OUT /* rozmiar bufora cyklicznego */ 5 6 0 char linia[]={"===================================================="}; int ib=0; /* wskaznik zapisu buf. cykl */ float buf_c[N]; float Uz=0.0, du=1.5, slew=1.6; /* wspolczynniki filtru */ float wsp_a[N]={ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 }; main() { char tydz; int err, mies, dzien, rok, i; int godz, min, sek; float period; char kern[81]; void periodservis(); for (i=0; i<N; i++) buf_c[i]=0.0; printf("\n%s", linia); krev(kern); printf("\nSYSTEM: %s", kern); gdate(&tydz, &mies, &dzien, &rok); gtime(&godz, &min, &sek); printf("\n%c 20%02d:%02d:%02d %02d:%02d:%02d", tydz, rok, mies, dzien, godz, min, sek); printf("\n%s", linia); wait(2); if (err=intype(_C_RTD,1,2,_5B34_N,_20ms)) printf("\n INTYPE err %d\n",err); if (err=intype(_C_TPR,0,TEMP_POS,uMAC1060_TEMP_IN,_20ms)) printf("\n INTYPE err %d\n",err); if (err=outype(_C_OUT,0,0,uMAC1060_10V_OUT, -5.0, slew)) printf("\n OUTYPE err %d\n",err); /* NO_SLEW = -1.0 */ adccal(OFF,_50HZ); period=1.0; setint(SIG_PER0, &period, 3); signal(SIG_PER0, periodservis); while (1); } /*end main*/ void periodservis() { int i; float x, y; adccal(FORCE, _50HZ); printf("\n%6.2fs RTD=%6.2f T.pr=%5.1f", timer(), x=ain(_C_RTD), ain(_C_TPR)); buf_c[ib]=x; /* filtr */ for (i=0, y=0; i<N; i++) y+=buf_c[(ib-i+N)%N]*wsp_a[i]; printf(" y=%6.2f", y); ib++; ib%=N; printf(" | Uzad= %6.2f Uwy=%6.2f", Uz, aotr(_C_OUT)); if (fabs(Uz)>=9.0) du=-du; aot(_C_OUT, Uz+=du); } 3