Miniscope v2c

Tani dwukanałowy oscyloskop PC/USB z mikrokontrolerem STM32 (STM32F103C8T6).

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:

miniscope v4 + v2c

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
miniscope v2c PCB (Eagle)
miniscope v2c PCB photo
Złącze goldpin i przycisk BOOT używane są do ładowania programu.
miniscope v2c PCB photo
STM32F103C8T6 w obudowie LQFP48.
STM32F103C8T6

Pliki Eagle

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.

  1. 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.
  2. 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.
  3. 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.

2013.09.16 Zaktualizowana biblioteka, miniscope_v2c_dll_20130916.7z:

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


 "Cookie monsters": 2678358    Parse time: 0.002 s