Осциллограф на stm32f303cbt6

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Добрый день, сегодня я хочу поделится процессом создания самодельного осциллографа на основе радиоэлектронных элементов заказанных на одном известном китайском сайте.

Итак, все началось само собой с идеи - хотелось запилить себе небольшой приборчик, даже не столько для точного измерения сигналов сколько для их фактической регистрации, типа посмотреть дергается какая нибудь нога или линия или нет.

Сначала был порыв снимать показания штатным ADC микроконтроллера, и не делать экрана, а написать софт для отображения и передавать данные по USART или USB. В процессе разработки я передумал, и сделал внешний ADC и экранчик. При этом все же хотел сохранить возможность передачи данных на компьютер. Еще хотелось чтобы коэффициент входного делителя управлялся программно, а не всякими ручками и переключателями, по хорошему надо было делать дискретно, но после подключения экрана у меня уже не осталось ног микроконтроллера, и поэтому входной делитель состоит из одного JFET транзистора управляемого DAC микроконтроллера.


Теперь по порядку:


Начинаю с выбора компонентов и принципиальной схемы.

Компоненты:

ADC - ADS828E это одноканальный 10-ти битный преобразователь с максимальной частотой дискретизации в 100 MHz.

ОУ - AD8066 - достаточно быстрые Rail-To-Rail усилители с полевым входом. Микроконтроллер - stm32f303cbt6.

Источник отрицательного напряжения - LT1054.

Экран — эээм ну что-то непонятно-китайское 2.4 дюйма с надписью mcufriend, за 180 рублей, с ним кстати по факту возникло больше всего проблем.

Про всякую SMD мелочевку писать не буду тут и так все понятно.

Принципиальная схема устройства:

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
Ну а дальше дело техники, трассирую плату, я сделал двухстороннюю.
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Дальше собственно делаю саму плату.

Кусок стеклотекстолита

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
Вырезаю под нужный размер, клею фоторезист, я использую ORDYL Alpha 340.
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
Печатаю фотошаблон
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
Засвечиваю и проявляю щелочью
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
Травлю, заклеив обратную сторону скотчем :-), главное не забыть. Для травления использую раствор лимонной кислоты + поваренная соль + гидропирит.
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
После повторяю все то же самое, но для другой стороны. Получается вот такая плата:
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Наношу паяльную маску, у меня красного цвета, как раз в цвет китайского экранчика, удачно получилось :-). Сверлю отверстия.

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Дальше распаиваю компоненты, и собираю все вместе, и тут меня ждала первая засада от mcufried. По наивности я полагал что пины на экранчике китайцы расположили по сетке в 100 mills(0.1 дюйма или 2.54 мм), но нет. Выругался, подогнул пины и с помощью доброго слова и плоскогубцев водрузил экран на место. Залил тестовую прошивку(контроллер завелся сразу без вопросов, что уже радовало), и… не заработало. А вот и вторая засада от китайцев, экранчик не хотел заводится ни с какой известной последовательностью инициализации для таких экранов, я уже было подумал что меня таки обманули, но после долгого и нудного гугления и поисков, все таки я нашел библиотеку Mcufriend_kbv, взял оттуда массив команд, и о чудо «It“s ALIVE!!».

Вот так выглядит устройство в сборе, да я знаю края не ровные и есть неопрятные места, но чукча программист и особо красиво делать не умеет.

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Стал писать прошивку дальше, снимаю показания с ADC и тишина, на экране абсолютно ровная линия, причем после каждого выключения питания немного в разном месте, странно. Возникло ощущение что на преобразователь не приходит тактовый сигнал, тыкаю мультиметром и понимаю что закоротил линию такта ADC на землю, и от этого выгорела нога микроконтроллера(хорошо хоть не весь порт)

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост
А ведь я не просто так повесил такт на PA8 на эту ногу можно вывести меандр с частотой системного такта то есть 72Mhz, что же жаль, но ничего не поделаешь. Тогда беру ногу PA10 это RX USART1(который я вывел на пины на всякий случай) и сажаю на нее такт через резистор на всякий случай.
Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Вот он там так некрасиво висит.


После этого костыля ADC заработал как надо.

На оставшийся TX USART1(PA9) я вывел тестовый сигнал который также настраивается из интерфейса.

Осциллограф на stm32f303cbt6 Осциллограф, Stm32, Stm32f303, Libopencm3, Видео, Длиннопост

Прошивку писал на libopencm3.


Что получилось в результате:

1) Максимальная частота дискретизации 24MHz(так я и не осилил DMA).

2) Тестовый сигнал - частота 50Hz — 1MHz.

3) Диапазон измерений -25V — 25V.

4) Питание — USB.

Видео работы:

Спасибо за внимание.

Лига Радиолюбителей

1.1K постов9.2K подписчика

Добавить пост

Правила сообщества

Соблюдайте правила Пикабу. Посты выкладывать лишь касаемо нашей тематики. Приветствуется грамотное изложение. Старайтесь не использовать мат.

Постарайтесь не быть снобами в отношении новичков. Все мы когда-то ничего не знали и ничего не умели.

За попытку приплести политику или религию - предупреждение. 2 предупреждения - бан.

10
Автор поста оценил этот комментарий
Тс , какого жить с прямыми руками ?
раскрыть ветку (1)
7
Автор поста оценил этот комментарий
Офигенно :-). Но сколько трудов стоило их выпрямить.
Автор поста оценил этот комментарий
Объясните доходчиво нахрена это все
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

А зачем вообще все? Потому что могу :-).

показать ответы
Автор поста оценил этот комментарий
А где же стрелка?
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ахахаа, я ее отломал и Латыниной подарил на память.

2
Автор поста оценил этот комментарий

https://bitbucket.org/strelok1111/osciloscope_stm32/src - это код прошивки если кому интересно.

показать ответы
Автор поста оценил этот комментарий
А на заказ не делаете? Затраты итоговые какие на него?
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Это вообще хобби, делаю даже не потому что мне нужно, а потомучто могу. Но у меня остался еще один ацп и контроллер тоже с 1 ногой горелой, но экрана нет, а так да могу сделать. Затраты если посчитать все, то около 1000 р.
Автор поста оценил этот комментарий

Вай, мои поздравления!

всё ленюсь  подобного рода устройство собирать...

И сразу же вопросы, почему не использовать встроенный АЦП, он же 12 бит, и по опыту работы с ней(правда на f4 серии) довольно быстрый.


ну и конечно же)) Гитхаб! гитхаб вас ждёт) ну если входит в ваше видиние - поделиться данной разработкой

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Спасибо. Ацп даже в 10 бит и то много для такого вида устройств. В f3 на самом максимуме 8 бит будет тоже 24 мегагерца. У меня на битбакете, но я уже пост редактировать не могу.
показать ответы
Автор поста оценил этот комментарий

Вопрос есть.

На али есть готовые уже платы осциллографы. примерно в таком же исполнении.
Не было ли экономнее купить такую и запилить туда свою прошивку?
Или это была просто сборка для себя? набить руку?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Да конечно, и у меня даже был такой DSO138, от него собственно и BNC коннектор и щуп. Но частота дискретизации 1MHz - это по факту + достаточно медленный ОУ на входе, даже по сравнению с моей поделкой - игрушка. И да конечно же опыт создания работающего устройства.

показать ответы
Автор поста оценил этот комментарий

просто даже не знаю где купить что бы недорого только алиэкспресс ну есть в городе пару точек с радиодеталями но там цены как в чипдипе если не  выше

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

ОУ надо брать исключительно в чип и дипе хоть дорого но хотябы оригинал.

Автор поста оценил этот комментарий

А ещё ADS828E в России стоит от 2500 руб.. Автор, не дадите ссылки на али, а то смотрю—у вас совокупно 1000 руб. получилось..

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ээ не, не стоит, все ОУ что я купил на али - поддельный мусор. Только в чип и дипе мне удалось нормальный усилок купить.

показать ответы
1
Автор поста оценил этот комментарий
Эмм, нет, я уже участвовал в разработки портативного осцила, на приеме был ф4 и то принимал он уже обработанный латтис (плис) сигнал (бпф)


Представь что такое хотяб 10МГц, это 12 бит х 100 Мсемплов = 1,2 Гбит/сек, но это только чистый поток, но судя по твоим словам ты хочешь стм самостоятельно отправить в это путешествие


Но если сигнал цифра то и 4 бита хватит в большинстве случаев, но ведь это осцил, а не логический анализатор

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
А зачем целую секунду писать? Я делаю фиксированно 350 измерений и рисую на экране. Ну делать те же 350 выборок со скоростью 100MHz а не 24 как у меня, не понял в чем проблема.
показать ответы
Автор поста оценил этот комментарий

Сколько ушло времени на проект + реализацию?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Если по чистому по вечерам - идея + подбор компонентов на али пару дней, месяц ожидания, дальше "блин я заказал ОУ с биполярным входом!!!!", заказ ОУ с полевым входом - месяц ожидания, Пару дней тыкание на макетке выяснение принципиальной возможности это сделать. День принципиальная схема, день трассировка, день изготовление платы, день пайка и дальше дня три пограммирования, в итоге чистыми где-то 2 недели.

показать ответы
Автор поста оценил этот комментарий

ееее)) я понял.

просто пилотный проект.

а здорово получилось в итоге!


вопрос не по теме: как удалось избавиться от лени?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да как, черт его знает :-), времени нет ленится, что-то постоянно делаю.

Я написал комент к посту с ссылкой на репо, если вам интересно смотрите.

Автор поста оценил этот комментарий

а это интересно...

статейку найду, да и пожалуй повторю осциллограф. ибо заказывать за 8 тысяч не охото((


а почему бы не повысить точность, или рзрешающую способность? это я про 10-12 бит, и 24 мегагерца итоговых.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Да можно и повысить, можно было и двухканальный ацп взять и контроллер побыстрее. Просто честно говоря я не был уверен в том что у меня все получится. Ссылку на репо в каментах опубликую.
показать ответы
Автор поста оценил этот комментарий

ТС, много ли плюсов работы с libopencm3 супротив SPL? Всю жизнь с SPL работал, от Cube поплевался и забыл. И да, что за чудо-библиотека для отрисовки на дисплее? Самописная?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Плюс я щитаю только 1 - это ее понятность. Если честно от конструкций spl у меня моск скрипит :-). Чудо библиотека писана своими руками.
показать ответы
Автор поста оценил этот комментарий

Добрый день, наткнулся на ваш пост на просторах интернета, очень понравилась ваша робота, но на жаль уже много сделал на основе другой  http://ansvet.ru/stm32f303-2_4/stm32f303-2_4.shtml , но поскольку там нет описания принципа роботы мне не совсем понятно, а надо заучить для диплома, был бы рад если бы вы подсказали:

Зачем там демультиплексор 74HC4051?

Я так понял АЦП используется встроенный?

Зачем там снизу твердотельное реле?

Я так понял сигнал исходит снизу слева где 15 и -15v должен бить ЩУП? как конкретно двигается сигнал по схеме?

Был бы невероятно рад если бы вы ответили.

раскрыть ветку (1)
Автор поста оценил этот комментарий

давайте в тг, а то тут уныло общаться, не обещаю быстро ответить, работа, но отвечу 100%

https://t.me/death_be_my_pride
Автор поста оценил этот комментарий

это плохо а в сети не искали может есть где мануал какой на ваши дисплеи

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да в том то и дело что на них зачастую либо нет маркировки либо она не соответствует действительности. Так что в большинстве случаем это просто перебор возможных последовательностей инициализации с надеждой что на какой-то оно заведется.

Автор поста оценил этот комментарий

Купил получил вообщем кит набор оказался не кит набором собранное пришло все ))) ну ничего ну так по сути заявленные 200 кГц вообще заоблачная цифра для него максимум 20 -30 кГц, вообщем покупаю детали, буду собирать ваш осциллограф так как самый хороший в сети что нашел этот я так понял нужно будет еще дисплей купить или все же можно какой либо другой подключить глупый вопрос понимаю можно но вот в программировании ноль ))) что там куда как что записывать что прописывать и куда бог знает ))) куплю тогда и дисплей )

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну да 200 Khz это частота дискретизации, а чтобы форму сигнала более менее увидеть нужно 8-10 выборок что как раз нам и дает 20-30 килогерц различимого сигнала, игрушка чисто так потыкать.
На счет дисплей это ад и боль, дело в том что одинаковые с виду дисплеи могут быть на разных чипах с разным набором команд и адресами памяти, т.е я тут вообще ничего не могу посоветовать, у меня дисплеев лежит штуки 3 к которым я тупо не смог подобрать набор команд для инициализиции, промучался пару вечеров и забросил.

показать ответы
Автор поста оценил этот комментарий

ADC - ADS828E это одноканальный 10-ти битный преобразователь с максимальной частотой дискретизации в 100 MHz (а можно ли подешевле какой? то а то у этого цена кусается 1500р + на алиэкспрес  )

раскрыть ветку (1)
Автор поста оценил этот комментарий

Дело в том что когда я брал этот АЦП то брал его с запасом и надеждой что смогу оседлать DMA и считывать данные на каждый такт контроллера, а это 72 MHz ну если без разгона. Но не срослось, и на чтение 1 набора данных нужно минимум 3 такта поэтому 72 / 3 = 24, поэтому для данного устройства вполне бы подошел АЦП c максимальной частотой дискретизации в 30 - 50 MHz, что значительно дешевле. Да и 10 бит тоже многовато на самом деле, 8 вполне достаточно для такого устройства.
https://www.analog.com/en/parametricsearch/11814#/p1746=3000...|26000000000&p3062=1|1&p4365=|JESD204A|Parallel|Parallel%20CMOS|Parallel%20DDR%20CMOS|Parallel%20DDR%20LVDS|Parallel%20LVDS
вот тут поиграйте с фильтрами, можно подобрать что надо,
вот я например нашел бюджетный варик:
https://ru.aliexpress.com/wholesale?catId=0&initiative_i...
8 бит 32MHZ
И да еще могу дать совет, не берите скоростной ОУ на АЛИ в 100% будет подделка.

Но само собой всю схемотехнику надо будет заново придумывать.

показать ответы
Автор поста оценил этот комментарий

Можно еще видосов реальных измерений вашим осциллографом я подписался на канал ))

раскрыть ветку (1)
Автор поста оценил этот комментарий

Дык, вот честно говоря даж потыкать особо некуда, щас пока электронику отложил, работы много.

показать ответы
Автор поста оценил этот комментарий

Спасибо чет подзабил пока купил с али за 1к р DSO138 xD ну все же соберу позже коль печтка есть)) Спасибо огромное!

раскрыть ветку (1)
Автор поста оценил этот комментарий

Там используется внутренний ADC микроконтроллера, в теории можно разогнать сам контроллер, но это даст прирост ну до 1.8 MHz. Но придется весь код самому придумывать, мало того экран в комплекте - какое-то жуткое китайское поделие, у меня например так и не получилось подобрать набор комманд чтобы его запустить - так и валяется. Короч оно того не стоит - я про разгон. А сам девайс почему бы и нет опыт сборки, просто потыкать самому.

показать ответы
Автор поста оценил этот комментарий

а печатной платы нет желательно для layout

раскрыть ветку (1)
Автор поста оценил этот комментарий

Там в папочке oscil kicad проект

показать ответы
Автор поста оценил этот комментарий

а можно перезалить печатки и прошивку на яндекс?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Привет! Заинтересовала ваша прошивка, но увы адрес выдаёт ошибку. Не могли бы вы перезалить её в Яндекс диск? С уважением , Ростислав.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Добрый вечер, битбакет вроде бы работает нормально. Но если надо то вот залил на яндекс диск https://yadi.sk/d/PGkHHV8xF3St8g

показать ответы
Автор поста оценил этот комментарий

М-да, попробовал перенести в кеил,не получается.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну в конце концов если вы хотите повторить этот проект, то я могу собрать вам бинарник.

Автор поста оценил этот комментарий

Добрый день. А исходников в КЕЙЛЕ у Вас нет?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Добрый день. Нет, я линупсойд, писал в эклипсе. Собирал с помощью arm-none-eabi-gcc версии 5.4, ну соответсвенно подключив libopencm3.

Автор поста оценил этот комментарий

Deathclaw, а не осталось ссылочки? Никак такие дешёвые найти не могу..

раскрыть ветку (1)
Автор поста оценил этот комментарий
Перешел по своей ссылке в заказах, она мертвая уже, давно это было. Поискал на али, действительно дорого, что-то прямо скажем предложений не сказать чтобы завались, странно когда я покупал, помню выбирал еще чтобы типа доставка была авиапочтой.

Вот в принципе есть аналог

https://ru.aliexpress.com/item/ADC10080CIMT-ADC10080-CIMT-NS...


80М частота дискретизации.

Конечно пинаут другой и референсы по напряжению, но суть та же.

показать ответы
Автор поста оценил этот комментарий

ОУ понятно, он в ЧиД около 180рэ стоит, а АЦП? тоже в ЧипеДипе покупали?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Нет, эти с али заказывал 2 штуки мне в 338 рэ обошлись, и к ним вопросов никаких, работают.
показать ответы
Автор поста оценил этот комментарий

но SPL минимальна в конструкциях?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ох не знаю, может конечно это чисто субъективно, но посмотрите мой код, неужели на SPL это все будет понятнее и лаконичнее, не думаю.

Вот например включение DAC


static void dac_setup(void){

rcc_periph_clock_enable(RCC_GPIOA);

rcc_periph_clock_enable(RCC_DAC1);

gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG,GPIO_PUPD_NONE, GPIO4);

dac_enable(CHANNEL_1);

}

показать ответы
Автор поста оценил этот комментарий
чувствую себя тупым - стоило оторваться от этой темы на пару месяцев, так а просто адрес GPIO подставить и проверить?

у меня вот сейчас если честно, подрыва немного не хватает на это:)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Вот в том то и дело, завожу таймер, подставляю адрес и не работает, буду дальше ковырять, может осилю.
Автор поста оценил этот комментарий
На радостях от картинок (аж захотелось тоже сделать) - пропустил, что у вас f3 :(

Для f030 помню только - у меня DMA ADC и SPI, ADC как раз в  кольцевой буфер гонит постоянно, а вот про GPIO даже пришлось глянуть - ничего не сказано.

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

А я думал это табла которая говорит кто эвент на ДМА генерировать может, типа вот указаны таймеры. По апдэййту таймера типа копировать  из GPIO в память.

показать ответы
Автор поста оценил этот комментарий

хотел сделать что-то подобное, закупил деталей, а потом всё как-то навалилось и отложил в долгий ящик. @deathclaw, если не сложно, расшарь код gui

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да уже смотри выше в каментах на битбакете лежит.

DELETED
Автор поста оценил этот комментарий
Ммм, а зачем тачскрин на осциллографе?
раскрыть ветку (1)
Автор поста оценил этот комментарий

Самый дешманский китайский экран найденный мной на али был с тачскрином, и я даже поначалу хотел его прикрутить чтобы кнопки не городить, но ног не хватило, и я забил за эту идею.

показать ответы
Автор поста оценил этот комментарий
удивляюсь блин, и с дма разобрался и со всем почти что было на f030, без всяких либ вообще, только pdf, но другая проблема - не хватает воли добить уже несколько мелких багов и зарелизить....

а тут сразу осциллл.... поражаюсь!

раскрыть ветку (1)
Автор поста оценил этот комментарий

Скажите, вот вы разобрались с ДМА(да я знаю что между серией f0 и f3 пропасть), вообще возможно читать в кольцевой буффер из GPIOx_IDR с помощью ДМА?

показать ответы
1
DELETED
Автор поста оценил этот комментарий

Папаня заказал китайца(кит набор)  на 5 МГц  что то около 1000 вышло. Реально собрать дешевый на 100МГц?

раскрыть ветку (1)
Автор поста оценил этот комментарий
В теории да. И мой может выдать столько надо множитель поднять и дма освоить, реально можно около 100 получить, но usb работать не будет.
показать ответы
Автор поста оценил этот комментарий

dc-dc рублей 50

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да у меня их кулек лежит :-). Просто пока не вижу смысла тыкнуть в USB и пусть работает.

показать ответы
1
Автор поста оценил этот комментарий

Поздравляю!

Питание можно через li-pol АКБ реализовать (под дисплей по идее должен залезть).

Когда в корпус всё это дело переносить будешь, больше намучаешься.

P.S. Что за кнопка на плате с дисплеем слева?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Можно, но надо еще преобразователь на 3.7 - 5 городить, в принципе меня и от USB питание устраивает. Корпус делать тоже не буду, зачем оно и так достаточно компактно и крепко держится, носить с собой не буду.

Это резет контроллера экрана... но не работает, китаец однако.

показать ответы