Съдържание:

Осцилоскоп с двойна следа: 11 стъпки (със снимки)
Осцилоскоп с двойна следа: 11 стъпки (със снимки)

Видео: Осцилоскоп с двойна следа: 11 стъпки (със снимки)

Видео: Осцилоскоп с двойна следа: 11 стъпки (със снимки)
Видео: "Маршрут 666" Дъглас Престън - Линкълн Чайлд. Част 1/2. Част 2 от „Пендъргаст“. 2024, Юли
Anonim
Осцилоскоп с двойна следа
Осцилоскоп с двойна следа

Когато изграждах предишния си мини осцилоскоп, исках да видя колко добре мога да накарам моя най -малък ARM микроконтролер STM32F030 (F030) да се справи и свърши добра работа.

В един от коментарите беше предложено, че „Синьо хапче“със STM32F103 (F103) може да е по -добро, по -малко от платката за разработка с F030 и вероятно дори по -евтино. Но за мини осцилоскопа не използвах платката за разработка, а F030 на още по-малка SMD-DIP платка, така че едно синьо хапче със сигурност нямаше да е по-малко и се съмнявам, че би било и по-евтино.

Кодът вече е достъпен в Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Консумативи

Списък на частите: - пластмасова кутия - перфорирана дъска (двустранна прототипна платка 8x12 см) - синьо хапче - ST7735s TFT дисплей - литиево -йонна батерия - HT7333 3.3V регулатор на ниско отпадане - MCP6L92 двойна опампа - TSSOP8 до DIP8 платка - 12 MHz кристал (не е необходимо)) - въртящ се енкодер плюс копче (2x) - powerwitch - бананови клеми (4x) - литиево -йонна зарядна платка - няколко резистора и кондензатора - найлонови дистанционни елементи, гайки и винтове

Инструменти:

- станция за запояване - спойка 0,7 мм - малко тел - страничен нож - стъкла и лупа - бормашина - мултицет - осцилоскоп - STLink -V2

Софтуер:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer библиотека - адаптирана библиотека за ST7735s - Notepad ++ - Kicad

Стъпка 1: Преплитане или едновременно режим

Режим на преплитане или едновременно
Режим на преплитане или едновременно
Режим на преплитане или едновременно
Режим на преплитане или едновременно

Синьо хапче

Но идеята беше там и знаех, че F103 има два ADC! Ами ако използвах тези два ADC заедно в режим на преплитане, нещо, което съм правил преди с STM32F407 (F407). Скоростта на вземане на проби ще се удвои. Това, комбинирайте това с по -бърз микроконтролер и ще стане чудесен наследник на мини осцилоскопа.

Режим на преплитане Странно, че ADC във F103 са по -малко усъвършенствани от този във F030 (и F407), не можете да изберете разделителната способност. По -важното е, че също не можете да промените времето между двата ADC. Сега, когато използвате режима на преплитане, обикновено искате извадката да е възможно най -бърза с възможно най -кратко време между всички проби, но с осцилоскоп е необходимо да промените времето. Може би все още може да се направи, не съм професионален дизайнер на осцилоскопи, но се отказах от плана да използвам режим на преплитане.

Едновременен режим

Но наличието на два АЦП дава много повече възможности, двата АЦП могат да бъдат зададени и в режим „редовно-едновременно“. Какво ще кажете за двоен осцилоскоп за следи?

След като реших да се опитам да направя осцилоскоп с двойна следа, аз също исках да имам променлива входна чувствителност, опция, която нямах на мини осцилоскопа. Това означава атенюатор (и усилвател) на входовете. А може би исках още повече? Затова направих малък списък с „приятни за притежание“.

СПИСЪК НА ЖЕЛАНИЯТА

два канала

променлива чувствителност и на двата канала

задействане и по двата канала

променливо ниво на задействане по двата канала

променливо отместване

захранване с една батерия

побира се в същата кутия като мини осцилоскопа

Стъпка 2: Прототипиране

Прототипиране
Прототипиране
Прототипиране
Прототипиране

Както обикновено започнах тези проекти на макет. (Вижте снимката) И преди да запоя всичко на перфборда се опитвам да разбера дали и как ще се побере в избраната кутия за проект. Подхожда, но само справедливо. Някои части са скрити под екрана, други под Синьото хапче. И отново, точно както за повечето от моите проекти, това е проект, който се използва само веднъж и няма да проектирам печатна платка за него.

Стъпка 3: Атенюатори

Атенюатори
Атенюатори

В обикновените осцилоскопи входните атенюатори са схеми, които променят затихването и усилването чрез включване и изключване на резистори с малки сигнални релета. Въпреки че имам някои от тези релета, знам, че те няма да се превключат при по -малко от 4 волта, това означава, че те ще работят само с напълно заредена литиево -йонна батерия (4.2V). Така че имах нужда от друг начин за превключване на тези резистори. Разбира се, можех просто да инсталирам механични превключватели, но това със сигурност вече нямаше да се побере в кутията на проекта, имайки предвид, може би бих могъл да опитам отново по -добър цифров потенциометър (този, който имам, е твърде шумен).

Тогава се сетих за „аналогови ключове“, с тези мога сам да си направя цифров потенциометър. В колекцията си от части открих CD4066 с четири аналогови превключвателя. Идеята е да се направи резистор за обратна връзка на променлива opamp чрез включване и излизане на резистори успоредно на резистора за обратна връзка.

Работи много добре, но само с 4 превключвателя в 4066 и с 2 канала не беше възможно да се направят повече от три нива на чувствителност. Избрах 500mV, 1V и 2V на разделение, тъй като това са нивата на напрежение, които използвам най -много. Екранът е разделен на 6 разделения, така че прави диапазоните -1,5V до +1,5V, -3V до +3V и -6V до 6V.

С "виртуалната земя" можете да премествате тези диапазони нагоре и надолу, така че дори 0v до +12V е възможно.

Стъпка 4: Виртуална основа

Виртуален терен
Виртуален терен
Виртуален терен
Виртуален терен

Тъй като осцилоскопът използва единична захранваща шина (3.3V), усилвателите се нуждаят от виртуално ниво на земята или няма да работят. Това виртуално ниво на земята е направено с PWM на един изходен канал на TIM4, работният цикъл на него се променя от само няколко процента до почти сто процента. Нискочестотен филтър с 1k резистор и 10uF кондензатор го превръща в напрежение от (почти) 0V до (почти) 3.3V. Честотата на квадратната вълна е малко под 100 kHz, така че простият нискочестотен филтър е достатъчно добър.

По -късно в изграждането на този осцилоскоп осъзнах, че не можете да имате две отделни отмествания за каналите. Това се дължи на факта, че с едно захранване входното земно ниво трябва да бъде отделено от реалното ниво на земята на опампата. Така че и двата канала се движат по същия начин, както променяте настройката GND.

Стъпка 5: Ротационни енкодери и отстраняване на грешки

Ротационни енкодери и отстраняване на грешки
Ротационни енкодери и отстраняване на грешки
Ротационни енкодери и отстраняване на грешки
Ротационни енкодери и отстраняване на грешки

На мини осцилоскопа използвах само един въртящ се енкодер за всички функции. Това би направило двойния осцилоскоп много труден за използване, така че тук имам нужда от два. Единият енкодер за атенюаторите и виртуалното ниво на земята, а другият енкодер за времевата база и задействането. За съжаление, точно както в другия ми проект, тези въртящи се енкодери са много „шумни“. Те са толкова лоши, че просто не биха работили с таймери в „режим на енкодер“, стандартния начин за тяхното четене. Трябваше да направя механизъм за отстраняване с таймер TIM2, като проверявам енкодерите на всеки 100us. Този таймер от своя страна се стартира (само), когато има някаква активност върху енкодерите, това се проверява с функционалността EXTI на входните портове. Сега енкодерите работят добре.

Както можете да видите, наличието на дисплей също може да бъде много удобно за показване на информация за отстраняване на грешки.

Стъпка 6: Показване и времева база

Дисплей и времева база
Дисплей и времева база

Дисплеят има разделителна способност 160 x 128 пиксела, така че има 160 проби, необходими за един екран, успях да ускоря ADC, за да направят 1,6 милиона проби в секунда и това, с много овърклок микроконтролер (повече за това по -късно), дава минимална времева база от 20us на отдел (100us на екран). Така форма на вълната от 10kHz ще запълни целия екран.

Това е само два пъти по -бързо от мини осцилоскопа, който направих преди. Ами сега е с два канала:-).

Както беше казано, дисплеят е с ширина 160 пиксела, така че са необходими само 160 стойности на екран. Но всички буфери всъщност съдържат 320 проби. Така DMA съхранява 320 стойности, преди да задейства прекъсване на пълно предаване (TC). Това е така, защото задействането се извършва в софтуер. Извадката започва в случаен момент, така че е много малко вероятно първата стойност в буфера да е мястото, където трябва да бъде задействащата точка.

Следователно точката на задействане се открива чрез четене чрез trace_x_buffer, ако стойността е при желаната стойност на задействането en, ако предишната стойност е точно под нея, се намира точката на задействане. Това работи доста добре, но имате нужда от по -голям буфер от действителния размер на дисплея.

Това също е причината скоростта на опресняване на по -ниските настройки на времевата база да е по -бавна, отколкото бихте очаквали. Когато използвате настройката 200ms/div, един екран, пълен с данни, е 1 секунда, но тъй като се прави двойно количество преобразувания, това отнема 2 секунди. При по -бързите настройки на времевата база няма да го забележите толкова много.

TIM3 се използва за генериране на времева база. Той задейства ADC със скоростта, която се изисква от избраната настройка на времевата база. Неговият часовник на TIM3 е 120MHz (вижте OVERCLOCKING), максималният брой, до който се брои (ARR), определя как други преливат или, на ST език, който се актуализира. Чрез TRGO тези импулси за актуализация задействат ADC. Най -ниската честота, която генерира, е 160 Hz, най -високата е 1,6 MHz.

Стъпка 7: ADC и DMA

ADC и DMA
ADC и DMA

Двата ADC преобразуват едновременно напрежението на входовете си, съхраняват тези две 12 -битови стойности в една 32 -битова променлива. Така че DMA има само една променлива за (двойно) преобразуване за прехвърляне.

Следователно, за да се използват тези стойности, е необходимо да се разделят на двете стойности, така че да могат да се използват за показване на двете следи. Както беше казано, ADC във F103 не могат да бъдат настроени на други разделителни способности освен 12 бита. Те винаги са в 12 -битов режим и затова преобразуванията винаги отнемат еднакъв брой тактови импулси. И все пак, с овърклок на ADC, могат да се направят 1,6 MS проби в секунда (вижте Екстра: Овърклок).

Позоваването на ADC е Vdd, 3.3V релсата. За да превърна това в по -удобни стойности (на разделение), изчислих стойностите на атенюаторите, тъй като нямам точните стойности на резистора, които излизат от тези изчисления, някои корекции се правят в софтуера.

В този проект използвам DMA в "обикновен режим". В този режим DMA спира да прехвърля данни (от de ADC в памет), когато броят на всички думи (или половин думи или байтове) се прехвърли. В другия възможен режим, „кръгов режим“DMA се нулира и продължава да прехвърля данни без прекъсване. Това не работи с F103, толкова е бързо, че презаписва данните в adc_buffer , преди останалата част от програмата да може да ги прочете. Така че сега процесът е както следва:

- настройте DMA към броя на данните, които ще бъдат прехвърлени, и активирайте DMA

- стартирайте задействането на ADC, те ще изискват DMA трансфери след всяко (двойно) преобразуване

- след прехвърлянето на зададения брой реализации DMA спира

- незабавно също да спрете задействането на ADC

- направете всички необходими манипулации с данните в паметта

- показване на следи на екрана

- стартирайте процеса отново

Стъпка 8: Потребителски интерфейс

Потребителски интерфейс
Потребителски интерфейс

Екран с размери 160 на 128 пиксела не е много голям и искам да използвам колкото е възможно повече от него. Така че няма част от него, запазена за настройките на токовете. В последните няколко реда се показват вертикалната чувствителност, времевата база, нивото на задействане и задействащия канал, но когато сигналите са достатъчно големи, те ще се появят в същата област. Опцията, която е активна, е показана в жълто, останалата част е в бяло.

Стъпка 9: Изграждане и възможни подобрения

Изграждане и възможни подобрения
Изграждане и възможни подобрения
Изграждане и възможни подобрения
Изграждане и възможни подобрения
Изграждане и възможни подобрения
Изграждане и възможни подобрения
Изграждане и възможни подобрения
Изграждане и възможни подобрения

Доволен съм от този проект. Работи добре и върши работата, но може да е по -добре.

Кутията на проекта е твърде малка, за да побере всичко удобно, което води до поставяне на компоненти под синьото хапче. За да стане това възможно, Blue Pill не може да бъде запоен директно към "дънната платка". И тъй като това го направи твърде високо, трябваше да премахна много части от Синьото хапче, като например джъмперите за избор на BOOT0 и BOOT1 (неща, които така или иначе никога не използвам) и дори трябваше да преместя кристала от върха до дъното на печатната платка.

Направих живота по-труден, като използвах бананови конектори вместо BNC или SMA конектори, това означаваше, че голяма част от перфборда е „зона без движение“, за да стане ясно за себе си, сложих каптонова лента върху нея, за да се предпазя от поставянето на части върху него.

Друг проблем при поставянето на всичко в такава малка кутия за проекти е, че аналоговата и цифровата верига са много близо една до друга. Виждате, че и по двете следи се вижда доста шум. Това дори нямах на дъската! Чрез преместване на захранващите линии за аналогови и цифрови схеми възможно най -далеч едно малко подобрение беше направено, но не достатъчно за мен. Намаляването на всички стойности на резистора в аналоговите схеми дори по -далеч от мен (входното съпротивление е 100kOhm вместо 1MOhm) не помогна. Подозирам, че задействането на най -бързата настройка на времевата база (20us/div), което не е страхотно, също ще се подобри с по -малко шум в сигналите.

Ако направите този дизайн на "истинска" платка, с всички smd части и отделни слоеве за аналогови, цифрови и захранващи (това са 4 слоя!), Вероятно ще работи много добре. Той ще бъде много по -малък, няма да използва пълно синьо хапче, а само F103 и това ще направи възможно да се достави с отделен (чист) аналог Vdda за ADC.

Като последен щрих реших да напръскам кутията в черно, това прави промяна от всички бежови кутии, които има.

Стъпка 10: Кодът и кратко видео

Стъпка 11: ДОПЪЛНИТЕЛНО: Овърклок

EXTRA: Овърклок
EXTRA: Овърклок

Точно както направих с F03, исках да видя колко добре F103 може да бъде овърклокнат. Спецификациите за този микроконтролер твърдят, че максималната тактова честота не трябва да надвишава 72MHz (което, разбира се, вече е по -бързо от F030), но бях чел в няколко блога, че овърклокът е лесен, така че защо не?

Синьото хапче е снабдено с 8MHz кристал, PLL умножава това с коефициент от 9 до 72MHz. PLL може да бъде увеличен до 16, като дава тактова честота от 128MHz. Това изобщо не беше проблем за моето Blue Pill, всъщност всичките ми Blue Pills работят без никакви проблеми на 128MHz.

Но сега исках да разбера каква е реалната граница. Така че премахнах 8MHz кристала и го замених с един от 12MHz. Отново увеличих PLL множителя, докато микроконтролерът най -накрая се отказа. Това беше на 168MHz! На 156MHz все още работи добре. Оставих го да работи с тази скорост с часове и никога не го видях да се разбие. В този осцилоскоп се задоволих със 120MHz, скорост, която може да бъде избрана с 12MHz кристал и PLL на 10, както и с 8 MHz кристал и PLL на 15. (вижте SystemClock_Config в main.c)

ADC сега също работят по -бързо, аз ги карам на 30MHz (вместо на 14), те все още работеха добре на 60MHz, STMicroelectronics прави хубав хардуер!

STMicroelectronics поставя тези ограничения в листа с данни по основателна причина, те гарантират, че микроконтролерът работи на посочените 72MHz при всички условия.

Но тъй като не използвам микроконтролера при -40 по Целзий, +85 по Целзий, само на 2.0 волта или 3.6 волта, мисля, че е безопасно да го овърклоквам. НЕ правете това, когато възнамерявате да продадете устройство с техните микроконтролери, никога не знаете къде ще бъдат използвани.

Препоръчано: