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