Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Осциллограф+анализатор OsA2

Ср апр 19, 2017 17:37:07

Всем доброго дня!
Предлагаю к обсуждению конструкцию осциллограф+анализатор OsA2. Это продолжение разработки viewtopic.php?f=62&t=61626 на более современной базе.
Разработка велась с учетом минимальной стоимости деталей и максимального результата по параметрам. Многое обсуждалось в теме viewtopic.php?f=10&t=10324 . Были опробованы несколько вариантов конструкции и в результате остался одноплатный вариант.
Изображение
Осциллограф имеет 2 аналоговых канала с максимальной частотой оцифровки 32 МГц. Цифровой анализатор имеет 8 цифровых каналов с максимальной частотой 32 МГц или в другом варианте 64 МГц. Применен дисплей 3.95 дюйма с разрешением 400х240 точек. Управление сенсорное.
В основе стоит микроконтроллер STM32F030R8T6 (или STM32F071RBT6 во втором варианте). Захват сигнала происходит в буфер на внешнем ОЗУ CY7C1041DV33-10ZSXI.
Для оцифровки применены дешевые АЦП AD9280ARSZRL . Входные усилители AD8031ARTZ обеспечивают полосу пропускания по уровню -12% около 12 МГц.
Частота захвата ограничена разрешением дисплея и примененными АЦП. Рабочее поле дисплея 320х201 пиксель. Для дисплея с большим разрешением рабочее поле можно увеличить например до 480х250 и поднять частоту работы АЦП до 48 МГц.
Основные параметры:
2 аналоговых канала с усилением от 10мВ/деление до 20 В/деление в сетке 1-2-5
С отображением по времени от 0.1 мкС/деление до 1 С/деление в сетке 1-2-5
Переключение усиления автоматически или в ручном режиме.
8 цифровых каналов с TTL и CMOS уровнями
Изображение
Синхронизация по фронту/спаду автоматически или в ручном режиме. Источником синхронизации может быть один из аналоговых входов, цифровой вход или вход внешней синхронизации.
Есть возможность двигать графики по обеим осям. Из-за режима предзаписи можно рассмотреть состояние до момента синхронизации. Длина предзаписи устанавливается в меню в пределах 0-250 точек.
В нормальном режиме отображается действующее,максимальное и минимальное напряжение в каждом канале.
В режиме маркеров можно измерять мгновенные значения напряжения и времени (частоты).
Питание от литиевого аккумулятора 1000мАч, время работы на одной зарядке около 4х часов. Размеры 134х74х18 мм ,вес 145 грамм.
Фото внутри до сборки Изображение
Небольшое видео работы

https://www.youtube.com/watch?v=CozNfMY ... e=youtu.be
https://www.youtube.com/watch?v=qYufV7K ... e=youtu.be
Особенность конструкции состоит в том, что вместо традиционной микросхемы ПЛИС для управления ОЗУ применены синхронные счетчики. При этом обычная SRAM превратилась в память с последовательным доступом и работает не загружая ядро МК. Частота захвата зависит от скорости записи в ОЗУ. Это примерно 100 МГц. МК может выдавать тактовый сигнал,в зависимости от модели, до 32(64) МГц. То есть захват происходит за каждый такт процессора.
Схема:
Изображение
В настоящий момент дописывается программа, но есть некоторые вопросы которые хотелось бы обсудить.

Добавлено after 9 hours 55 minutes 15 seconds:
Логически программа разделена на две части. Первая-быстрая. Захват в буфер и отображение происходит последовательно. Вторая-медленная, от 10мс/деление и больше. Захват и отображение происходит одновременно,попиксельно. Иногда на границе этого разделения происходит так называемая "гармошка". Фронты сигнала стоят ровно, а спады колеблятся. Подозреваю что это связяно со скоростью обновления экрана 10-20 кадров в секунду. Собственно вопрос к приборостроителям - были ли у Вас подобные проявления и как с этим бороться?

Re: Осциллограф+анализатор OsA2

Чт апр 27, 2017 18:16:42

Добрый день. Приветствую тебя на Радиокоте :beer: Есть ли схема в нормальном формате, а то по картинке ориентироваться не удобно, она большая и вся на одном листе. По поводу гармошки, не плохо было бы выложить видео глюка.

Re: Осциллограф+анализатор OsA2

Чт апр 27, 2017 18:47:28

Вот схема для DipTrace 3.0 и видео.
https://www.youtube.com/watch?v=pot043A ... e=youtu.be
https://www.youtube.com/watch?v=bJ86Idd ... e=youtu.be

Добавлено after 1 minute 17 seconds:
Понимаю что в чужой программе ковырятся не интересно, но мне бы хоть алгоритм, можнов личку.
Вложения
OsA2017_0425.rar
(17.92 KiB) Скачиваний: 260
os2com.rar
(55.12 KiB) Скачиваний: 270

Re: Осциллограф+анализатор OsA2

Чт апр 27, 2017 19:02:12

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

Я так понял, что АЦП работает как бы само по себе, от МК только тактирование идет. Потом ты считываешь данные себе в буфер МК, но как работает внешняя память, если и МК читать пытается ее и АЦП что-то записать хочет. У меня то ДМА с МК разруливаются сами. Как выглядит глюк на синусе, также, пропадает кусок от него и видно склеивание или как?

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

Re: Осциллограф+анализатор OsA2

Чт апр 27, 2017 19:27:25

У микросхемы ad9280 есть вход 3state, им и рулю. Во время передачи из памяти в мк АЦП отключается, также и во время записи от цифровых входов. Можно и проект целиком, но там кроме этих трех файлов ничего нет. Я думал что каждый может создать в кейле например или в иаре новый проект и мои файлы просто скопировать.

Добавлено after 4 minutes 30 seconds:
На синусе тоже рвет. Что то с буфером надо делать. Может буфер мал? размер двух экранов. Можно попробовать увеличить.
Вложения
OsA2017_2.rar
(359.11 KiB) Скачиваний: 258

Re: Осциллограф+анализатор OsA2

Чт апр 27, 2017 20:03:07

Sergi писал(а):У микросхемы ad9280 есть вход 3state, им и рулю. Во время передачи из памяти в мк АЦП отключается, также и во время записи от цифровых входов.
АЦП же считывает данные через равные промежутки времени, тактируется от таймера, а при считывании из памяти ты успеваешь в эти промежутки времени? У меня такое ощущение, что плавает частоты опроса АЦП.

Re: Осциллограф+анализатор OsA2

Чт апр 27, 2017 20:18:02

На медленных развертках хотел сделать отрисовку по одному пикселю после обработки прерывания и захвата. Сейчас отрисовую весь буфер после каждого захвата, не всегда успеваю конечно. Но на быстрых развертках весь буфер читаю потом вывожу последовательно. Гармошка тоже проявляется. На видео 5mS и меньше - быстрая подпрограмма, 10mS-> медленная. И там и там нормально не работает.

Добавлено after 3 minutes 38 seconds:
На микросекундах все красиво.

Re: Осциллограф+анализатор OsA2

Сб апр 29, 2017 16:58:57

Есть сдвиги? Первым делом нужно убедится, что частота тактирования АЦП стабильная и не плавает, потому что судя по видео, это может быть как раз из-за разных временных отрезков. Я так понимаю что на экран выводится буфер один к одному как АЦП записывает в память или нет? Просто читал-читал программу и не разобрался, ошибок в ней найти сложно, потому что ничего не понять :))) Т.е. АЦП пишет во внешнюю память ее больше чем влезет в экран, выводится она вся с усреднением или прочим алгоритмом, или только кусок но подряд, 300 значений для 300х пикселей и вс?

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

Re: Осциллограф+анализатор OsA2

Сб апр 29, 2017 19:43:37

Извиняюсь, я не программист. Пишу как получается. До сих пор не разобрался как связать с и h, поэтому написал вкучу.
Весь главный цикл состоит из 3х частей: 1-по прерыванию от systick 10 раз в секунду опрашивается сенсор и если нажат обрабатываются кнопки, 2- если развертка менее 10мс/дел (100мс на экран -> 10 кадров всек) переносятся захваченые данные из внешней памяти в массив IN,разделяются и нормируются в массив OUT,корректируются по положению X и переносятся в буфер дисплея LCD все последовательно. 3 - буфер IN заполняется по прерыванию от таймера без внешней памяти,нормируются и разделяются в OUT и после каждого захваченного значения выводится буфер LCD в котором новое только одно значение по X.
Значения из внешней памяти в IN переносятся с прореживанием через 1,2,5,10...100 точек захвата. Из 65535 получаю 640 (65535/100=640+1535)
Надо блок-схему рисовать, а то сам себя запутаю.

Re: Осциллограф+анализатор OsA2

Сб апр 29, 2017 20:03:22

Sergi писал(а): 3 - буфер IN заполняется по прерыванию от таймера,нормируются и разделяются в OUT и после каждого захваченного значения выводится буфер LCD в котором новое только одно значение по X.
Значения из внешней памяти в IN переносятся с прореживанием через 1,2,5,10...100 точек захвата. Из 65535 получаю 640 (65535/100=640+1535)

Для чего таймер 3, чтобы прореживать данные из оперативной памяти? Т.е. как это работает. я понял, что у тебя какой-то замут и адрес выбрать точно нельзя, он инкриминируется при тактировании АЦП.

По порядку, включается тактирование АЦП, она выдает данные, они пишутся во внешнюю память, при следующем такте, адрес смещается. МК выдает некоторое количество тактов чтобы вся память заполнилась. Потом ему спешить некуда, он считывает из этой памяти либо подряд 640 точек, либо через 2-10 адресов, только зачем тут таймер, можно же в этом режиме ногой просто дрыгать. В этом случае на медленных развертках будет кака с редким обновлением экрана. Поэтому на медленных АЦП пишет во внешнюю память, а ты как-то эти данные воруешь и выводишь, хотя адрес как менять. Но на медленных развертках внешняя память и не нужна особо же, можно сразу в память МК считывать? но пока остановимся на варианте когда сначала заполняется буфер а потом он считывается, тут тоже есть дрыг, хотя если тактирование стабильно этого не должно быть.

Re: Осциллограф+анализатор OsA2

Сб апр 29, 2017 21:03:01

Физически я не знаю состояние счетчиков ас163. Тактирование к ним идет от таймера TIM1. От этого же таймера идет тактирование на TIM3. Это жестко связано. Поэтому я считаю указатель на ячейку памяти как состояние счетного регистра TIM3. Запись в память идет постоянно пока не начну читать. При поступлении сигнала синхронизации в GPIOD сохраняю значение счетчика TIM3 - это START,отнимаю значение предзаписи,отнимаю 10-20 тактов для гарантии не затереть запись - это END. Теперь жду когда TIM3 досчитает до END. Останавливаю запись. Начинаю вычитывать ногодрыгом. Сначала досчитываю до (START-предзапись), потом переношу в IN с шагом 1-2-5-- пока не дойду до END.
Далее софтовая синхронизация по IN чтобы устранить джиттер. Нормализация и перенос в OUT и буфер LCD. Когда графики дорисуются все начинаю сначала. Так работают быстрые развертки. Не думаю что вывод таймера CH1 TIM1 может както нестабильно работать.

Добавлено after 8 minutes 26 seconds:
На медленных развертках я во внешнюю память не пишу (или вернее не читаю из нее). TIM3 переключаю в режим прерываний и в прерывании захватываю данные с АЦП в массив IN. На частоте прерываний 3200 Гц и ниже я никак не пропущу софтовый захват.(или пропущу? может здесь и затык?)

Добавлено after 4 minutes 30 seconds:
И вот здесь хотелось отрисовывать график попиксельно после каждого захвата, чтобы не замирал экран. А сейчас рисую постранично по 320 отсчетов весь буфер LCD. Могу пропустить захват и не перенести его из IN в OUT.

Re: Осциллограф+анализатор OsA2

Сб апр 29, 2017 22:08:57

Sergi писал(а):И вот здесь хотелось отрисовывать график попиксельно после каждого захвата, чтобы не замирал экран. А сейчас рисую постранично по 320 отсчетов весь буфер LCD. Могу пропустить захват и не перенести его из IN в OUT.
График перерисовывать точно не стоит после каждого захвата, или по 1 пикселю подрисовывать, или ждать пока побольше наберется, но график то не в прерывании рисуется? Даже если не успеть отрисовать весь график между прерываниями таймера 3, то он должен отработать нормально.

Sergi писал(а):TIM3 переключаю в режим прерываний и в прерывании захватываю данные с АЦП в массив IN. На частоте прерываний 3200 Гц и ниже я никак не пропущу софтовый захват.(или пропущу? может здесь и затык?)
При таком способе точно джитер будет. ДМА есть в этом МК, если есть нужно его задействовать, это не дело в прерывании считывать.

Но глюк есть и когда быстрые развертки, нету только в мкс. Может при прореживании возникает глюк? Т.е. когда из внешней памяти берутся данные подряд, то все ОК, а когда начинаются пропуски и когда они максимальны через 10 раз, то возникает джитер, т.е. иногда попадается 0 от меандра, а иногда максимум. Данные не нужно считывать через 10 адресов, данные нужно считывать все, а потом обрабатывать, например, усреднить 10 значений, тогда точно не должно быть дрожания.

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 08:14:58

Пока не смог по одному отсчету подрисовывать, график ломается, думаю.
Можно и усреднять, только это будет эквивалентно понижению частоты тактирования АЦП. Можно попробовать.
На малых развертках чтобы заметить джиттер в 1 пиксель прерывание должно выполняться за 63 и более тактов. У меня около 125+вход/выход. Значит на развертках 50мс/дел и больше джиттера вобще не должно быть, а он есть.
Уменьшал до 55, без разницы.
Но гармошка вылазит и на быстрых и на медленных развертках, наверное сам принцип не работает.Думаю дальше.

Добавлено after 2 hours 35 minutes 28 seconds:
Прмерная блок-схема
Вложения
блок.rar
(12.8 KiB) Скачиваний: 211

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 08:52:38

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

Добавлено after 5 minutes 36 seconds:
А ты можешь и писать во внешнюю память и считывать? На целосность операции проверить можно, Записать в нее 1,2,3,4,5,6 и т.д., а потом считать и сравнить, нигде перескакиваний по адресам не происходит? Память все 256К на канал используется?

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 09:03:20

Это то понятно, это по Y. У меня по Х проблемы и с синхронизацией. Устойчивая синхронизации если 1.5 - 2 и больше периодов сигнала на экране. Иначе срывает через раз или фаза меняется.
Теоретически писать могу, но произвольного доступа нет. Только последовательный.64к на канал из-за 16бит таймера TIM3,

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 10:16:48

Sergi писал(а):Теоретически писать могу, но произвольного доступа нет. Только последовательный.64к на канал из-за 16бит таймера TIM3,
Ну последовательный сойдет для этого тоже. Проверить чтобы уже точно считывание из памяти было корректным, так как рвет по оси времени, значит или считывание шагает с разным шагом или запись, вот это все нужно проверить отдельно. Считывание верификацией, а запись- можно частоты АЦП проверить и сравнить глубину записи, что именно 64к записалось скажем постоянное напряжение.

Добавлено after 57 seconds:
Sergi писал(а):Устойчивая синхронизации если 1.5 - 2 и больше периодов сигнала на экране.
Для этого для программной синхронизации нужно использовать всю внешнюю память в 64к, а не только кусок считанный из нее в 640 байт.

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 10:20:17

Косвенно корректность данных можно оценить по вычислениям среднего и действующего значения. У меня там все сходится. Провалов нет. Вычисляю во всех режимах, и подраяд и с прореживанием. Все результаты согласно теории.
Программно я корректирую синхронизацию в пределах 20-30 отсчетов. Железная синхронизация на компараторе.

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 10:29:43

Еще что можно сделать. Записать во внешнюю память сигнал 1 раз, а читывать и выводить на экран постоянно и смотреть если сигнал стоит как вкопаный, значит глючит именно запись с АЦП во внешнюю память там и копать.

Re: Осциллограф+анализатор OsA2

Вс апр 30, 2017 10:36:05

Выход компаратора подключен к PD2. В цикле while я слежу за изменением напряжения и если было такое в нужном направлении выхожу из цикла. Этот цикл выполняется около 12 тактов. Поэтому я могу получить ошибку в пределах 0-6 пикселей по Х. Программно я ищу момент синхронизации в окружении сохраненного значения из цикла while. Тогда ошибка начала синхронизации не превысит 0+1 пиксель. Что и видно на дисплее. Начало четкое. А вот дальше бывает гармошка. Если в дебагере посмотреть содержимое IN[] то там все корректно. Дрожит при выводе.

Добавлено after 1 minute 24 seconds:
В режиме HOLD естественно все стоит как у призывника.
Ответить