Осциллограф данных Datascope (D1A1) на STM32F7

Аватара пользователя
Автор темы
T-Duke

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение T-Duke » 20 май 2019, 15:39

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

Итак откуда корни. Необходимость в такой штуке возникла давно, можно сказать сразу же как плотно взялся за программирование микроконтроллеров. Как известно в 90% случаев, лучший отладчик - это отсутствие отладчика, вместо которого требуется внимательность, аккуратное чтение документации и обдумывание алгоритмов с разных сторон. Однако специфика разработки на микроконтроллерах такова, что очень часто на сцену выходят те 10% которые редко встречаются при обычном программировании. Это процессы реального времени, работа со встроенными аппаратными средствами, в режиме конкуренции ресурсов, быстротекущие и редко происходящие процессы. В таких случаях какими бы знаниями не обладал разработчик, как бы он внимательно не читал документацию, как бы не обдумывал алгоритмы, неуловимый но шустрый failure, иногда подкрадывается внезапно и очень быстро. Особенно актуально это в случае разработки силовой электроники. Процессы происходящие в алгоритмах управления быстротекущие и за несколько шагов алгоритма может развиться грандиозный ахтунг, последствия которого иногда с трудом может нивелировать аппаратная защита силовых каскадов, если такая вообще предусмотрена.

Не менее неприятными являются асинхронные, псевдослучайные и разные редкие сбои, когда в работе алгоритма что-то идет не так, но чтобы выяснить это нужно "остановить время", и проанализировать замороженные данные, на предмет аномального поведения. Другими словами нужна возможность осциллографировать не электрические сигналы, а поведение внутренних данных работающего устройства. Без такой возможности, отладка таких ситуаций превращается в нехилое красногазенье, с выдвижением гипотез, перекомпиляцией решения, прошивкой камня, запуском, получением не совсем понятного резульата, гадания на кофейной гуще, выдвижением новой гипотезы, внесением изменений в проект, перекомпиляцией, перепрошивкой, и все по новой.

Следует отметить, что некоторые среды разработки, предлагают такую возможность. Например Visual Studio позволяет наблюдать графически изменение состояния переменных во времени. Подобное решение для микроконтроллеров от ST известно как STM Studio. Но у всех этих решений есть один крупный недостаток - они медленные. Если требуется частота обновления группы переменных в несколько килогерц, тогда эти средства неприменимы. Кроме того, очень часто в готовом продукте чего-то не хватает, а что-то бы хотелось сделать немного иначе. Несколько лет назад, мой товарищ попытался сделать нечто подобное на андроиде. Но топовый на то время планшет не мог вытягивать поток данных на частоте выше килогерца. Причин несколько - одна из них сам андроид, вернее виртуальная ява-машина.

В общем все это привело меня к тому, что нужно делать свой проект, при чем в bare metal то есть в голом железе - никаких андроидов, линуксов и вообще никаких осей. Только голое железо и работа с ним на самом прямом уровне. Естественный выбор пал на микроконтроллеры STM32 как на минимально достаточные для такого дела. За годы работы с этими микроконтроллерами накопилось достаточно много опыта и нужных компонентов. Создана с нуля своя графическая библиотека, с основными примитивами, приведением систем координат и клиппингом по границам окна, создана библиотека реализующая систему меню ориентированную на работу с тачскрином, запилена библиотека различных алгоритмов DSP. Все это привело к возможности создания этого проекта. Но он находился во вяло-текущем полурабочем состоянии, сменил несколько отладочных плат, но развивался медленно, по причине нехватки времени.

Однако, недавно моему терпению наконец, все же пришел конец :crazy: Интенсивно работая над текущим проектом - сервоприводом для одной узкой сферы применения, темнейшество зашло в тупик. Алгоритмов в решение напихано много, с оптимизацией O3, работают на пределе возможностей процессора, то там, то здесь выскакивали мелкие глюки, иногда и крупные. В ядре выполняется слишком много конкурентных скоростных процессов, и несколько потоков прерываний. Пришло осознание, что дальше топтаться на месте нельзя. Без того, чтобы "остановить время" и увидеть данные, придется очень долго возиться в цикле - выдвижение гипотезы-компиляция-прошивка-проверка. Кроме того, все мы хотим стать профессионалами в своей области. А профессионалов от других - отличают хорошие инструменты. И необходимость в таком инструменте начала поджимать так, что все длинные майские выходные были полностью отданы под приведение этого проекта в альфа-версию. Иначе двигаться дальше в других проектах не было никакой возможности.

Основные требования к осциллографу данных были поставлены такие:

1.Без лагов принимать, запоминать и показывать на экране поток данных из 8 вещественных каналов данных на скорости хотя бы 10кГц.
2.Отображать каждый канал своим цветом, регулировать усиление всей группы каналов, так и независимо настраивать как усиление, так и смещение каждого канала или нескольких каналов вместе.
3.Режим графического отображения должен обладать продвинутыми возможностями борьбы с алиасингом (стробоскопическим эффектом), то есть вывод на экран сжатых по оси времени данных, должен хотя бы частично эмулировать аналоговый осциллограф, чтобы вместо реального сигнала, не наблюдать его НЧ алиас.
4.Иметь возможность просматривать остановленные данные пролистывая их по глубине истории.
5.Кроме графического, иметь режим текстового просмотра конкретных числовых данных всех каналов.
6.Иметь индикаторный режим канала, где данные отображаются во виде аналогового индикатора, показывающего среднее за некоторый период значение, а так же минимальное и максимальное значение за весь период наблюдения.


В качестве тестового стенда была выбрана стартеркитовская отладочная плата на STM32F7 камне, работающем на частоте 216 МГц. С платой сразу был куплен TFT экран с разрешением 800x480 и резистивным тачскрином.
IMG_20190520_132631.jpg


Изначально на этой плате был распаян чип SDRAM 32Мб, который моя темность предала анафеме и вместо него был впаян чип на 64Мб. Что удвоило время записи скоростных процессов. Вот на этой тестовой лошадке и была запилена альфа версия проекта, где основные хотелки уже реализованы. Несколько фоток разных режимов работы датаскопа:

IMG_20190520_181832.jpg
IMG_20190520_181856.jpg
IMG_20190520_181912.jpg


Намеченная скорость потока данных от отлаживаемой платы достигнута, проверял все на скорости потока данных 12кГц. Но фактически уперся в пропускную способность кабеля передачи по УАРТ-у. Канал по УАРТу способен теоретически обеспечить скорость обмена с F4 камнем в 10.5МБит/с, что даст максимальную скорость потока отладочной информации 29кГц. Но практически скорость ограничивается слабыми возможностями ножек микроконтроллера раскачивать емкостную нагрузку. Если для связи использовать коаксиальный кабель длиной 2метра, то скорость передачи выше 2Мбит/с, становится проблематичной. пришлось отказаться от экранированного кабеля и использовать кабель из двух проводников. У него емкость существенно меньше и скорость 5Мбит достигается без проблем. Но все же иногда проскакивают ошибки. Если дай Бог разовью проект, тогда для связи придется поставить скоростные диф. драйверы и передачу вести по витой паре. Тогда можно будет перейти на SPI канал обмена и получить скорость обмена например 30МБит/с, что даст скорость потока отладочной информации 80кГц, что уже довольно существенная величина для многих алгоритмов не только в силовой электронике. Если же связь осуществлять с перспективными моделями микроконтроллеров STM32, тогда по порту SPI можно будет получить скорость обмена выше 50Мбит/с и даже выше 100Мбит/с, для топовых моделей. А это уже очень неплохо.

По мере возможности буду допиливать новые фичи.

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

https://youtu.be/LbYQuld0Q3Q
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
L0ki
Реальное имя: Женя

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение L0ki » 21 май 2019, 09:01

:? Imho плисину + оперативку, ну и естественно на каждый канал свой АЦП. И уж к "этому" прикручивать стм32.
Классика жанра скопостроения.
:unknown: хотя вы и сами это наверняка прекрасно знаете.

Лично я в аналогичных целях "для цифры" пока обхожусь китайским логическим анализатором Hantek LA5034.
для моих задач его пока хватает...

P.S.
Настоятельно рекомендую присмотреться к ПЛИСам. Ибо связка из МК и ПЛИС может решить почти любую задачу.
Даже копеечная и простейшая по нынешним меркам EPM240 порой дает такие возможности, о которых не всякий МК и помечтать может.
чукча - не писатель, чукча - читатель.
Аднака.

Аватара пользователя
Автор темы
T-Duke

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение T-Duke » 21 май 2019, 10:44

Евгений, дело в том, что это не осциллограф сигналов. Это осциллограф данных. ПЛИС здесь мало поможет.

Возможно в заблуждение ввел аналоговый сигнал на экране. Но это сигнал который обрабатывает программа. То есть он получен на другом устройстве, его бортовым АЦП, а дальше идет в алгоритм, который его обрабатывает. Сигнал на экране это снэпшоты переменных типа float, через которые пробегают аналоговые сигналы.

Допустим есть плата в которой работает некий алгоритм. И в нем что-то идет не так. В пошаговой отладке не увидеть ибо процесс редкий и скоротечный и глюк связан с аппаратными конфликтами. Так вот в отлаживаемой плате инициализируется экземпляр отладочного потока, который на частоте работы алгоритма выбрасывает в порт, например УАРТа, поток значений нужных переменных. И уже этот поток данных отладчик выводит на экран в режиме осциллографа. То есть здесь нет измерения электрических сигналов. Здесь "программные" сигналы, так казать поток снэпшотов переменных.

А на счет классического осцилла или лог анализатора вы правы, туда ПЛИС сама просится.
L0ki писал(а):Источник цитаты Даже копеечная и простейшая по нынешним меркам EPM240 порой дает такие возможности, о которых не всякий МК и помечтать может.
Согласен. Только с ПЛИС я совсем не имею опыта. Ни разу не пробовал и даже понятия не имею за какой край браться.

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

Тут да, ПЛИС нужна. Но нужен и ментор, который наставит во вопросе конкретики работы с ПЛИС.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
ROW
Реальное имя: Роман
Откуда: Барнаул

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение ROW » 21 май 2019, 13:48

T-Duke писал(а):Источник цитаты Только с ПЛИС я совсем не имею опыта. Ни разу не пробовал и даже понятия не имею за какой край браться.
Во!во! посиди в моей тарелке Ваше темнейшество..а то чуть что? "STM взял написал,создал.." а я ту СТМ только на картинке и видал :unknown: "Ни разу не пробовал и даже понятия не имею за какой край браться."(с) T-Duke
Нужно любить людей, но быть равнодушным, творить добро и ждать зла, надеяться на лучшее, но ожидать худшего, верить в людей и никому не доверять, быть оптимистом с реалистичными взглядами, жить с открытым сердцем и никого в него не пускать.

Аватара пользователя
Автор темы
T-Duke

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение T-Duke » 21 май 2019, 14:27

ROW писал(а):Источник цитаты Во!во! посиди в моей тарелке Ваше темнейшество..а то чуть что? "STM взял написал,создал.."
Дык а шо делать? Все равно придется столкнуться. А когда есть кому подсказать тогда можно пробовать. С контроллерами я уже дружу давно, пора за FPGA браться. Кроме того, я же не предлагал тебе самому прогу писать :)
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
L0ki
Реальное имя: Женя

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение L0ki » 21 май 2019, 15:16

Народ у нас зря традиционно шарахется от плисин :)
Да! было когда-то время что возня с ними сильно напоминала :crazy: извращенный секс в присядку.
Особливо с плисами первых поколений.
Однако нынешние плисы, и софт под них далеко ушли с тех времен вперед.

:? с чего начинать..., ну вот например хороший русскоязычный ресурс на тему начального старта.
Качаем себе бесплатную версию квартуса отсюда
делаем USB-Blaster, или если лень делать покупаем (у китайцев например) готовый.
Делаем самодельную или же покупаем готовую (в поднебесной например) отладочную плату под например недорогую CPLD например EPM240 или EPM570
// Даже у традиционно дико охреневающих чиподралов EPM240 стоит 250руб.
И вперед! :)
Verilog / VHDL по своей идеологии и синтаксису не далеко ушли от си/паскаля.
К тому же в квартусе есть еще и схемотехнический ввод. То бишь рисуем нужную схемку и все.
// :? правда порой написать код бывает проще чем нарисовать схему.

P.S.
Про логические анализаторы.
:? LA5034 - у меня "тяжелая артиллерия", я им пользуюсь весьма редко.
Мне обычно (чтобы понять :wall: в каком месте я дурак ) хватает в роли логического анализатора микрочипоского PICkit2,
в комплекте либо с простенькой программкой на питоне,
вот так оно выглядит:
1.jpeg
2.jpeg


Либо, когда нужен декодер какого-либо протокола, то пользуюсь декодером из программы PulseVview,
входящей в состав замечательного :good2: программного пакета sigrok
для примера сделал скриншот с декодером I2C (с окошком настройки декодера этого протокола)
screenshot at 2019-05-21 18-04-53.png

под спойлер спрятал список декодеров:
► Показать
У вас нет необходимых прав для просмотра вложений в этом сообщении.
чукча - не писатель, чукча - читатель.
Аднака.

Аватара пользователя
Автор темы
T-Duke

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение T-Duke » 23 май 2019, 10:14

L0ki писал(а):Источник цитаты вот например хороший русскоязычный ресурс на тему начального старта
Благодарю! Знал о том сайте, но так как не в курсе с чего начинать, требовалась санкция знающего человека. Со ПЛИС-ами все равно придется знакомиться, главное правильно начать.

Пока согласовываю работу датаскопа со спектральным преобразованием на 4096 точек, в перерыве попробовал проверить насколько разгоняются F4 контроллеры. Запустил вместо штатных 168МГц, на частоте 240МГц, которую до меня уже неоднократно пробовали другие. Все работает стабильно. Решил расширить горизонты и запустил на частоте 260МГц. Тоже работает. На счет стабильности на длительный период не уверен, потому что при частоте ядра 268МГц контроллер работает секунду и виснет, но на 260МГц, работает безо сбоев. Температура чипа поднялась до 38 градусов, при температуре окружающей среды в 25 градусов. Питание контроллера 3.24В, немного ниже 3.3В. Думаю если поднять напряжение питания до 3.6В тогда осилится и 280МГц. Пока пусть поработает на 260МГц, для статистики.

Хотя... что там гадать, взял да и попробовал. Поднял напряжение питания до 3.8В. Уверенно получил рабочую частоту 270МГц, при потребляемом токе всей отладочной платы 129мА. То есть потребляемая она же рассеиваемая мощность 490мВт. Можно было попробовать поднять питание до максимально дозволенных 4В, но овчинка не стоит выделки. Прирост в пару МГц, может слишком дорого обойтись. Поэтому можно предположить, что такие камни в оверклокинге, могут уверенно работать на частотах 240МГц, при повышенном питании 250-260МГц. Ну а если фреончиком охлаждать может и за 300МГц перешагнут. Однако это для извращенцев :crazy:

На очереди проверка оверклокинга F7 камня. Но думаю потому, что они изготавливаются по тому же техпроцессу что и F4 камни, результаты будут схожими. Ну а если по серьезному подходить к делу, то подумываю о переходе на камень STM32H7, так как он сделан уже по 40нм техпроцессу и куда шустрее предшественников. Там частота 480МГц сходу, как раз то что нужно для работы с TFT разрешением поболее нежели 800Х480.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
L0ki
Реальное имя: Женя

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение L0ki » 23 май 2019, 12:09

Да в принципе у всех МК есть некоторый запас по максимальной тактовой частоте.
Я конечно не знаю что и как у Вас там реализовано, но может есть смысл сделать "многоголовый" девайс,
то бишь нескольких МК, с какими либо быстрыми каналами взаимного обмена (например SPI какойнить аппаратный набортный заюзать, или ваще изобразить "классическую" параллельную двунаправленную шину).
Тогда можно будет распараллелить задачу - например один МК занимается только интерпретацией отображаемых данных и рисованием их на экране, другой еще чем-то, и т.д....

P.S.
Возвращаясь к плисам. Оно конечно очень субъективно, с моей кочки зрения, однако я бы посоветовал начинать сначала с простейшего схемотехнического ввода, параллельно изучая VHDL.
Иногда что-то простое и несложное (несмотря на :wall: уродство редактора схемного ввода в квартусе)
можно вообще ни написав ни одной строчки кода просто нарисовать схемой, откомпилировать и залить в чип.
Почему я именно предлагаю VHDL, а не Verilog или AHDL ?
Ну AHDL - это только Altera (кстати ныне является подразделением интела - купили на корню), и ничего кроме Альтеры. Т.е. будет привязка к одному изготовителю плисин.
VHDL с моей кочки зрения, язык более "строгий" чем Verilog, т.е. вероятность наделать глупых ляпов, и потом чесать репу " :? а чего эта оно такЪ?" , при прочих равных условиях будет меньше.
Ну и с HDL языками немножко смещается в голове программистская парадигма
- что все выполняется так или иначе последовательно :) ,
а тут в железе могут выполнятся параллельно куски кода (которые фактически являться кусками реальнных логических схем).

И да...., про прошивку Альтер. Если в компе есть такой раритет как LPT-порт, то можно сделать Byte Blaster II
Altera_Byteblaster_Ii_Schematic.pdf


он несколько отличается от более старой версии Byte Blaster MV
ByteBlasterMV.gif

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

Аватара пользователя
Автор темы
T-Duke

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение T-Duke » 23 май 2019, 14:26

L0ki писал(а):Источник цитаты но может есть смысл сделать "многоголовый" девайс,
то бишь нескольких МК, с какими либо быстрыми каналами взаимного обмена (например SPI какойнить аппаратный набортный заюзать, или ваще изобразить "классическую" параллельную двунаправленную шину).

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

У меня же контроллер должен принять по последовательному порту (пока УАРТ в перспективе SPI), поток отладочных данных, записать их в гигантский циклический буфер размером почти во всю SDRAM и выводить потом все это дело на экран в соответствии с хотелками пользователя. STM32F7 вполне справляется с этим делом. Уже даже спектральное преобразование на 4096 точек успевает в параллель делать. То есть пока хватает одного камня. А вот если бы подумал добавить осциллограф электрических сигналов, тогда да. В моем случае можно обойтись без ПЛИС, если поставить второй камень, который будет работать только с АЦП на частотах до 100МГц и потом выдавать накопленный результат основному камню. Но если уже ставить АЦП, тогда хочется высоких частот дискретизации. А вот сюда вот уже ПЛИС просится.
L0ki писал(а):Источник цитаты однако я бы посоветовал начинать сначала с простейшего схемотехнического ввода, параллельно изучая VHDL.
Тоже так думал. Да и среда Xilinx тоже VHDL понимает.

Для себя решил пробовать пусть пока виртуально понять как написать для ПЛИС обработку, 16-битного скоростного АЦП и закинуть это дело в память, пусть для начала статическую. То есть на уровне проекта в квартусе получить все. А потом уже подобрать какую-нить отладочную плату с ПЛИС и попробовать в железе. АЦП хочу применить классический, который китайцы ставят в свои осциллы, 8-битный 250МГц, с демультиплексором на выходе. То есть поток данных получается 16 битный с частотой 125МГц. Вот под это дело и попробовать сделать проект в квартусе. Можно так же попробовать запилить демультиплексор 16-32бита, тогда поток данных на выходе упадет до 62.5МГц и его можно будет подхватить контроллером памяти STM32 и перекидывать в SDRAM. Хотя интереснее конечно чтобы ПЛИС сама все делала.

L0ki писал(а):Источник цитаты про прошивку Альтер. Если в компе есть такой раритет как LPT-порт, то можно сделать
Кроме ноута у меня уже давно ничего нет. Думаю проще купить готовый бластер для USB порта.
Technology is insignificant comparing to the power of the Force.

Аватара пользователя
L0ki
Реальное имя: Женя

Осциллограф данных Datascope (D1A1) на STM32F7

Сообщение L0ki » 23 май 2019, 14:49

просто демультиплексер 8(16) ->32бит лехко и непринужденно упихнется в копеечную EPM240, еще и места там овердофига останется - по сути "это" небольшая кучка триггеров-защелок и все.
при этом даже никакого HDL-языка не потребуется, достаточно будет простого схемотехнического ввода в квартусе.
Можно (и imho нужно) будет потом еще и допилить (на том что останется в EPM240/570) этот демультиплексор FIFO буфером - чтоб гарантированно ничего не терялось.

Отправлено спустя 14 минут 5 секунд:
P.S.
Тоже давно сижу на ноутах... :unknown: однако вот чем (на будущее) хорош Byte Blaster II
- так это тем, что он может работать с любыми плисинами.
Хоть с 1.5v/1.8v питания, хоть с 2.5, 3.3, 5v. :good2:
Обратите внимание как там сделаны как входные, так и выходные каскады.
Посему у меня время от времени порой возникают мысли о PCMCIA-карточке с "честным" (т.е. с желязячным базовым адресом &H378 ) LPT-портом.
чукча - не писатель, чукча - читатель.
Аднака.


Вернуться в «Измерительные инструменты»