Свежие обсуждения
Измерения

DDS-генератор на AVR - нужна помощь

1 129 189

Всем участникам форума огромное спасибо за такую полезную тему. Хотелось бы и мне поделиться своими мыслями. Их, собственно, две:
Мысль 1: На форуме обсуждался вопрос, связанный с частотомером. Насколько я понял, его планируется организовать в хост-МК, задействовав таймер. Но какова максимальная частота, которую он способен измерить? До того как я набрел на эту ветку форума и почитал про DDS и хитрый способ измерить частоту сигнала (указывался DM http://electronix.ru/forum/index.php?showtopic=29796&st=15), у меня были мысли сделать нечто подобное, генератор+частотомер, только проще, на одном МК ATMEGA16 например. Однако, насколько я знаю, высокие частоты (30-50МГц) ATMEGA16 может измерить только при помощи внешних регистров или счетчиков (поправьте, если ошибаюсь). Тем не менее, в сети полно разных частотомеров на PIC-мк, которые используют особенности архитектуры PIC (предделитель таймера, способный работать в асинхронном режиме на частотах, значительно больших чем тактовая). Но хотелось именно прибор, объединяющий функции генератора и частотомера. Посему принял решение делать управляющую часть, которая будет заниматься генерацией и работой с дисплеем/кнопками на ATMEGA16 (или другом ATMEGA), а блок частотомера на PIC16F84A (завалялась парочка). В результате частотомер выполнен как отдельный блок, управляемый по SPI. Характеристики:
- измерение частоты сигнала в течение:
0.1 с (дискретность 10 Гц)
1.0 с (дискретность 1 Гц)
10 с (дискретность 0.1 Гц)
- измерение длительности импульса (минимальная длительность 10 мкс)
положительного ____|**|_____
отрицательного ****|__|*****
- Связь с управляющим МК по SPI.
- 4-х байтовый регистр результата.
Прилагаю исходники под IAR для ATMEGA16, MPLAB для PIC и модель в PROTEUS. Пока что реализована только работа с частотомером. Над генератором думаю, буду делать DDS из этой ветки. Возможно, кому то будет полезен подобный частотомер.

 

Прошу прощения, не освоился с форумом.
Мысль 2: А что если хранить таблицу отсчетов не во FLASH и даже не в SRAM тиньки, а в отдельной микросхеме SRAM? Тогда получим возможность генерировать абсолютно произвольный сигнал, предварительно записав его в эту SRAM, и в то же время упростится код ядра DDS, нужно будет лишь скидывать в порт адрес, то есть исключаются операции чтения из памяти отсчетов, а значит, возрастет частота дискретизации -> улучшится качество сигнала. Вместо подключения R-2R ЦАПа к выходам тини, подключить его к линиям данных SRAM. Схемотехника усложнится незначительно: собственно, память и, возможно, буферный регистр. Критика приветствуется.
А еще очень интересно каким образом реализован алгоритм DDS с перестройкой частоты без прерывания генерации. Дизассемблировал прошивку для тиньки, но не разобрался... Понимаю что "лишние" пару тактов как раз на это и отведены. А также DDS о четырех тактах (вопрос уважаемому GM). Не представляю как это можно сделать.
Что то не могу загрузить файл

 

1) У аврок входы синхронизируются с тактовой частотой, так что больше, чем Fтакт/2=10 МГц ввести не удастся, т.е. для частот от 10 МГц и выше надо ставить внешний делитель. Особых проблем тут нет, ставите один 4-разрядый регистр, и полоса до 160 МГц у вас в кармане.

2) Метод захвата является непревзойдённым по точности. Скажем, за 0.1с методом захвата частота 1000 Гц может быть измерена на тиньке с погрешностью 0.0005 Гц. У вас, я так понимаю, - 10 Гц?

3) Частотомер спокойно можно сделать на мастере, потребуется порядка 5% производительности проца.

4) Таблицу отсчётов можно хранить во внешнем озу, т.о. действительно можно убыстрить выдачу. Скажем, 5 тактов, вместо 8, именно столько тактов требуется на подготовку и выдачу адреса (текущей фазы). Другой вопрос, насколько сложнее будет реализация. Нарисуйте хотя бы блок-схему, покажите, обсудим. Тут, кстати, ещё один шагок в схемотехнике, и вы вплотную подойдете к интегральному аппаратному DDS. Посмотрите на AD9830 для начала.

5) Для загрузки файлов используйте внешний ресурс, на этом форуме файлы не загружаются, что-то поломалось.

 

Если генератор у нас будет выдавать максимальную частоту 1МГц, то какую частоту должен мерять встроенный в него частотомер?..

 

DWD: Если генератор у нас будет выдавать максимальную частоту 1МГц, то какую частоту должен мерять встроенный в него частотомер?..

А тут все будет зависеть от усилителя-формирователя и предделителя. До какой частоты хотелось бы?

 

http://tempfile.ru/file/1642561 - обещаный архив. Да, по сравнению с методом захвата метод прямого измерения частоты явно проигрывает. А частотомер, так как ресурсов требуется сравнительно немного, хотелось бы поболее чем 1 МГц, скажем, мегагерц до 200. На мой взгляд удобно было бы иметь прибор, который обладал возможностями одновременно генератора и частотомера. Измерение частот до гигагерца, разумеется, лишнее, но узнать величину девиации узкополосного ЧМ-передатчика при наладке было бы весьма полезно. Но это задача все таки второстепенная.
Схему DDS с памятью постараюсь в ближайшие пару дней накидать и проверить в протеусе, как будет результат, выложу. Как один из простейших вариантов можно предложить следующее: http://img7.tempfile.ru/10041/21fc2dc490/527587cbfc121c0c0816a414.jpg Так как задача тиньки - генерировать адреса, то она подключается только к адресным линиям. При этом при загрузке данных тини переходит в режим простой выдачи данных - адреса, работая по сути, как сдвиговый регистр. Данные предоставляет ATMEGA сразу в параллельном виде. После установки адреса и данных последние защелкиваются по сигналу WE. Цикл повторяется пока не запишем все данные, после чего память переводится в прозрачный режим считывания и тупо выдает информацию по адресам. Идея с памятью в принципе позволит генерировать сигнал на малых частотах не по 256 точкам, а по большему количеству, нужно лишь задействовать старшие адреса (в предположении что мы снизим частоту дискретизации и тинька будет справляться). Однако есть некие подводные камни - во-первых, скорее всего нужен будет промежуточный буфер между памятью и ЦАПом из-за низкой нагрузочной способности SRAM (нужно проверять по даташитам), а во-вторых, не будет ли "дребезга" на выходе памяти вследствие эффекта гонок внутри. Хотя не такие уж и высокие частоты.

 

Avega: Измерение частот до гигагерца, разумеется, лишнее,
Это точно, разъем N-типа на передней панели НЧ генератора будет выглядеть курьезно . Хотя есть SMA...
Наверное нужно предусмотреть возможность учета коэффициента деления внешнего делителя, тогда каждый пусть выбирает, что ему нужно. А то кому и 100кГц за глаза, а кому и гигагерца мало будет

Вы случайно не это хотите изобрести?

 

Avega: А что если хранить таблицу отсчетов не во FLASH и даже не в SRAM тиньки, а в отдельной микросхеме SRAM?
тогда уж лучше взять что-то типа EPM240T100C5N (4$) - и DDS 80..100MHz у нас в кармане. Который несложной доработкой (вместо чтения - запись в SRAM) превращается в осциллограф. Плюс содержит входной делитель для частотомера. С помощью MC12080DG расширяем диапазон до 1.1ГГц. Вместо убогого дисплейчика от мабилы можно взять дешевый планшет за 70..80$ и прикрутить через USB-RS232/BT/USB-OTG.

 

Гонку вооружений хотите начать? Ну-ну

qwer: Вместо убогого дисплейчика от мабилы
Вы забыли сказать, что этот убогий дисплейчик стоит 4$ , а его размеров вполне хватает, чтобы показать всю нужную информацию пользователю.
Эх, было время, когда дискеты были большими, мониторы маленькими и зелеными, программеры ценили быстрый код, а электронщики - красивые решения, позволяющие выжать из железа больше, чем оно может дать в принципе.
А Вы:
qwer: взять дешевый планшет за 70..80$...
qwer: прикрутить через USB-RS232/BT/USB-OTG....
qwer: С помощью MC12080DG расширяем диапазон до 1.1ГГц....

Это все пустые слова. Покажите Ваш вариант реализации в любом виде, чтобы разговор стал более предметным.

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

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

 

qwer надо туда заслать, пусть там всё развалит.

Senior Software Engineer, London, £50 - 60K DOE +package C# C++ SQL Server, employer: Navigation Ltd

Our client is now seeking a highly technical Senior Software Engineer to be responsible for developing high-quality windows management applications in C# / C++. In addition you will write high quality software to specification, on-time and on-budget, working within an Agile environment.

You will be involved in the full development lifecycle from system analysis to build, test bug fix and support, as well as for supporting Microsoft products such as SMS (Systems Management Server) and SCCM (System Center Configuration Manager).

The successful candidate will possess experience in the following:-
• Developing for Windows using C# and C++
• Experience of the full development life cycle
• SQL Server databases
• Core Windows technologies (such as Active Directory, TCP/IP, Group Policy)
• COTS development within a software house
• Enterprise software development
• Practical experience working as part of an Agile Development team; including unit testing and continuous integration techniques

In addition you will posses knowledge / experience in at least one of the following:-
• WMI
• Win 32/64
• RPC
• MMC
• COM
• Virtualization
• Service applications

It would be highly advantageous to have experience in any of the following:-
• GUI development
• Usability skills under Windows
• Microsoft System Center Configuration Manager / Systems Management Server
• ASP.NET, Web Services, Reporting
• .Net technologies (such as Silverlight, WPF, WCF)
• Team Lead experience
• Linux, Mac or Mobile development
• SaaS Development