No dzięki za wszelkie wypowiedzi, w sumie to materiał do przemyśleń się zebrał i jest tak:
kalibrację AD2 rzeczywiście warto zrobić, po takim zabiegu wyniki nie są już tak dramatycznie rozjechane, choć idealne też nie są....
o ile pomiar napięc rzędu setek mV jest w miarę ok, to pojedyncze mV to jednak balansowanie na krawędzi, albo sygnał się wzmocni, albo konieczna będzie obróbka matematyczna, takie naiwne (jak w moim LV z pierwszego posta) podejście po prostu się nie sprawdza
as2-zrzut ekranu45.png
Abbc3 Offtopic
sprzęt niejako wzorcowy

w/g którego pracowicie ustawiałam niedobory wartości
IMG_5059.JPG
finał setupu części analogowej wyglądał u mnie jak poniżej
as2-zrzut ekranu44.png
martwi mnie tylko fakt, że cała akcja była przy migających na zmianę statusach OK i LV (low voltage) czyli USB słabo zasilało zabawkę, momentami nawet 4.5V

no nic, współczynniki korekcyjne mam w pliku tak czy inaczej, jak kogoś interesuje mogę wystawić dla porównania
następna zmiana to rezygnacja z zasilania z AD2 na rzecz zewnętrznego liniowego zasilacza +/-5V, bo wcześniej to takie cuda biegały po ekranie:
as2-zrzut ekranu46.png
do tego ruchu zmotywował mnie schemat
j23 i cewka przed LM, jednak przy tak maleńkich sygnałach do mierzenia z zasilaniem trzeba uważać....
no i na koniec, LabVIEW oczywiście jest super i ekstra i w ogóle i tak dalej, ale czarno na białym też chciałam zobaczyć

zatem poniżej nieco na kolanie napisany programik odczytujący napięcia z dwóch kanałów AD2 i piszący to na konsole, to pod Linux, ale pewnie na Win też ruszy, chyba... tak ogólnie polecam SDK do AD2 bo tam manipulujemy pudełkiem bez pośredników, tak na krótko.
as2-zrzut ekranu47.png
Kod: Zaznacz cały
#include "sample.h"
/*
na motywach oficjalnych exampla Digilent-a by tasza, 2017
kompilacja:
gcc -c voltmeter1.cpp
gcc voltmeter1.cpp /usr/lib/libdwf.so -o vm1
*/
int main( int argc, char *argv[] ){
HDWF handle; // handle dewajsa
double v1, v2; // na pomiary dwoch napiec
char szErrMessage [512] = "";
// dawaj pierwsze z brzegu AD2
if( FDwfDeviceOpen( -1, &handle ) == 0 ) {
FDwfGetLastErrorMsg( szErrMessage );
printf( "err when access ad2 [%s]\n", szErrMessage );
return 0;
}
// offset dla kanalow 0 i 1
FDwfAnalogInChannelOffsetSet( handle, 0, 0 /* V */ );
FDwfAnalogInChannelOffsetSet( handle, 1, 0 /* V */ );
// zakres na oba kanaly , 5V vpp
FDwfAnalogInChannelRangeSet( handle, 0, 5 /* V */ );
FDwfAnalogInChannelRangeSet( handle, 1, 5 /* V */ );
// rekonfiguracja i start pomiarow
FDwfAnalogInConfigure( handle, 0, false);
Wait( 2 ); // dwie sekundy na ogarniecie się wnętrzności ad2 po setupie :) no czad normalnie!
for( int i = 0; i < 20; i++ ){
Wait( 1 );
// daj status, ale dziwadlo :)
FDwfAnalogInStatus( handle, false, NULL );
// odczyt fizycznych wartosci
FDwfAnalogInStatusSample( handle, 0, &v1 );
FDwfAnalogInStatusSample( handle, 1, &v2 );
printf ( "%.3lf V\t\t%.3lf V\n", v1, v2 );
}
// pozamykaj puzderko
FDwfDeviceCloseAll();
}
no to spokojnego wieczoru,
tasza
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.