Miniscope v2c
Tani dwukanałowy oscyloskop PC/USB z mikrokontrolerem STM32 (STM32F103C8T6).
- zasada działania jak miniscope v2b, użycie miniscope v4 jako PC GUI,
- tani (AVT: 17 zł, kamami.pl:
12,20 zł25,79 zł14,95 zł przy zakupie 1 szt.) mikrokontroler STM32F103 w małej obudowie LQFP48, - jednostronna płytka drukowana łatwa do wykonania metodą termotransferową,
- próbkowanie: 2x461 kSps (starsza wersja firmware: 2x300 kSps), 8 bit, przesył danych w czasie rzeczywistym do PC (USB full-speed),
- ładowanie programu przez bootloader UART,
- pojedyńczy zakres pomiarowy, 0...6.6V, niestandardowa impedancja wejściowa 20 kOhm (dla wyeliminowania przesłuchów, ze względu na uproszczony układ analogowy, brak buforowania; przy nowszym firmware używającym niezależnych przetworników rezystancję można zwiększyć).
2012.07.28 Cena STM32F103C8T6 wynosi obecnie w kamami 25,79 zł - wzrosła o ponad 100% w stosunku do wcześniejszej, prawdopodobnie promocyjnej. AVT oferuje obecnie ten układ w korzystniejszej cenie 17 zł. W przypadku problemów z zaopatrzeniem firmware powinno być proste do przeniesienia na dowolny inny mikrokontroler STM32F1 z USB i minimum 20 kB RAM. Możliwe jest również (nie wykonywałem testów), że właściwości urządzenia (streaming w czasie rzeczywistym) udałoby się zachować również przy zmniejszeniu rozmiarów buforów ADC/USB które umożliwiłoby użycie mikrokontrolera z 10 kB RAM.
Przebiegi o niskiej amplitudzie (widoczna kwantyzacja) zarejestrowane w miniscope v4:
Całkowity koszt wykonania (jeżeli płytka zostanie wykonana własnoręcznie) powinien zamknąć się w kwocie 25 - 30 zł.
Schemat: miniscope_v2c_20120416.pdf
Płytka drukowana, Eagle, 66mm x 36mm
Złącze goldpin i przycisk BOOT używane są do ładowania programu.
STM32F103C8T6 w obudowie LQFP48.
IDE
Komunikacja USB bazuje - podobnie jak przy miniscope v2b - na przykładzie CDC. Przykłady STM32 dostarczane są z plikami projektów dla środowisk IAR, Keil, RIDE, HiTOP i TrueSTUDIO, ale żadne z tych środowisk nie wydało mi się optymalne. Ewaluacyjne wersje RIDE i HiTOP posiadają restrykcyjne licencje (odpowiednio: wymóg zakupu pakietu wsparcia po 7 dniach i brak możliwości użycia komercyjnego). IAR/Keil evaluation/lite nie posiadają takich obostrzeń, ale podobnie jak TrueSTUDIO ich wersje instalacyjne posiadają przesadnie duże jak na mały projekt wymagania dyskowe (do 3 GB) nie umożliwiając rezygnacji z instalacji zbytecznych komponentów (wsparcia dla dziesiątek innych rodzin mikrokontrolerów).
Z powyższych względów projekt korzysta ze środowiska CooCox - instalator 115 MB dla IDE + gcc, około ~800 MB przestrzeni dyskowej po instalacji, brak ograniczeń licencyjnych.
Ładowanie programu
Dla uproszczenia wzoru i zmniejszenia rozmiarów na płytce drukowanej nie zostały
umieszczone wyprowadzenia JTAG/SWD. Jedyną (ale wystarczającą choć nieco uciążliwą
na etapie tworzenia programu i debugowania) metodą ładowania programu jest użycie
bootloadera UART (wyprowadzone na płytce RX, TX, masa). Przejście w tryb wbudowanego
bootloadera następuje gdy przy wciśniętym przycisku BOOT wciśnięty zostanie na chwilę przycisk RESET.
Loader PC (STM "Flash Loader Demo") pracuje bez problemów z konwerterami USB-UART.
Piny RX/TX związane z bootloaderem tolerują napięcie 5V, można użyć przejściówki RS232-UART/USB-UART na
napięcie 3,3V lub 5V.
Testowy projekt sterujący buzzerem: stm32scopeTest.7z.
Modyfikacja CDC dla uzyskania wyższych szybkości transmisji
Przykład CDC konfiguruje dla endpointy bulk. Projekt źródłowy wymaga kilku modyfikacji dla uzyskania zadowalających prędkości transferu.
- Obniżenie wartości VCOMPORT_IN_FRAME_INTERVAL, w firmware użyta jest wartość = 2. Skutek tej zmiany bez połączenia z innymi jest raczej niewielki.
- Zwiększenie USART_RX_DATA_SIZE (tu: 8192 B = 2 x 4 kB) dla uzyskania możliwości przesłania zbliżonej do maksymalnej dla transferu bulk ilości danych w każdej ramce.
- Modyfikacja funkcji Handle_USBAsynchXfer: ignorowanie danych zgromadzonych w buforze USART_Rx_Buffer o ile bufor nie jest zapełniony co najmniej w połowie oraz żądania transmisji "okrągłych" ilości danych (tu: 4 kB).
Biblioteka PC nie różni się pod względem organizacji od v2a/v2b. Kilka/kilkanaście buforów odbiorczych o rozmiarze 4 kB jest zakolejkowanych przy użyciu funkcji usb_submit_async/usb_reap_async, bufory z danymi są przekazywane do GUI poprzez FIFO.
Firmware i biblioteka dll dla miniscope v4
Pierwsza wersja, NIE ZALECANA:
stm32scope_20120416.7z
miniscope_v2c_dll_20120416.7z
Duża ilość poprawek w kodzie biblioteki i firmware:
stm32scope_20120421.7z
miniscope_v2c_dll_20120421.7z
2012.04.28 FIXED: jeżeli trigger był w trybie continuous ale oscyloskop był zatrzymany
(Run/Stop) pojedynczy trigger ręczny powodował działanie jak gdyby wciśnięty
został Run:
miniscope_v2c_dll_20120428.7z
2012.04.29 Lepsze wykorzystanie dostępnych zasobów (dwa przetworniki ADC pracujące równocześnie,
czas S/H zwiększony do 13,5 cykli pomimo zwiększenia szybkości próbkowania z 2x300 do 2x461 kSps):
stm32scope_20120429.7z
miniscope_v2c_dll_20120429.7z
2012.06.07 FIXED: brak dźwięku buzzera przy starcie (usuwane pętle opóźniające przy optymalizacji o3).
stm32scope_20120607.7z
2012.10.06 Dzięki Openmoko miniscope v2c
uzyskał własną, unikalną parę identyfikatorów USB
VID = 0x1d50, PID = 0x604f.
stm32scope_20121006.7z
miniscope_v2c_dll_20121006.7z
2012.12.16 Dodana biblioteka urządzenia skompilowana przy użyciu Code::Blocks/MinGW,
stm32scope_cb.7z jako projekt referencyjny. Testowana tylko przez chwilę,
poprzednia wersja biblioteki (projekt Turbo C++) powinna być preferowana.
2020.07.15 Zaktualizowany projekt Code::Blocks/MinGW: stm32scope_cb_20200714.7z.
Najnowszy Code::Blocks 20 dystrybuowany jest z 64-bitową wersją MinGW i bez 32-bitowych bibliotek Windows - projekt wymaga Code::Blocks 16.
2013.09.16 Zaktualizowana biblioteka, miniscope_v2c_dll_20130916.7z:
- FIXED: okazjonalna utrata danych (log: "RX FIFO overflow") wynikająca z uśpienia wątku przez system operacyjny na czas wyraźnie dłuższy niż żądany; problem obserwowany był na systemie przy niskim obciążeniu i gdy debugger/IDE nie były uruchomione,
- rozszerzony zakres rozmiarów bufora do 1MS (na kanał).
2017.01.21 Zaktualizowana biblioteka, miniscope_v2c_dll_20170121.zip, - częściowa konfigurowalność bez konieczności kompilacji, zakresy wzmocnienia definiowane są w pliku JSON (miniscope_v2c_capabilities.cfg). Domyślna zawartość pliku, definiuje pojedynczy zakres (25.78 mV/bit czyli 6.6V/256 na bit):
{ "Capabilities" : { "Coupling" : [ 1 ], "Sensitivity" : [ 0.02577999979257584 ] }, "Other" : { "bitsPerSample" : 9, "signalInverted" : false, "signalOffset" : 0 } }Poniższy plik definiuje dwa dodatkowe zakresy (50 mV/bit i 100 mV/bit - przy braku odpowiadającego firmware opierać się to może tylko na ręcznym przełączniku), jest dostosowany do wzmacniacza odwracającego z zerem pośrodku skali (pomiar napięć dodatnich i ujemnych), używając formuły value = 127 - value dla próbek odebranych z urządzenia.
{ "Capabilities" : { "Coupling" : [ 1, 2 ], "Sensitivity" : [ 0.02577999979257584, 0.05000000074505806, 0.1000000014901161 ] }, "Other" : { "bitsPerSample" : 8, "signalInverted" : true, "signalOffset" : 127 } }Wskazane jest użycie edytora JSON.
W wersji tej uproszczone zostało również wyzwalanie zboczem (usunięte agresywne filtrowanie które powodowało brak wyzwalania przy niektórych sygnałach).
2019.08.10 Firmware jako projekt EmBitz: stm32scope_embitz_20190810.zip
2019.08.11 Zestaw firmware + dll z bazową częstotliwością próbkowania obniżoną do 292kSps (co wydaje się usuwać problemy z przepełnianiem FIFO przy transmisji USB skutkujące nieciągłością rejestracji): stm32scope_embitz_20190811.zip, miniscope_v2c_dll_20190811.zip.
Pliki sterownika (libusb-win32) są zawarte w archiwum dll ale użycie aplikacji Zadig jest prostsze,
zwłaszcza w przypadku 64-bitowych systemów Win8/Win10:
Uwaga: wybór sterownika do zainstalowania jest istotny - Zadig może zaproponować domyślnie WinUSB zamiast libusb-win32.
Aktualizacja 2024.07.04: przy instalacji na Win7 x64 użycie Zadiga 2.9 (aktualnej wersji) nie powiodło się - menedżer urządzeń wskazywał, że sterownik był niepodpisany.
Problem został rozwiązany przez cofnięcie się do wersji Zadig 2.5 (jak na ilustracji powyżej).
Inne realizacje
Wersja PCB z LM1117 3,3V i kilkoma zmianami layoutu przygotowana przy użyciu oprogramowania Pulsonix, http://mritx.blogspot.com/2014/07/low-speed-dual-channel-pcusb.html. Autor: Quang Duy.
Tańsza alternatywa
Ze względu na bardzo niskie ceny gotowych mini-modułów z STM32F103C8T6 w chińskich serwisach zakup takiej płytki ($3-$3,50)
może być tańszy niż wykonanie samodzielne (chyba że sam mikrokontroler również zostałby sprowadzony z Chin).
STM32F103C8T6 board