Spisu treści:

Oscyloskop z podwójnym śledzeniem: 11 kroków (ze zdjęciami)
Oscyloskop z podwójnym śledzeniem: 11 kroków (ze zdjęciami)

Wideo: Oscyloskop z podwójnym śledzeniem: 11 kroków (ze zdjęciami)

Wideo: Oscyloskop z podwójnym śledzeniem: 11 kroków (ze zdjęciami)
Wideo: Retusz materiału filmowego w DaVinci Resolve 17. Zapis webinarium z Frank 2024, Lipiec
Anonim
Oscyloskop z podwójnym śladem
Oscyloskop z podwójnym śladem

Kiedy budowałem mój poprzedni mini oscyloskop, chciałem zobaczyć, jak dobrze mogę wykonać mój najmniejszy mikrokontroler ARM, STM32F030 (F030), i wykonał dobrą robotę.

W jednym z komentarzy sugerowano, że „Niebieska pigułka” z STM32F103 (F103) może być lepsza, mniejsza niż płytka rozwojowa z F030, a być może nawet tańsza. Ale do mini oscyloskopu nie użyłem płytki rozwojowej, ale F030 na jeszcze mniejszej płytce SMD-DIP, więc tam Blue Pill na pewno nie byłby mniejszy i wątpię, że byłby też tańszy.

Kod jest już dostępny na Gitlab:

gitlab.com/WilkoL/dual-trace-oscyloskop

Kieszonkowe dzieci

Lista części: - plastikowe pudełko - płyta perforowana (dwustronna płytka prototypowa 8x12cm) - Blue Pill - Wyświetlacz TFT ST7735s - bateria litowo-jonowa - HT7333 3.3V regulator low dropout - MCP6L92 dual opamp - płytka TSSOP8 do DIP8 - kryształ 12 MHz (niekonieczny) - enkoder obrotowy z pokrętłem (2x) - wyłącznik zasilania - zaciski bananowe (4x) - płytka ładowarki litowo-jonowej - kilka rezystorów i kondensatorów - nylonowe dystanse, nakrętki i śruby

Narzędzia:

- stacja lutownicza - lut 0,7mm - trochę drutu - obcinak boczny - okulary i lupa - wiertarka - multimetr - oscyloskop - STLink-V2

Oprogramowanie:

- STM32IDE - STM32CubeMX - STLink Utility - Biblioteka LowLayer - dostosowana biblioteka dla ST7735s - Notepad++ - Kicad

Krok 1: Tryb z przeplotem lub symultaniczny

Tryb z przeplotem lub symultaniczny
Tryb z przeplotem lub symultaniczny
Tryb z przeplotem lub symultaniczny
Tryb z przeplotem lub symultaniczny

Niebieska pigułka

Ale pomysł tam był i wiedziałem, że F103 ma dwa przetworniki! Co by było, gdybym użył tych dwóch przetworników ADC razem w trybie „przeplatania”, coś, co zrobiłem wcześniej z STM32F407 (F407). Szybkość próbkowania podwoiłaby się. To, że połączymy to z szybszym mikrokontrolerem, to byłby świetnym następcą mini oscyloskopu.

Tryb przeplotu Co dziwne, przetworniki ADC w F103 są mniej zaawansowane niż w F030 (i F407), nie można wybrać rozdzielczości. Ważniejsze jest to, że nie możesz również zmienić czasu między dwoma ADC. Teraz, gdy używasz trybu z przeplotem, zwykle chcesz, aby próbkowanie było jak najszybsze i jak najkrótsze między próbkami, ale w przypadku oscyloskopu konieczna jest zmiana taktowania. Może nadal da się to zrobić, nie jestem profesjonalnym projektantem oscyloskopów, ale porzuciłem plan korzystania z trybu przeplotu.

Tryb jednoczesny

Ale posiadanie dwóch przetworników ADC daje o wiele więcej opcji, dwa przetworniki ADC można również ustawić w trybie „regularno-symultanicznym”. Co powiesz na podwójny oscyloskop śladowy?

Decydując się na wykonanie oscyloskopu dwuścieżkowego, chciałem również mieć zmienną czułość wejściową, opcję, której nie miałem na mini oscyloskopie. Oznacza to tłumik (i wzmacniacz) na wejściach. A może chciałem jeszcze więcej? Zrobiłem więc małą listę „fajnych rzeczy”.

LISTA ŻYCZEŃ

dwa kanały

zmienna czułość na obu kanałach

wyzwalanie na obu kanałach

zmienny poziom wyzwalania na obu kanałach

przesunięcie zmienne

pojedyncza moc baterii

pasuje do tego samego pudełka co mini-oscyloskop

Krok 2: Prototypowanie

Prototypowanie
Prototypowanie
Prototypowanie
Prototypowanie

Jak zwykle zacząłem te projekty od płytki stykowej. (patrz zdjęcie) A przed wlutowaniem wszystkiego na perfboard staram się zorientować czy i jak zmieści się w wybranym pudełku projektowym. Pasuje, ale tylko. Niektóre części są ukryte pod ekranem, inne pod niebieską pigułką. I znowu, tak jak w przypadku większości moich projektów, jest to projekt jednorazowy i nie będę do niego projektował PCB.

Krok 3: Tłumiki

Tłumiki
Tłumiki

W zwykłych oscyloskopach tłumiki wejściowe są obwodami, które zmieniają tłumienie i wzmocnienie poprzez włączanie i wyłączanie rezystorów z małymi przekaźnikami sygnałowymi. Chociaż mam niektóre z tych przekaźników, wiem, że nie będą się przełączać przy napięciu niższym niż 4 V, co oznacza, że będą działać tylko z w pełni naładowaną baterią litowo-jonową (4,2 V). Potrzebowałem więc innego sposobu przełączania tych rezystorów. Oczywiście mógłbym po prostu zainstalować mechaniczne przełączniki, ale to z pewnością nie zmieściłoby się już w pudełku projektu, może mógłbym spróbować ponownie lepszego potencjometru cyfrowego (ten, który mam, jest zbyt głośny).

Wtedy pomyślałem o „przełącznikach analogowych”, z których sam mogę zrobić potencjometr cyfrowy. W mojej kolekcji części znalazłem CD4066 z czterema przełącznikami analogowymi. Pomysł polega na tym, aby rezystor sprzężenia zwrotnego zmiennej opamp był włączany i wyłączany równolegle do rezystora sprzężenia zwrotnego.

Działa bardzo dobrze, ale mając tylko 4 przełączniki w 4066 i mając 2 kanały, nie można było uzyskać więcej niż trzech poziomów czułości. Wybrałem 500mV, 1V i 2V na działkę, ponieważ są to poziomy napięcia, których najczęściej używam. Ekran jest podzielony na 6 działek, co daje zakresy od -1.5V do +1.5V, -3V do +3V i -6V do 6V.

Dzięki „wirtualnej masie” możesz przesuwać te zakresy w górę iw dół, dzięki czemu możliwe jest nawet 0V do +12V.

Krok 4: Wirtualny grunt

Wirtualny grunt
Wirtualny grunt
Wirtualny grunt
Wirtualny grunt

Ponieważ oscyloskop wykorzystuje pojedynczą szynę zasilającą (3,3 V), wzmacniacze operacyjne potrzebują wirtualnego poziomu gruntu, w przeciwnym razie nie będą działać. Ten wirtualny poziom gruntu jest tworzony za pomocą PWM na jednym kanale wyjściowym TIM4, cykl pracy zmienia się od zaledwie kilku procent do prawie stu procent. Filtr dolnoprzepustowy z rezystorem 1k i kondensatorem 10uF przekształca to na napięcie od (prawie) 0V do (prawie) 3,3V. Częstotliwość fali prostokątnej wynosi nieco poniżej 100 kHz, więc prosty filtr dolnoprzepustowy jest wystarczająco dobry.

Dość późno w budowie tego oscyloskopu zdałem sobie sprawę, że nie można mieć dwóch oddzielnych offsetów dla kanałów. Wynika to z faktu, że przy pojedynczym zasilaniu wejście-ziemia-ziemia musi być odseparowana od rzeczywistej masy opampów. Tak więc oba kanały poruszają się w ten sam sposób, w jaki zmieniasz ustawienie GND.

Krok 5: Enkodery obrotowe i debugowanie

Enkodery obrotowe i debugowanie
Enkodery obrotowe i debugowanie
Enkodery obrotowe i debugowanie
Enkodery obrotowe i debugowanie

Na mini oscyloskopie użyłem tylko jednego enkodera obrotowego do wszystkich funkcji. To sprawiłoby, że podwójny oscyloskop byłby bardzo trudny w użyciu, więc tutaj potrzebuję dwóch. Jeden enkoder dla tłumików i wirtualnego poziomu gruntu, a drugi dla podstawy czasu i wyzwalania. Niestety, podobnie jak w innym moim projekcie, te obrotowe enkodery są bardzo „zaszumione”. Są tak złe, że po prostu nie działałyby z zegarami w "trybie enkodera", standardowym sposobie ich odczytywania. Musiałem zrobić mechanizm debouncing z timerem TIM2, sprawdzając enkodery co 100us. Ten zegar z kolei jest uruchamiany (tylko) gdy jest jakaś aktywność na enkoderach, jest to sprawdzane za pomocą funkcji EXTI na portach wejściowych. Teraz enkodery działają dobrze.

Jak widać, posiadanie wyświetlacza może być również bardzo przydatne do wyświetlania informacji debugowania.

Krok 6: Wyświetlanie i podstawa czasu

Wyświetlacz i podstawa czasu
Wyświetlacz i podstawa czasu

Wyświetlacz ma rozdzielczość 160 x 128 pikseli więc na jeden pełny ekran potrzeba 160 próbek, udało mi się przyspieszyć przetworniki do 1,6 miliona próbek na sekundę i to przy mocno podkręconym mikrokontrolerze (o tym później) daje minimalna podstawa czasu 20us na dział (100us na ekran). W ten sposób przebieg 10kHz wypełni cały ekran.

To tylko dwa razy szybciej niż mini oscyloskop, który zrobiłem wcześniej. No cóż, teraz jest z dwoma kanałami:-).

Jak już wspomniano, wyświetlacz ma szerokość 160 pikseli, więc na jeden ekran potrzeba tylko 160 wartości. Ale wszystkie bufory faktycznie zawierają 320 próbek. Tak więc DMA przechowuje 320 wartości, zanim wyzwoli przerwanie transmisji (TC). Dzieje się tak, ponieważ wyzwalanie odbywa się w oprogramowaniu. Próbkowanie rozpoczyna się w losowym momencie, więc jest bardzo mało prawdopodobne, aby pierwsza wartość w buforze była miejscem, w którym powinien znajdować się punkt wyzwalania.

Dlatego punkt wyzwalania jest znajdowany przez odczytanie przez trace_x_buffer, jeśli wartość jest na żądanej wartości wyzwalacza pl, jeśli poprzednia wartość jest tuż poniżej niej, zostanie znaleziony punkt wyzwalania. Działa to całkiem dobrze, ale potrzebujesz większego bufora niż rzeczywisty rozmiar ekranu.

Jest to również powód, dla którego częstotliwość odświeżania na niższych ustawieniach podstawy czasu jest wolniejsza, niż można by się spodziewać. Kiedy używasz ustawienia 200ms/div, jeden pełny ekran danych to 1 sekunda, ale ponieważ wykonywana jest podwójna liczba konwersji, zajmuje to 2 sekundy. Na szybszych ustawieniach podstawy czasu nie zauważysz tego tak bardzo.

TIM3 służy do generowania podstawy czasu. Wyzwala ADC z prędkością wymaganą przez wybrane ustawienie podstawy czasu. Jego zegar TIM3 wynosi 120 MHz (patrz OVERCLOCKING), maksymalna liczba, do której zlicza (ARR) określa, jak inne przepełnia lub, w języku ST, aktualizuje. Poprzez TRGO te impulsy aktualizacji wyzwalają przetworniki ADC. Najniższa częstotliwość, jaką generuje, to 160 Hz, najwyższa to 1,6 MHz.

Krok 7: ADC i DMA

ADC i DMA
ADC i DMA

Dwa przetworniki ADC jednocześnie konwertują napięcie na swoich wejściach, przechowują te dwie 12-bitowe wartości w jednej 32-bitowej zmiennej. Tak więc DMA ma tylko jedną zmienną na (podwójną) konwersję do przesłania.

Aby użyć tych wartości, konieczne jest zatem podzielenie ich na dwie wartości, aby można je było wykorzystać do wyświetlenia dwóch śladów. Jak wspomniano, przetworniki ADC w F103 nie mogą być ustawione na inne rozdzielczości niż 12 bitów. Są zawsze w trybie 12-bitowym, więc konwersje zawsze zajmują tę samą liczbę impulsów zegarowych. Mimo to, dzięki przetaktowaniu przetworników ADC, można zrobić 1,6 MSpróbek na sekundę (patrz Extra: Overclocking).

Odniesieniem ADC jest Vdd, szyna 3.3V. Aby to przekonwertować na wygodniejsze wartości (na działkę) obliczyłem wartości tłumików, ponieważ nie mam dokładnych wartości rezystorów, które wynikają z tych obliczeń, niektóre poprawki są wprowadzane w oprogramowaniu.

W tym projekcie używam DMA w "trybie zwykłym". W tym trybie DMA przestaje przesyłać dane (z przetworników ADC do pamięci), gdy wszystkie słowa (lub pół słowa lub bajty) są przesyłane. W innym możliwym trybie, „trybie kołowym”, DMA resetuje się i kontynuuje nieprzerwane przesyłanie danych. To nie zadziałało z F103, jest tak szybkie, że nadpisuje dane w adc_buffer, zanim reszta programu będzie mogła je odczytać. Więc teraz proces wygląda następująco:

- skonfiguruj DMA do liczby przesyłanych danych i włącz DMA

- rozpocznij wyzwalanie przetworników ADC, które po każdej (podwójnej) konwersji będą żądać transferów DMA

- po przeniesieniu ustawionej liczby konwersji DMA zatrzymuje się

- natychmiast przestań również wyzwalać ADC

- wykonaj wszystkie potrzebne manipulacje na danych w pamięci

- pokaż ślady na ekranie

- rozpocznij proces od nowa

Krok 8: Interfejs użytkownika

Interfejs użytkownika
Interfejs użytkownika

Ekran o wymiarach 160 na 128 pikseli nie jest zbyt duży i chcę go wykorzystać jak najwięcej. Nie ma więc żadnej części zarezerwowanej dla ustawień prądów. W ostatnich kilku wierszach wyświetlane są czułość pionowa, podstawa czasu, poziom wyzwalania i kanał wyzwalania, ale gdy sygnały są wystarczająco duże, pojawią się w tym samym obszarze. Aktywna opcja jest pokazana na żółto, reszta na biało.

Krok 9: Budowanie i możliwe ulepszenia

Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia
Budynek i możliwe ulepszenia

Jestem bardzo zadowolony z tego projektu. Działa dobrze i spełnia swoje zadanie, ale mogłoby być lepiej.

Pudełko projektowe jest za małe, aby wygodnie wszystko w nim zmieścić, co powoduje konieczność umieszczania komponentów pod niebieską pigułką. Aby było to możliwe, Blue Pill nie mógł być bezpośrednio przylutowany do „płyty głównej”. A ponieważ przez to wszystko było za wysokie, musiałem usunąć wiele części z Blue Pill, takich jak zworki do wyboru BOOT0 i BOOT1 (rzeczy, których i tak nigdy nie używam), a nawet musiałem przesunąć kryształ z góry na dół PCB.

Utrudniłem sobie życie, używając złączy bananowych zamiast złączy BNC lub SMA, co oznaczało, że duża część płyty perforowanej była „obszarem, w którym nie można było przejść”, aby to dla siebie wyjaśnić, nałożyłem na nią taśmę kaptonową, aby sobie zapobiec od umieszczania na nim części.

Innym problemem związanym z umieszczeniem tego wszystkiego w tak małym pudełku projektowym jest to, że obwody analogowe i cyfrowe są bardzo blisko siebie. Widać, że na obu śladach widać sporo szumu. Tego nawet nie miałem na płytce do krojenia chleba! Przesuwając jak najdalej od siebie linie zasilające dla obwodów analogowych i cyfrowych, dokonano niewielkiej poprawy, ale jak na mój gust, nie wystarczyło. Zmniejszenie wszystkich wartości rezystorów w obwodach analogowych nawet bardziej niż ja (rezystancja wejściowa wynosi 100 kOhm zamiast 1 MOhm) nie pomogło. Podejrzewam, że wyzwalanie przy najszybszym ustawieniu podstawy czasu (20us/div), co nie jest świetne, również poprawi się przy mniejszym szumie na sygnałach.

Jeśli wykonasz ten projekt na „prawdziwej” płytce drukowanej, ze wszystkimi częściami smd i oddzielnymi warstwami dla sygnału analogowego, cyfrowego i zasilania (to 4 warstwy!), prawdopodobnie będzie działał bardzo dobrze. Będzie znacznie mniejszy, nie będzie używał kompletnej Blue Pill, ale tylko F103, co pozwoli na zasilenie go osobnym (czystym) analogowym Vdda dla ADC.

Na koniec postanowiłem spryskać pudełko na czarno, co różni się od wszystkich beżowych pudełek, które ma.

Krok 10: Kodeks i krótki film

Krok 11: DODATKO: Podkręcanie

DODATKO: Podkręcanie
DODATKO: Podkręcanie

Podobnie jak w przypadku F03, chciałem zobaczyć, jak dobrze F103 można przetaktować. Specyfikacja tego mikrokontrolera mówi, że maksymalna częstotliwość zegara nie powinna przekraczać 72 MHz (co oczywiście jest już szybsze niż F030), ale czytałem w kilku blogach, że podkręcanie było łatwe, więc czemu nie?

Blue Pill jest wyposażony w kryształ 8 MHz, PLL mnoży go ze współczynnikiem od 9 do 72 MHz. PLL można zwiększyć do 16, dając zegar 128 MHz. Nie stanowiło to żadnego problemu dla mojej Blue Pill, w rzeczywistości wszystkie moje Blue Pills działają bez żadnych problemów na 128 MHz.

Ale teraz chciałem dowiedzieć się, jaki jest prawdziwy limit. Więc usunąłem kryształ 8MHz i zastąpiłem go jednym z 12MHz. Ponownie zwiększałem mnożnik PLL, aż w końcu mikrokontroler się poddał. To było przy 168 MHz! Na 156MHz nadal działał dobrze. Pozostawiłem go działającego z tą prędkością przez wiele godzin i nigdy nie widziałem, jak się rozbił. W tym oscyloskopie zdecydowałem się na 120MHz, prędkość, którą można wybrać z kryształem 12MHz i PLL na 10, a także z kryształem 8MHz i PLL na 15. (patrz SystemClock_Config w main.c)

Przetworniki ADC działają teraz również szybciej, mam je działające na 30 MHz (zamiast 14), nadal działały dobrze na 60 MHz, STMicroelectronics to fajny sprzęt!

STMicroelectronics nie bez powodu umieszcza te ograniczenia w arkuszu danych, ponieważ gwarantują one, że mikrokontroler działa z określoną częstotliwością 72 MHz w każdych warunkach.

Ale ponieważ nie używam mikrokontrolera przy -40 Celsjusza, +85 Celsjusza, na zaledwie 2,0 V lub 3,6 V myślę, że można go bezpiecznie przetaktować. NIE rób tego, gdy zamierzasz sprzedać urządzenie z ich mikrokontrolerami, nigdy nie wiesz, gdzie będą używane.

Zalecana: