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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Принципы обработки в DSO, Цифровая часть
InvisibleFed
сообщение Sep 1 2008, 09:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Здравствуйте. Делаю девайсину, так, хобби. Вот возникли сомнения в двух вопросах. Точнее сомнения и незнания.

1. Как реально происходит синхронизация в DSO. Т. е., например есть некий буфер с пачкой сэмплов, есть значение уровня срабатывания триггера, имеется окно отображения. В этом окне отображения есть такой параметр как положение (т. е. положение точки срабатывания триггера в пределах окна, по горизонтали). Буфер имеет конечную длину. Как правильно заполнять буфер (по срабатыванию триггера или постоянно?)? И как в таком случае учесть положение точки срабатываиня триггера синхронизации при отображении в окне? И вообще, общий принцип.
2. И отсюда, собственно второй вопрос. Об организации буфера сэмплов: циклический или двойной (в одну часть пишем новые сэмплы, вторую часть в это время отрисовываем)? Что предпочтительней и что реально используется? В случае циклического буфера интересен также алгоритм извлечения сэмплов для отрисовки.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Sep 3 2008, 10:52
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Может некорректно или непонятно задал вопрос? Я уверен, что масса людей знает механизмы синхронизации в цифровом осциллографе (основные) и методы работы с памятью.
Go to the top of the page
 
+Quote Post
slog
сообщение Sep 3 2008, 11:33
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Цитата(InvisibleFed @ Sep 1 2008, 13:28) *
1. Как реально происходит синхронизация в DSO. Т. е., например есть некий буфер с пачкой сэмплов, есть значение уровня срабатывания триггера, имеется окно отображения. В этом окне отображения есть такой параметр как положение (т. е. положение точки срабатывания триггера в пределах окна, по горизонтали). Буфер имеет конечную длину. Как правильно заполнять буфер (по срабатыванию триггера или постоянно?)? И как в таком случае учесть положение точки срабатываиня триггера синхронизации при отображении в окне? И вообще, общий принцип.

IMHO в разных по разному сделано. Логично было бы писать в кольцевой буфер непрерывный поток. Как сработатет триггер, после этого ещё дописываем допустим 2/3 длины буфера и стоп. Иначе не увидим момент срабатывания триггера. А вот в каком месте на экране будет момент срабатывания триггера - должен юзер выбрать. Может ему интересны события до триггера, может после.

Цитата
2. И отсюда, собственно второй вопрос. Об организации буфера сэмплов: циклический или двойной (в одну часть пишем новые сэмплы, вторую часть в это время отрисовываем)? Что предпочтительней и что реально используется? В случае циклического буфера интересен также алгоритм извлечения сэмплов для отрисовки.

IMHO Предпочтительнее двухпортовая память. Что реально используется - тайна за семью печатями и наверно у разных производителей по разному. Tek например в дешевых моделях до сих пор использует память на ПЗС.

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


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Sep 4 2008, 00:53
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
Чё изобретаешь-то?

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

Цитата
Вообще, информации об устройстве и тем более схемотехнике цифровых скопов в свободном доступе практически нет.

Это я заметил =). Но меня сейчас не столько интересует схемотехника (частоты как я уже говорил не большие). Меня интересует, если так можно сказать, алгоритмическая часть.

Цитата
Логично было бы писать в кольцевой буфер непрерывный поток. Как сработатет триггер, после этого ещё дописываем допустим 2/3 длины буфера и стоп. Иначе не увидим момент срабатывания триггера. А вот в каком месте на экране будет момент срабатывания триггера - должен юзер выбрать. Может ему интересны события до триггера, может после.

А вот тут уже по сути вопроса. Все понятно как реализовать снятие и отображение сигнала после срабатывания триггера (даже в очень далекой перспективе). В некий регистр/переменную V заносим значение номера семпла (такта синхронизации АЦП) после срабатывания триггера (откуда мы хотим наблюдать картинку). Тогда как только сработал триггер, начинаем счетчиком считать такты (сэмплы). Пока ничего никуда не пишем. Как только значение счетчика станет равно значение в регистре/переменной V - пишем в память (хоть с самого ее начала), и выводим на экран. Чтобы избежать переполнения памяти ограничиваем число записываемых сэмплов длиной кольцевого буфера. Это все вроде тип-топ.
Но вот вопрос - как поймать сигнал до срабатывания триггера? Т.е. как записать его? Прибор не умеет заглядывать в будущее (через сколько же там тактов прийдет синхроимпульс?). В Теках (в тех, которые я держал в руках) время наблюдения (если так можно выразиться) сигнала ДО триггера ограничено одним экраном при любом коэффециенте развертки. Время же ПОСЛЕ триггера... вообщем, я устал крутить ручку "Положение" - так и не нашел конца. Какие есть знания или догадки?
Go to the top of the page
 
+Quote Post
Ledmaster
сообщение Sep 4 2008, 03:03
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141



Цитата(InvisibleFed @ Sep 4 2008, 06:53) *
Но вот вопрос - как поймать сигнал до срабатывания триггера? Т.е. как записать его? Прибор не умеет заглядывать в будущее (через сколько же там тактов прийдет синхроимпульс?). В Теках (в тех, которые я держал в руках) время наблюдения (если так можно выразиться) сигнала ДО триггера ограничено одним экраном при любом коэффециенте развертки. Время же ПОСЛЕ триггера... вообщем, я устал крутить ручку "Положение" - так и не нашел конца. Какие есть знания или догадки?
Заглянуть в будущее легко, если смотреть из прошлого в настоящее wink.gif
Буфер состоит из двух частей: FIFO длиной m, в который сигнал пишется постоянно, и линейного основного буфера длиной N, в который запись с выхода FIFO начинается по триггеру и заканчивается при его заполнении. Таким образом, мы имеем m выборок до триггера и N-m после.
Go to the top of the page
 
+Quote Post
slog
сообщение Sep 4 2008, 04:50
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Не понял, в чем проблема? Постоянно пишем в один кольцевой буфер. Он же память выборок. Из него же вывод на экран. Подразумевается что до срабатывания триггера буфер уже заполнен новыми данными. После срабатывания триггера продолжаем писать, но только определённое кол-во выборок, которое хотим сохранить после триггера, остальная часть буфера будет содержать данные до триггера. Сколько там будет экранов - зависит от длины буфера и размера экрана. Нужны будут две переменные - длина записи после триггера и адрес сэмпла на котором сработал триггер. И можно всю память заполнить выборками хоть до, хоть после триггера, хоть в любых пропорциях, как хочешь.
Вот тут немного есть по теме http://www.fpga4fun.com/digitalscope.html


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Sep 4 2008, 12:23
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
Постоянно пишем в один кольцевой буфер. Он же память выборок. Из него же вывод на экран. Подразумевается что до срабатывания триггера буфер уже заполнен новыми данными.


Странно, и что меня так клинит... Эх, хорошо видать отдохнул =)... Спасибо.
Go to the top of the page
 
+Quote Post
Ledmaster
сообщение Sep 4 2008, 17:56
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141



Цитата(InvisibleFed @ Sep 4 2008, 18:23) *
Странно, и что меня так клинит... Эх, хорошо видать отдохнул =)... Спасибо.
А Вы еще подумайте wink.gif Я про два раздельных буфера не зря говорю.
Во-первых, когда вы останавливаете запись в кольцевой буфер, теряется возможность обработать следующий импульс синхронизации так же, как первый, т.е. таким образом можно реализовать только режим однократного запуска. Во-вторых, для одновременной визуализации содержимого буфера требуется удвоенная скорость доступа к нему или двухпортовое ЗУ, а то и двойной буфер.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Sep 4 2008, 23:04
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
А Вы еще подумайте wink.gif Я про два раздельных буфера не зря говорю.


Я уже подумал. Да, действительно, сопутствующие проблемы имеются. Буду мозгом искать лучший вариант (рассматриваю Ваш, читаю то что дал slog). А Вы делали что-то подобное? Откуда соображения (или просто сходу вариант предложили)?
Go to the top of the page
 
+Quote Post
Syberian
сообщение Sep 5 2008, 03:40
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999



На мой взгляд, схема синхронизации в DSO такая:

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

Далее подача синхро блокируется, и определенное число выборок надо вывалить, начиная с нулевого адреса, в память для экрана DSO, чтобы его заполнить. После этого, разрешается новая выдача синхроимпульса. Процесс повторяется.
Очень удобно делать хоть на ПЛИС, хоть на DSP.
По поводу буфера экрана. Для плавности отображения, функции "стоп-кадр" с увеличением и прочих наворотов, используется oversampling - фактически, высота очередного отсчета на экране при обновлении берется через N отсчетов в памяти. При использовании "zoom" число N просто уменьшается.
Но для простенького самодельного осцила и так сойдет smile.gif

Примерно, так.

И этта... Забудьте о "сдвигании" всего массива выборок вперед или назад, кольцевых буфернях и проч требухе! В "правильных" DSO заполнение только инкрементом в Static memory. Далее - с нуля, ага yeah.gif
Go to the top of the page
 
+Quote Post
slog
сообщение Sep 5 2008, 04:45
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Цитата(Syberian @ Sep 5 2008, 07:40) *
На мой взгляд, схема синхронизации в DSO такая:
Непрерывно поступающие "в никуда" выборки сигнала проходят через две/три дополнительные ячейки задержки на один такт.

Ну и как в таком случае увидеть то что было ДО срабатывания триггера?


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
Syberian
сообщение Sep 5 2008, 05:01
Сообщение #12


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999



Цитата(slog @ Sep 5 2008, 07:45) *
Ну и как в таком случае увидеть то что было ДО срабатывания триггера?


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

В более навороченных осциллах выборка делается сразу в память постоянно, от начала до конца, а буфер экрана отдельный. При его наполнении из середины сигнального буфера+ смещение (ага, регулятор shift на осциллографах Agilent) , ищется перепад уровней, и с учетом его проводится еще и небольшой сдвиг "окна" отображения, чтобы пойманный "edge" был посередине (под указателем на экране), а "до" и "после" - соответственно остальной сигнал.
Используя мощный сигнальник, все происходит гораздо быстрее, чем отрисовывается на экране один кадр.

Добавлю, что реальное обновление экрана, по причине выше, в цифровых осциллографах, даже при измерении сотен МГц, редко бывает выше 30 FPS
Go to the top of the page
 
+Quote Post
slog
сообщение Sep 5 2008, 05:14
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Цитата(Syberian @ Sep 5 2008, 09:01) *
В начальный момент запуска осцилла ты не увидишь ничего.
Во все остальные моменты в буфере экрана будет валяться предыдущий сигнал, от предыдущего получения синхро и до конца выборки.
Если "синхро" нет какое-то время (обычно в течение 1-2 кадров дисплея), проводится наполнение буфера самостоятельно.

И нет овета на вопрос "как в таком случае увидеть то что было ДО срабатывания триггера?"

Цитата
В более навороченных осциллах выборка делается сразу в память постоянно, от начала до конца,

Ну это и есть кольцевой буфер.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
Syberian
сообщение Sep 5 2008, 05:44
Сообщение #14


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999



Цитата(slog @ Sep 5 2008, 08:14) *
И нет овета на вопрос "как в таком случае увидеть то что было ДО срабатывания триггера?"

Ответ был дан ниже по тексту. Или просто отключить триггер и подбирать частоту развертки ручкой, плавненько lol.gif
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Sep 5 2008, 11:24
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Первый пост Syberian мне более менее понятен, хотя он действительно не дает ответа на мой вопрос (тут я солидарен с slog).

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

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

Цитата
По поводу буфера экрана. Для плавности отображения, функции "стоп-кадр" с увеличением и прочих наворотов, используется oversampling - фактически, высота очередного отсчета на экране при обновлении берется через N отсчетов в памяти. При использовании "zoom" число N просто уменьшается.


Вот здесь мне не все ясно. Что означает "...высота очередного отсчета на экране при обновлении берется через N отсчетов в памяти"? Работая с Теками, я заметил, что отображение сигнала на экране происходит с некоторым накоплением (само по себе, это слово должно разъеснить тот бред который я пишу ниже). По крайней мере, создалось такое впечатление. Что я имею ввиду. На экране осцилла постоянно присутствую, скажем, пять отображений сигнала. Четыре - те что отрисовывались ранее, и пятое - то что только что нарисовалось. Причем при отрисовки нового "свежего" сигнала из обновенного буфера, с экрана удаляется самая "старая" версия сигнала. И так далее, по очереди. Если мое предположение верно, то буфер экрана в теках имеет N одинаковых по размеру областей, содержащих историю N версий наблюдаемого сигнала.

Цитата
Забудьте о "сдвигании" всего массива выборок вперед или назад, кольцевых буфернях и проч требухе! В "правильных" DSO заполнение только инкрементом в Static memory. Далее - с нуля, ага

Это почему, и что значит "правильных" (с примерами =))?

На данный момент позиция и предложение slog и Ledmaster мне более понятны, что-ли. Если я правильно понял идею Syberian, то мне видится очень неоптимальное использование памяти скопа. Фактически, в своем предпоследнем посте, Syberian предложил использовать бОльший буфер (на вскидку - он должен быть в 2 раза больше), сымплы из которого отнюдь не все отображаются на экране. Т.е. реально, будет оттображаться только половина всего буфера, а вторая половина служит лишь для того чтобы гарантировано отобразить сигнал до триггера (не потерять его). Такой варинт (или похожий) приходил мне в голову, но был быстро отвергнут всилу неоптимальности и неказистости...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 22:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016