Цифровой генератор НЧ сигналов

Обсуждаем цифровые устройства...
Ответить
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

Как я понял, ПЗУ получает на вход адрес и даёт на выход байт (или два байта), которые находятся по этому адресу.
Суть такова:
Имеется кварцевый генератор с делителем частоты с переменным коэффициентом деления, с помощью которого задаётся тактовая частота. Эта поделённая частота поступает на вход счётчика, счётчик перебирает адреса ПЗУ, ПЗУ по каждому такту счётчика выдаёт байт (больше и не надо), ЦАП преобразует этот байт в напряжение, на выходе ЦАП - ФНЧ. ПЗУ предварительно с помощью ПК прошивается цифровой синусоидой, меандром, пилой, треугольником, да чем угодно.
Есть у меня одна ПЗУшка, NM27C512Q (http://pdf1.alldatasheet.com/datasheet- ... C512Q.html), её для этих целей хватает с лихвой.
В ту сторону думаю?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Думаете правильно. Только можно оботись и без ПЗУ, записав все нужные формы сигналов (нужен только 1 период) в память микроконтроллера. А еще посмотрите в сторону синеза сигналов (DSS). Имеются специализированные микросхеы для этого, тут на форуме есть пара веток про них. Но если Вам нужен именно низкочастотный генератор, скажем до 50-60 кгц, то его реально построить на микроконтроллере + фильтр на выходе.
Реклама
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

Про один период понятно, ведь счётчик при достижении максимального значения сбрасывается в ноль, дальше адреса повторяются.
В микроконтроллеры боюсь не смогу, у меня дальше бегущего огонька на 2313 на асме не пошло. Узнать бы, как с помощью LPT шить такую ПЗУшку.
А DDS до сих пор понять не могу вообще никак. Как там получается шаг в сотые доли герца если опорный генератор выдаёт десятки мегагерц?
Кстати, АЦП сойдёт такой: http://ru.wikipedia.org/wiki/Covox?
(70 баксов за горсть резисторов, пусть даже прецизионных. Ох*еть просто)
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

И программа

Код: Выделить всё

flash unsigned char data[]= {ваш сигнал}
...
while(1)
{
for(i= 0; i< 777; i++) PORTA= data[i];
}
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Вот Вам статья про функ-генератор на МК с программой. Там все доходчиво расписано.
http://www.silabs.com/Support%20Documen ... /an123.pdf
МК с ЦАПом внутри можно поставить и более дешевый, например, C8051F410 (около 5-6 USD) Возможны и другие замены, но программу придется адаптировать. Можете посмотреть еще на мою консрукцию.
Реклама
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

Опять же, в программирование микроконтроллеров не могу, а просто повторять не хочется.
Хотелось бы прошить ПЗУшку для экспериментов, не подскажете как? Есть комп с паскалем, который умеет работать с LPT.
Из даташита как-то не понял, попробую ещё.
Реклама
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

Насколько понял с седьмой страницы даташита, нужно подать на Vpp 12,75В, после чего импульсами по 50мкс вдувать слова в выход. А что с адресами во время прошивки?
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Адрес на время прошивки должет "стоять" на адресных входах. Там в ДШ внизу на предыдущей странице есть временные осцоллограммы процесса записи. Вообще, помится в старых номерах журнала Радио были статьи про программирование таких микросхем. Точнее не скажу, не помню. Этой технологии памяти медленно приходит конец, если еще не пришел. Советую пересмотреть свое отношение к микроконтроллерам. В сети полно толковых обучалок - начните, например, с кнопки "Обучалка" вверху на этом сайте.
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Вот еще ссылка на принцип работы генератора, там есть исходник: http://www.telesys-ru.1gb.ru/electronic ... hp?do=p035
Вместо того, чтобы тратить время на разборки с ПЗУ, займитесь лучше микроконтроллерами.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

sulik_JR писал(а):Есть у меня одна ПЗУшка, NM27C512Q, её для этих целей хватает с лихвой.
В ту сторону думаю?
Если сроки не поджимают, имеет смысл прислушаться к советам насчет микроконтроллера. Все равно жизнь заставит, чем быстрее освоите, тем лучше.

Ну а если хочется быстро, то идея с сигналом, записанным в ПЗУ, вполне рабочая. Вот только я бы крайне не советовал связываться с "ультрафиолетовыми" ПЗУ. Причин множество.

Во-первых, это сейчас музейный экспонат, и если спалите единственную микросхему, найти замену будет не так просто.

Во-вторых, число циклов стирания-записи таких кристаллов ограничено, а вы, скорее всего, не знаете историю данного экземпляра, сколько раз его перешивали, если только ваша микросхема не из нераспечатанной коробки. Будет обидно потратить время и силы, чтобы узнать, что микросхема просто больше не прошивается - исчерпала ресурс.

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

В-четвертых, посмотрите самый простой алгоритм ее программирования: http://pdf1.alldatasheet.com/datasheet- ... C512Q.html . На тумблерах и паре вентилей такое не реализовать, нужен полноценный программатор. Другие алгоритмы дают более стабильный результат, но они посложнее. Опять же, все решаемо, но городить ради одного экземпляра...

Список проблем можно продолжать долго. Лучше возьмите какое-нибудь современное ПЗУ с электрическим стиранием/программированием, и почти все эти минусы уйдут. А если еще и замените его на ОЗУ (все равно ведь планируете подключать генератор к ПК), тогда и вовсе сможете практически мгновенно менять форму сигнала.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

Если сроки не поджимают
Хотелось бы как-то освоить это до конца лета, т.к. дальше одиннадцатый класс, где усиленная промывка мозгов плавиковой кислотой (или чем покрепче), информатичке на это дело похуй (впрочем, как и всем, ведь ГОТОВИТЬСЯ ЭГЭ ЭГЭ ЭГЭ НЕ СДАШЬ ДВОРНИКОМ РАБОТАТЬ БУДЕШЬ В АРМИЮ ПОЙДЁШЬ КАЛЕКОЙ ВЕРНЁШЬСЯ!1!!11!адинадин). Грустнота, в общем. Ну это так, высер крик души.

Насчёт микроконтроллера.
Как я понял, МК удобен ещё и тем, что можно задавать точную задержку между перекидываниями 1 и 0, т.е. можно точно задавать частоту. В обучалке дан такой цикл задержки:

loop:
dec R16
brne loop

Но вот как здесь задать нужную задержку в миллисекундах (её долях) при кварце, например, 10МГц? За сколько тактов будет проходить цикл?
Пока смотрим в сторону 2313.
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

sulik_JR писал(а):В обучалке дан такой цикл задержки:
...
Но вот как здесь задать нужную задержку в миллисекундах (её долях) при кварце, например, 10МГц? За сколько тактов будет проходить цикл?
Для формирования временных интервалов в большинстве МК есть таймеры. Количество таймеров и возможности зависят от модели. Обычно их использование удобнее, чем программные задержки.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Согласен с Goldsmith насчет таймеров.
Но, отвечая на Ваш вопрос, узнаем из ДШ сколько циклов занимает каждая инструкция: dec - 1 цикл и brne - 2 цикла если управление передается на метку и 1 цикл если нет. Короче, выполнение каждой итерации программного цикла кроме последней требует 3 цикла ЦПУ, а последней - 2 цикла. При тактировании ЦПУ частотой 10 мгц (период 0.1 мксек), выполнение одной итерации цикла займет 0.3 мксек, а последней 0.2 мксек. Умножаем это значение на начальное содержимое регистра R16 (до входа в цикл) за вычетом 1 и получаем формулу (R16-1)*0.3+0.2 мксек. Строго говоря, значение (R16-1) надо брать по (mod 256). Иными словами, формула как написано справедлива только для ненулевых значений R16. При R16=0 до входа в цикл, вместо -1 по формуле следует подставить 255. (-1 mod 256 = 255). В этом случае задержка будет максимаьной и равной 255*0.3 + 0.2 = 76.7 мксек.
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

Вдогонку по поводу программных задержек. Грабли, на которые можно наступить:

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

2. Для относительно больших программных задержек нельзя будет использовать watchdog. А без watchdog'а надежность конструкции пострадает - даже если в программе не будет ошибок, может быть зависание из-за помехи по питанию.

Использование таймера снимет эти проблемы.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

Как я понял:
Крутится бесконечный цикл. Таймер тикает и сравнивается с каким-то числом, которое определяет период, следовательно частоту. Как только они поравнялись, запускается обработчик прерывания компаратора этого таймера, в котором происходит сброс таймера, затем переход к следующему элементу массива (если форма сигнала задана массивом), после вывод этого элемента в порт. После выхода из обработчика прерывания продолжает выполняться бесконечный цикл. После достижения крайнего элемента массива происходит переход к первому. По прерываниям INT0 и INT1 (кнопки, например) значение числа, с которым сравнивается таймер, инкрементируется/декрементируется, делается задержка (на случай, если кнопка зажата, а не нажата единожды), после выхода из обработчика возвращаемся в бесконечный цикл.
В обучалке сказано про регистровые пары. Мне придётся их применить, чтоб обеспечить как можно больший непрерывный диапазон, так?
Вроде понимаю же. Только вот намучаюсь с ассемблером, программатором, ну да ладно. Раньше вообще не знал, как память работает.
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Ну вот, уже прогресс! Только таймер по достижении своего верхнего установленного предела кнопками сам сбросится. Про регистровые пары не понял, надо уточнить о каком МК и какой обучалке идет речь. В общем, Вы правы - чтобы это понять гением быть необязательно. А не нравится ассемблер - пишите на С. Если Вы С не знаете, такую программу на асме написать в конечном итоге может и проще будет.
Потрогал лапой паяльник
Сообщения: 373
Зарегистрирован: Вт ноя 01, 2011 05:52:40

Сообщение sulik_JR »

МК - AT90S2313, обучалка здешняя:
http://radiokot.ru/start/mcu_fpga/avr/11/
Спасибо всем за помощь в понимании. Позже приобрету МК, детали для программатора, сделаю макетку с гнёздами как на ардуине, отдельным блоком спаяю этот Covox, ещё какие-нибуть блочки, буду экспериментировать. А то пора уже. А там глядишь и до Р45-подобного (http://www.p-45.narod.ru) не настолько уж и далеко будет.
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Вы хотите изобрести DDS-синтезатор. Работает он просто! Даже слишком просто... только не на счетчиках, а на сумматоре.

Имеется 32-битный сумматор, один вход подключен к его выходу, второй вход - число задающее частоту. Этот сумматор тактируется стабильной частотой - например 10Мгц, при входном числе равном "1" схема превращается в обычный счетчик, при этом частота переполнения сумматора будет минимальной. а теперь представьте как этот сумматор будет работать если на его вход подать 2, 3, 1000, 1000000 ?

С выхода сумматора берется старшие 8-16-24 бита и подаются на ПЗУ.
При большой скорости счета за один такт может быть пройдено 2-3 адреса, что начнет сказываться на искажениях выходного сигнала.
И чем больше емкость ПЗУ тем позже начнутся искажения.

а при максимальной скорости (на входе число равное 2^32) будут выбираться только два адреса на период, но в общем случае всегда разные.

Нетрудно догадаться, что сумматор будет переполнятся максимум со скоростью 5Мгц при тактовой частоте 10Мгц. В реальности максимальные значения не используют.

Если на выходе сумматора использовать еще один сумматор - можно указывать начальную фазу, это актуально для многоканальных генераторов.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Alexeyslav писал(а):И чем больше емкость ПЗУ тем позже начнутся искажения.
Разрядность адреса ПЗУ напрямую связана с разрядностью ЦАП. Для синусоидального сигнала количество отсчетов в ПЗУ должно быть в 2*pi раз больше количества квантов ЦАП. Т.е. разрядность адреса должна быть на 2 - 3 разряда больше, чем разрядность ЦАП.
Контактная информация:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Из чего это следует?
Это скорей максимальная разрядность, выше которой смысла не имеет поднимать. и причем здесь 2*pi?
Контактная информация:
Ответить

Вернуться в «Цифровая техника»