|
|
  |
контроллер AVR, АЦП, сигнал с несущей частотой 12 мегагерц, можно ли создать устройство на AVR ввода оцифрованного сигнала в КОМП? |
|
|
|
Apr 6 2007, 10:50
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
... работа над ошибками, так сказать... )) Цитата(Stas633 @ Apr 6 2007, 00:57)  ... Варианты: 1. демодулировать сигнал перед оцифровкой. .... ... неправильно.... сигнал необходимо "детектировать", а не "демодулировать", так как исследуется огибающая, а не несущая. Цитата(Stas633 @ Apr 6 2007, 00:57)  .... - считывание информации из порта в рабочий регистр (IN) - 1 такт; - "пересылка" данных из рабочего регистра в SRAM МК (ST) - 2 такта,
итого 3-такта на "отсчет", т.е. 20/3=6,(6)МГц.
Внимание!!! еще меньше, так как необходимо анализировать число сделанных очсчетов, чтобы закончить цикл измерения. Одной командой это сделать нельзя, так как при выполнении команды ST флаги НЕ МЕНЯЮТСЯ!! .... вариант программы на ASM: ; АЦП и МК работают синхронно ; для "опроса" АЦП используется порт "D" МК ; порт D "настроен" на ввод. ; для записи а ОЗУ используются регистры r26,r27 - X ; r16 - "рабочий" регистр :Adr - адрес "конца" массива данных, увеличенный на 1. Потому что для записи используется команда с преддекрементом .... nop ldi r26,AdrH ; ввод конечного адреса массива в ОЗУ ldi r27,AdrL ; M1: in r16,PinD ; "считывание" остчета - 1 такт st -X,r16 ; запись отсчета в ОЗУ - 2 такта ; определение окончания цикла заполнения ОЗУ mov r16,r26 ; 1 такт or r16,r27 ; 1 такт brne M1 ; 2 такта nop .... таким образом "длина" програмы 7 тактов, то есть ЧД будет равна 20/7=2,857 МГц, то есть при использовании "обычного" AVR возможно оцифровать сигнал с частотой не более 1,428 МГц.
|
|
|
|
|
Apr 6 2007, 10:51
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 7-07-06
Из: Новосибирск
Пользователь №: 18 652

|
Цитата(sKWO @ Apr 6 2007, 01:19)  нужно ли брать частоту АЦП 24 МГц ??? достаточно 340 КГц, ведь так же?!!! Если сигнал с полосой 340 кГц, то достаточно взять частоту дискретизации 680 кГц. Теорема говорит именно о ширине спектра, а не о том, на какой несущей он сидит. Подробно теорию по этому вопросу можно почитать задав поиск типа "Nyquist zone" или "undersampling". Здесь есть два момента: надо обеспечить отсутствие отражений от n*680kHz, то есть подавить все вне полосы 12МГц+-340кГц, и выполнить требование к АЦП, чтобы его аналоговая полоса была шире 12 МГц. Ну и не стоит ожидать, что 8-разрядный 1МГц АЦП даст вам те же 8 разрядов на 12МГц, там будет хуже. Можно пересчитать, если для АЦП указана в параметрах апертурная дрожь (aperture jitter) .
|
|
|
|
|
Apr 6 2007, 12:41
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(NVade @ Apr 6 2007, 11:51)  Если сигнал с полосой 340 кГц, то достаточно взять частоту дискретизации 680 кГц. Теорема говорит именно о ширине спектра, а не о том, на какой несущей он сидит. Распространённая ошибка! Нужно дискретизировать весь сигнал, а не его изменения. Вот если его выделить, тогда 680 КГц, как минимум, хватит. Цитата(NVade @ Apr 6 2007, 11:51)  ...Подробно теорию по этому вопросу можно почитать задав поиск типа "Nyquist zone" или "undersampling". Хорошая мысль, почитайте Цитата(NVade @ Apr 6 2007, 11:51)  ...Ну и не стоит ожидать, что 8-разрядный 1МГц АЦП даст вам те же 8 разрядов на 12МГц, там будет хуже. Можно пересчитать, если для АЦП указана в параметрах апертурная дрожь (aperture jitter) . На 12 МГц одномегагерцовый АЦП вообще ничего не даст.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Apr 6 2007, 12:46
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 7-07-06
Из: Новосибирск
Пользователь №: 18 652

|
2 Nanobyte - а можно еще почитать, что возвращает поиск по digital subsampling, берем первое, что попалось: http://www.gage-applied.com/Applications/a...3/APW-99156.htm - при дискретизации 50MSPS народ наблюдает сигнал на несущей 305 МГц, вначале статьи немного теории, дословно: The theory behind subsampling is quite simple. The Nyquist theorem needs to be met with respect to the bandwidth of the input signal only, not the actual input frequency itself. In this case, a 200 kHz FM signal with a CW (carrier wave) frequency of 150 MHz need only be sampled at 400 kHz (twice the rate of the FM width). This results in the band of interest being aliased down to a frequency band close to DC. Перевести?
Сообщение отредактировал NVade - Apr 6 2007, 13:14
|
|
|
|
|
Apr 7 2007, 02:25
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Stas633 @ Apr 6 2007, 07:50)  вариант программы на ASM: ldi r26,AdrH ; ввод конечного адреса массива в ОЗУ ldi r27,AdrL ; M1: in r16,PinD ; "считывание" остчета - 1 такт st -X,r16 ; запись отсчета в ОЗУ - 2 такта ; определение окончания цикла заполнения ОЗУ mov r16,r26 ; 1 такт or r16,r27 ; 1 такт brne M1 ; 2 такта таким образом "длина" програмы 7 тактов, то есть ЧД будет равна 20/7=2,857 МГц, то есть при использовании "обычного" AVR возможно оцифровать сигнал с частотой не более 1,428 МГц. А как вам такой вариант? Код in r16,pind ; чтение 1-го отcчета st x+,r16 ; запись отсчета в ОЗУ in r16,pind ; чтение 2-го отcчета st x+,r16 ; запись отсчета в ОЗУ . . . . . . . . . . . in r16,pind ; чтение 2048-го отcчета st x+,r16 ; запись отсчета в ОЗУ Потом весь накопленный буфер передать в писюк для отображения. На таком принципе один товарищ соорудил осциллограф-приставку, 6667 квыборок/с. Он использовал АЦП на 28 МГц, который тактировался от МК, считывалось каждое третье преобразование. А я подумываю пойти дальше и сделать 20 Мвыборок/с на 20 МГц атмеге.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Apr 7 2007, 09:11
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Цитата(=GM= @ Apr 7 2007, 03:25)  А как вам такой вариант? Код in r16,pind; чтение 1-го отcчета st x+,r16 ; запись отсчета в ОЗУ in r16,pind; чтение 2-го отcчета st x+,r16 ; запись отсчета в ОЗУ . . . . . . . . . . . in r16,pind; чтение 2048-го отcчета st x+,r16 ; запись отсчета в ОЗУ Потом весь накопленный буфер передать в писюк для отображения. На таком принципе один товарищ соорудил осциллограф-приставку, 6667 квыборок/с. Он использовал АЦП на 28 МГц, который тактировался от МК, считывалось каждое третье преобразование. А я подумываю пойти дальше и сделать 20 Мвыборок/с на 20 МГц атмеге. Абсолютно верно! Проигрываете в объеме программы - выигрываете в скорости ! И тогда действительно частота выборок (дискретизации) 6,(6) МГц. Не хочу спрорить, но мне кажеться, что приведенное Вами решение САМОЕ быстрое. Менее 3-х тактов работы CLOCK генератора на один отсчет не получить. Поэтому "довести" част.выб. до 20MSPS при частоте CLOCK МК в 20МГц мне представляется весьма затруднительным. Я ошибаюсь?
|
|
|
|
|
Apr 7 2007, 20:02
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Stas633 @ Apr 7 2007, 06:11)  Абсолютно верно! Проигрываете в объеме программы - выигрываете в скорости ! И тогда действительно частота выборок (дискретизации) 6,(6) МГц. Проигрыш проигрышу рознь(:-). В атмеге ОЗУ имеется всего 1-2-4-8 Кбайт, куда можно выборки класть. Для каждой выборки необходимо 4 байта кода, т.е. всего 32 Кбайта флеши на 8 Кбайт ОЗУ. Ну и зачем мне 30 Кбайт пустой флеши, если получается всего 2857 квыборок/с? По-моему, лучше 32 Кбайта заполненной флеши, но 6667 квыборок/с. Да и 8 Кбайт тоже не всегда нужны, достаточно 1-2. Цитата(Stas633 @ Apr 7 2007, 06:11)  Не хочу спорить, но мне кажется, что приведенное Вами решение САМОЕ быстрое. Менее 3-х тактов работы CLOCK генератора на один отсчет не получить. Поэтому "довести" част.выб. до 20MSPS при частоте CLOCK МК в 20МГц мне представляется весьма затруднительным. Я ошибаюсь? Да, моё решение самое быстрое в заданной конфигурации - АЦП + МК. Но к проектированию любой системы надо подходить творчески, помнить о приоритетах и о компромиссах. Ну вот, последовательно обдумывая принципы построения осцилла, пришёл к выводу, что вышеприведенный вариант - тупиковый. Недостатки - только 8-битное АЦП, мало памяти, нельзя нарастить систему, построение двухканального прибора с возможностью получения одного канала с 40 Мвыборок/с и т.д. Если рассказать вкратце, то я пришёл к внешнему ОЗУ 32Кх16 с частотой записи 20 МГц, МК здесь выступает как часть конечного автомата, выдаёт адреса в ОЗУ и в конце цикла пересылает накопленные отсчёты в писюк. В результате система содержит АЦП (10-12-14 бит, 20 Мвыборок/с), ОЗУ, МК и пару Д-триггеров. По-моему неплохая плата за 20 Мвыборок/с. Кстати, ваше решение с семью тактами легко укоротить до 5 тактов.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Apr 7 2007, 22:35
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Цитата(=GM= @ Apr 7 2007, 21:02)  ... Проигрыш проигрышу рознь(:-). ... Да я и не имел ввиду, что "проигрыш" в данном случае это плохо. Я лишь "интерпритировал" закон Паскаля для гидравлического пресса (площадь-давление). Но главное, что при рассматриваемой в данной теме, "..заданной конфигурации - АЦП + МК..", "...решение самое быстрое.."! Это факт! Цитата(=GM= @ Apr 7 2007, 21:02)  ... МК здесь выступает как часть конечного автомата, выдаёт адреса в ОЗУ.. и в конце цикла пересылает накопленные отсчёты в писюк. ... Снова  весьма интересная идея. Только как Вы сможете за один такт переслать двух-байтный адрес в порты ввода/вывода? Не понимаю.. Может ОЗУ с автоинкрементом и AVR не причем? В любом случае, использование AVR в качестве "адресного" счетчика, весьма упрощает схему оцифровки. Цитата(=GM= @ Apr 7 2007, 21:02)  ... Кстати, ваше решение с семью тактами легко укоротить до 5 тактов. ... Бесспорно.. Я и не претендовал на "исключительность"... Лишь предложил вариант... Но уже то, что тема, благодаря Вам, стала "наполнятся" принципиальными идеями, считаю очень полезным... В моем варианте 7-тактов это не единственное "узкое место". Так например адрес начала массива выборок только "0", и ни какой другой...
|
|
|
|
|
Apr 7 2007, 23:47
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Stas633 @ Apr 7 2007, 19:35)  Снова  весьма интересная идея. Только как Вы сможете за один такт переслать двух-байтный адрес в порты ввода/вывода? Не понимаю.. Может ОЗУ с автоинкрементом и AVR ни причем? В любом случае, использование AVR в качестве "адресного" счетчика, весьма упрощает схему оцифровки. Никакого ОЗУ с автоинкрементом, идея проста до безобразия. Атмега работает на 20 МГц и выдает адрес (А02-А15) на 16-битное ОЗУ за 4 (!) такта (200 нс, придётся поставить один такт ожидания) на чтение с помощью команды ld r16,z+. Далее, на каждом такте (50 нс) два Д-триггера перебирают адреса А00-А01 (четыре раза по 50 нс) и на каждом такте идёт запись в ОЗУ. При чтении Д-триггеры переключаются стробами чтения, АЦП переводится в третье состояние, начинается процесс передачи накопленного в писюк. Вот такой вариант. Цитата(Stas633 @ Apr 7 2007, 19:35)  В моем варианте 7-тактов это не единственное "узкое место". Так например адрес начала массива выборок только "0", и никакой другой... А чем плохо?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Apr 8 2007, 01:59
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Цитата(=GM= @ Apr 8 2007, 00:47)  Никакого ОЗУ с автоинкрементом, идея проста до безобразия. Атмега работает на 20 МГц и выдает адрес (А02-А15) на 16-битное ОЗУ за 4 (!) такта (200 нс, придётся поставить один такт ожидания) на чтение с помощью команды ld r16,z+. Далее, на каждом такте (50 нс) два Д-триггера перебирают адреса А00-А01 (четыре раза по 50 нс) и на каждом такте идёт запись в ОЗУ. При чтении Д-триггеры переключаются стробами чтения, АЦП переводится в третье состояние, начинается процесс передачи накопленного в писюк. Вот такой вариант.
А чем плохо? Извините, за "тупость"... не "доходит"... Не понятно как с помощью ld r16,z+ можно вывести данные в I/O порт? Я ожидал наличия команды out... Мне представлялся вариант, когда для перебора адресов используется 16-битный counter, а значения его регистров выводятся в I/O порты. Но в этом случае для вывода адреса нужно более 4 тактов (ld r16,x+; out 0;ld r16,x; out 1;rjmp... например так). Если предположить, что для "ускорения" процесса Вы таблицу адресов размещаете во flash, то тогда какой объем flash необходим? Поправте, если я не прав: для перебора 32к/4 адресов необходимо 8к "выборок", при учете что каждая выборка двух байтная, нужно 16к однобайтных команд "ld...", да еще для хранения таблицы адресов нужно 8к. Итого 24к flash для формирования адреса? Но это опять же при условии отсутствия команды "out".... Использование внешних триггеров определяет наличие как минимум одного корпуса МС. А что если увеличить кол-во внешних корпусов до 2-х? Поставить два 8-ми разрядных двоичных счетчика (74хх393) например, и с их "помошью" "перебирать" адреса. Тогда на "плечи" МК ляжет лишь мультиплексирование тактового сигнала (запись в ОЗУ из АЦП и чтение из ОЗУ в МК) и "обработка" полученных данных. Что скажете? Прим. Все это я пишу не с целью "покритиковать", хочется выработать более-менее "оптимальную" концепцию оцифровщика (осцил).
Сообщение отредактировал Stas633 - Apr 8 2007, 01:59
|
|
|
|
|
Apr 8 2007, 09:28
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Еще одна мысль... В связи с тем, что динамический диапазон 8-м разядного АЦП около 40дБ, думаю что не лишним будет в аналоговой части предусмотреть 3 АЦП: - 2-ва восьмиразрядных для работы 2-х лучевого осциллографа; - 1-ин 10...16 разрядный для работы анализатора спектра. Все АЦП работают на одно 16-ти разрядное ( =GM= © ) ОЗУ, а выбором используемого АЦП управляет МК. Внимание! OFFTOPЦитата(SasaVitebsk @ Apr 8 2007, 03:07)  ... Зачем это всё делать на AVR? ... Таким образом применив процессор типа ARM к примеру или ПЛМ стоимость прибора практически не возрастёт. А если это пересчитать на два луча, то тем более. На мой взгляд, вопрос выбора типа МК - это вопрос идеологии и личных предпочтений (наличия навыков работы). Применение ARM для портативного (с дисплеем 128х64 точки) осциллографа решением считаю неоправданным. Вот для анализатора спектра производительности AVR8 может не хватить... хотя... http://rf.atnn.ru/s10/digital_osc.html (кстати, применены многие решения обозначенные в этой теме..) Да и применением ARM (~$17...20) принципиального упрощения не достичь. Все равно вся аналоговая часть с АЦП останется. ПЛМ же способная "вместить" обработку с выводом на экран (CPLD не "потянет", нужно использовать FPGA) стоит еще больше. (Исхожу из того, что Вы не рассматривали использование ПЛМ только в качестве замены МС малой интеграции). Повторяемость же (интерес к повторению) многократно снижается, прибор из разряда "широкодоступных" становится "экспериментальным образцом". Посмотрите это: Форум по осциллографу - ...интерес к простому, с невысокими характеристиками прибору не утихает... Прибор делается, настраивается "всем миром"... и напрочь игнорируются предложения усложнить схему! Отчего так?
Сообщение отредактировал Stas633 - Apr 8 2007, 09:29
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|