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

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

1 135 189

GM, у меня к вам вопросец немного не по теме. А может быть как раз по теме, если судить по её заголовку.
Меня не интересует практическая реализация генератора, как измерительного прибора. Интересно другое. Интересен сам принцип построения программы. Как работает простой DDS я конечно знаю. В цикле идет приращение акумулятора фазы, значение которого является адресом для выборки из некоего пространства констант, апроксимирующих синус, ну и выдача этих констант на ЦАП. Для повышения качества сигнала резонно делать этот цикл как можно короче с целью повысить частоту выдачи или обеспечивая возможность наращивать разрядность акумулятора фазы. Какая у вас частота выдачи семплов? Как вы ухитряетесь выполнять на МК еще и другие задачи сервисного плана не прерывая генерации? Вставляете дополнительные команды в главный цикл, сознательно мирясь с потерями в качестве (высокочастотности)? Используете ли вы прерывания? Задействованы ли таймеры? Не могли бы хотя бы на словах обрисовать алгоритм работы вашей программы.

Главный, животрепещущий для меня вопрос, как у вас в программе обеспечивается многозадачность?

У меня задача не совсем такая, но перекликается с вашей. Надо управлять шаговым двигателем с высокой точностью, обеспечивая шаг перестройки частоты в доли Гц. Помимо выдачи сигнала управления ШГ, МК должен делать еще кучу всего другого. Стоит дилемма, либо использовать стандартную микруху DDS, либо два МК (один в качестве DDS). Но конечно хотелось бы обойтись одной микросхемой.

 

Привет, Андрей, давненько вас не было на форуме. Ну по порядку.

1) Частота выдачи выложенной прошивки 2222 кГц, есть вариант где частота 2000 кГц. Это всё для 32-разрядного аккумулятора фазы.

2) Прерывания не используются, поскольку вход-выход в прерывание занимает 13 тактов, не считая полезной работы, а у меня цикл выдачи занимает 9 (для 2222 кГц) или 10 тактов (для 2000 кГц). Таймеры не используются, поскольку не нужны.

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

4) Не совсем понимаю, зачем для шагового двигателя ДДС. ШД работают на низких частотах, не думаю, что больше 1 кГц, а это 20000 тактов, можно кооперативную ось внедрить...

5) Опишите по-подробнее вашу задачу, временные характеристики, критичные участки. Возможно, правильнее будет открыть отдельную ветку, чтобы эту не засорять

 

GM: А я мастера никак доделать не могу - работа пожирает всё время.
Аналогично, только ареал обитания не собираюсь менять.

 

GM: Тут ещё пришла идея сменить страну обитания...
На Сколково ?

 

На Подмосковье. г.Подольск, собственно.

 

Спасибо Джорж. Отдельную ветку создавать наверное не стоит. В принципе вы мне ответили
GM: Оставшиеся два такта используются для второй задачи. Естественно, вторая задача должна иметь возможность разбиваться на мелкие фрагменты, ну это уже искусство программирования в чистом виде.
Конечно, хотелось бы получить более развернутый ответ по поводу этого искусства. Но, наверное, это слишком объемная тема для форума.

GM: На Подмосковье. г.Подольск, собственно.
Заходите в гости! У меня там дачка в Кутузово. Шашлычка замутим, пивком побалуемся. Как переберетесь, сообщите.

 

Здравствуйте . В интернете наткнулся на очень интересный проект "Низкочастотный генератор "DDS-1" . Все просто супер но где найти такой индикатор - может можно как нибудь заменить его на стандартный индикатор на контроллере HD44780 (к примеру 16*2) Мужики помогите пожалуйста? Заранее спасибо!!!! Надеюсь гуру
сушествует!!!

 

Tadas: Ну так что, умолкли песни ?
Спасибо, что подняли тему . Нашу песню так просто не задушишь! Проект не скис, времени на него практически не остается. С середины февраля в корпусе, передняя панель готова, выводы с ЦАПов напрямую пробросил к 2-м байонетам, чтобы иметь возможность потестить в комплексе. Осталось "только" проверить модернизированную прошивку от GM и довести свою - должен получиться двухканальный генератор. Как вначале и задумывалось в "DDS-1". Отчитаюсь о результатах по их получению

fylht_fylht@mail.ru: Здравствуйте . В интернете наткнулся на очень интересный проект "Низкочастотный генератор "DDS-1" . Все просто супер но где найти такой индикатор - может можно как нибудь заменить его на стандартный индикатор на контроллере HD44780 (к примеру 16*2) Мужики помогите пожалуйста? Заранее спасибо!!!! Надеюсь гуру
сушествует!!!

Этот проект как раз тут и разрабатывается и я сюда не раз ссылался на той страничке, которую Вы обнаружили. Как-нибудь - не получится, там применен графический индикатор от телефона "Нокия 3100", который был выбран всвязи с его исключительной легкодоставаемостью и стоимостью. Планов (и причин) перевода этого генератора на символьный двустрочный дисплей нет.

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

 

Хотя на сегодняшний день индикаторы от соток недороги и доступны, их применение не вполне опрадано.
1. Пройдет еще год-два и они перестанут быть такими доступными (этот тип).
2. Паять и крепить их достатоточно неудобно, увеличение трудоемкости не всегда оправдывает эту экономию
денег.
3. Индикаторы на основе HD44780 являются промышленным стандартом и еще долго будут оставаться
таковым.

 

+1