Miniscope v2d
Niskobudżetowy oscyloskop i generator arbitralny PC/USB z mikrokontrolerem STM32F3.
Miniscope v2d jest oparty o mikrokontroler STM32F303CBT6 - układ w obudowie LQFP48 charakteryzujący się:- 32 kB RAM na szynie danych
- 8 kB RAM na szynie instrukcji (CCM)
- 128 kB FLASH
- interfejsem USB (full speed)
- czterema relatywnie szybkimi przetwornikami A/D
- 12-bitowym przetwornikiem D/A, dwa kanały wyjściowe
- 4 zintegrowanymi wzmacniaczami operacyjnymi mogącymi pracować jako PGA
- bootloaderem w ROM z implementacją USB DFU
STM32F303CBT6 jest kompatybilny pinowo z STM32F103C8T6 użytym miniscope v2c. Mimo
tego schemat zawiera kilka zmian mających ułatwić korzystanie z USB DFU które
stało się podstawowym i jedynym sposobem ładowania firmware. Pull-up USB
ma teraz możliwość programowego kontrolowania i jest także rozłączany
przy użyciu przycisku reset umożliwiając re-enumerację bez fizycznego odłączania
układu.
Uwaga: wydaje się, że DFU nie działa na bliźniaczej rodzinie mikrokontrolerów STM32F37x (ebrombaugh.studionebula.com).
Pełne wykorzystanie możliwości przetworników A/D STM32F30x nie jest możliwe bez użycia dodatkowych buforujących wzmacniaczy w stopniu wejściowym lub drastycznego zmniejszenia impedancji wejściowej.
IDE
STM32F303 nie jest na razie (2013.04) oficjalnie wspierany przez CoIDE (użyty dla miniscope v2c) a ostatnie wersje CoIDE rozrosły się znacznie, tradycyjnie nie pozwalając na żadną instalację modułową. Z tego względu IDE zostało zmienione na darmową wersję Keil (MDK-ARM).
Hardware
Uwaga: bezpośrednie bazowanie na poniższym schemacie/PCB nie jest zalecane ze względu na brak możliwości użycia PGA w tej konfiguracji (możliwości konfiguracyjne/połączeniowe wbudowanych wzmacniaczy operacyjnych są niestety silnie ograniczone).
Schemat: miniscope_v2d.pdf
Pliki Eagle: miniscope_v2d_20130413.zip
PCB:
Firmware bez żadnych zmian (nawet bez rekompilacji) można uruchomić na zestawie STM32F3DISCOVERY (podziękowania dla Aldo za przetestowanie).
Firmware
Projekt testowy ("migająca dioda" wykorzystująca buzzer), Eclipse + gcc: STM32F3_test_20130505.7z.
Program oscyloskopu, Keil: miniscope_v2d.7z i odpowiadająca mu biblioteka dll dla miniscope v4: miniscope_v2d_dll_1ch.7z. Zakres działania programu jest ograniczony do próbkowania jednego kanału i transmisji w czasie rzeczywistym przy prędkości 750 kSps - dodatkowe możliwości STM32F3 w stosunku do STM32F1 są generalnie niewykorzystane i wersja v2c pozostaje w tym momencie prawdopodobnie lepszym wyborem.
2013.06.09: wersja dwukanałowa (2 x 428.6kSps).
miniscope_v2d_2ch_20130609.7z
miniscope_v2d_dll_2ch_20130609.7z
- równoczesna praca z oscyloscopem,
- 8 bitów na próbkę,
- napięcie wyjściowe: 200 mV do 3100 mV przy pracy z włączonym buforem wyjściowym (wbudowany w STM32F3 wzmacniacz operacyjny), 0 V do 3.3 V przy wyłączonym buforze (kosztem wymogu dużej impedancji obciążenia),
- rezystancja obciążenia dla błędu 1LSB w trybie 12-bit przy włączonym buforze wyjściowym: > 5kOhm; ograniczeniem dla trybu 8-bit jest raczej znamionowa wydajność wyjścia bufora, 0,5mA,
- pamięć kształtu przebiegu: 8192 próbek,
- praktyczny limit taktowania ADC: setki kHz (wg danych katalogowych wbudowany ADC może być taktowany do 1 MHz dla 1-bitowych zmian słowa wejściowego) - przykładowe przebiegi,
- definiowanie kształtu przebiegu poprzez odręczne rysowanie,
- esport/import przebiegu: format JSON; przebieg może być też wygenerowany z użyciem arkusza kalkulacyjnego.
Firmware: miniscope_v2d_AWF_20130615.7z
Biblioteka dll: miniscope_AWF_dll_20130615.7z
Uaktualniona dll: miniscope_v2d_AWF_dll_20140103.7z
(dodana generacja standardowych przebiegów jak sinus, prostokąt, trójkąt, piła, dodany
tekstowy status do okna rysowania przebiegu informujący o pozycji kursora).
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:
Demonstracja użycia generatora - kanał A oscyloskopu dołączony do własnego wyjścia DAC, kanał B dla odniesienia dołączony do generatora przebiegu prostokątnego:
Narzędzia uzupełniające
bin2dfu
Dostarczany przez STM DFU file manager (narzędzie do tworzenia plików DFU i operowania na nich) staje się wyjątkowo nieergonomiczny w sytuacji gdy musi być używany wielokrotnie przy generacji kolejnych wersji programu. Zastąpienie go własnym narzędziem nie jest skomplikowane - format plików DFU(Se) jest opisany w nocie UM0391. Źródła DFU file manager są też dostarczane przez STM, ale ich bezpośrednie wykorzystanie wymaga posiadania "pełnej" wersji Visual C++ z MFC. Bin2dfu jest narzędziem konsolowym umożliwiającym zautomatyzowanie tworzenia pliku DFU przy kompilacji przez dodanie stosownej reguły do makefile:
$(PROJ_NAME).dfu: $(PROJ_NAME).bin @tools/bin2dfu --i $(PROJ_NAME).bin --a 0x08000000 --o $(PROJ_NAME).dfu
Parametr --a określa adres początkowy pliku binarnego. Może zaistnieć konieczność jego modyfikacji jeżeli wykorzystywany jest dodakowy (nie wbudowany w ROM jak w STM32F303) bootloader USB. Ze względu na to, że narzędzie nie było testowane poza tym projektem jego użycie nie jest zalecane jeżeli brak jest możliwości ewentualnego przywrócenia bootloadera USB.
Plik wykonywalny i źródła Code::Blocks/MinGW: bin2dfu.zip.
DFU loader
Mała modyfikacja projektu ze strony codeproject.com: ST Micro-electronics Device Firmware Upgrade (DFU/DfuSe) from C# autorstwa Marka McLeana. Posiada mniejszą funkcjonalność niż narzędzie DfuSe Demo od STM, ale jest zdecydowanie wygodniejsze przy częstym używaniu. Umożliwia automatyczne programowanie układu docelowego za każdym razem gdy zostanie on wykryty jako urządzenie klasy DFU - zostanie uruchomiony (RESET + BOOT) w trybie bootloadera.
Aplikacja wymaga dwóch bibliotek będących częścią DfuSe Demo: STDFU.dll and
STTubeDevice30.dll (instalacja DfuSe Demo jest i tak wymagana ze względu na zawarte w nim sterowniki)
i środowiska .net 3.5.
Plik wykonywalny z projektem Visual C# 2008: DFU Example 20130515.zip
Altertywne hardware
Pomysł Jurisa Perkonsa - ponieważ STM32F303CBT6 jest kompatybilny pinowo z STM32F103C8T6, tania płytka "blue pill"
może zostać użyta po wylutowaniu STM32F103C8T6: