Avr генератора что это: Введение во встраиваемую электронику, часть 3 | avr

Введение во встраиваемую электронику, часть 3 | avr

Продолжение переводов руководства для начинающих от SparkFun [1]. Эта часть посвящена тактированию микроконтроллера, его работе от кварцевого (или керамического) резонатора. Вы также познакомитесь с фьюзами микроконтроллера.

Предыдующая часть: Введение во встраиваемую электронику, часть 2 (как программировать микроконтроллер).

На прошлом уроке Вы запустили свой первый проект — мигание светодиодом. Это был пожалуй самый трудный и ответственный шаг. Теперь мы сделаем так, что светодиод будет мигать намного чаще!

Вы загрузили код в микроконтроллер ATmega168 (или ATmega328P) и запустили его в работу, но почему он работает? И от чего зависит его скорость работы? Любой микроконтроллер всегда работает, получая такты от специального тактового генератора (oscillator). Этот генератор можно для наглядности представить себе как ‘музыкальный ритм’, который микроконтроллер использует для выполнения своего кода — с каждым ударом ритма выполняется одна команда.

Без наличия тактовой частоты микроконтроллер не знает о том, когда нужно выполнить очередную команду, и когда тактовая частота некачественная или нестабильная, выполнение идет с непредсказуемой скоростью. У Вас должны быть такты определенного вида, и часто (это нужно для многих задач) эти такты должны быть очень точные и стабильные. Пробовали когда-нибудь танцевать под CD, который заедает, и пропускает куски мелодии? Это весьма сложно и неприятно!

Есть несколько способов подавать тактовую частоту (такты) на микроконтроллер. Микроконтроллер ATmega168 имеет для этого много настроек (все микроконтроллеры AVR имеют очень похожие настройки, которые могут весьма незначительно отличаться у разных типов AVR). Здесь приведен краткий обзор разных типов генераторов для получения тактовой частоты:

1. External RC (внешний генератор, частота которого определяется параметрами цепочки RC). Этот вариант генератора используется для чрезвычайно дешевых приложений. Подбором номинала резистора и конденсатора выбирается скорость циклов перезарядки конденсатора (постоянная времени RC-цепочки), от чего зависит полученная частота генератора. Я никогда не использовал такой способ генерации тактовой частоты.

2. Internal RC (внутренний RC-генератор, встроенный в микроконтроллер). Это очень удобный тип генератора тактов. Он имеется на большинстве современных микроконтроллеров AVR. Вы можете просто настроить (фьюзами) ATmega168 генерировать собственную тактовую частоту! Генератор и соответствующая RC-цепочка расположены на кристалле AVR. К сожалению такой генератор не очень точный.

3. External Oscillator (внешний кварцевый резонатор, от которого работает встроенный в микроконтроллер генератор). Это стандартный тип получения тактовой частоты, используемый чаще всего. Подключите кварцевый резонатор (его для краткости называют ‘кварц’) к 2 выводам генератора, и код будет выполняться с частотой кварцевого резонатора.

4. External Resonator (внешний керамический резонатор). То же самое, что и вариант с кварцевым резонатором, только здесь применяется более дешевый тип резонатора, у которого хуже допуск по частоте.

5. External Clock (подача внешней тактовой частоты). В этом варианте подается тактовая частота от внешнего генератора (например, собранного на логических элементах, или частота, сгенерированная другим микроконтроллером). Этот вариант полезен, когда нужно запустить несколько микроконтроллеров на одинаковой тактовой частоте. Я никогда не использовал этот вариант.

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

Примечание переводчика: на самом деле есть еще и 6 способ, синтез тактовой частоты с помощью ФАПЧ (PLL). Однако он имеет в основном профессиональное применение, и не во всех микроконтроллерах AVR имеется такая возможность.

Internal RC (внутренний калибруемый RC-генератор). Этот генератор, который сделала компания Atmel, по-настоящему хорош. По умолчанию с завода ATmega168 поставляется настроенной на частоту внутреннего генератора 1 МГц. Микроконтроллер ATmega168 (как и все AVR) может работать, выполняя 1 инструкцию на 1 машинный цикл, т. е. на 1 период тактовой частоты (прим. переводчика: есть инструкции ассемблера, которые выполняются за 2 цикла, но их не так много). Это означает, что каждый раз, когда генератор произвел очередной цикл (период) таковой частоты, выполняется одна команда программы микроконтроллера (в некотором приближении, так как некоторые инструкции занимают больше 1 цикла). Если мы использовали ATmega168 из магазина и не меняли фьюзы, то наш код мигания светодиодом будет работать на тактовой частоте 1 МГц, или 1 MIPS (million instructions per second, миллион инструкций в секунду). Только представьте себе — 1 миллион операций в секунду! Это просто поразительно. Так в чем состоит недостаток внутреннего генератора? Его допуск на частоту +/-5%, и максимальная скорость 8MHz.

Допуск +/-5% означает, то Ваш ATmega168 может работать на скоростях от 1,000,000 * 1.05 = 1,050,000 IPS до 1,000,000 * 0.95 = 950,000 IPS, причем заранее точно значение частоты знать нельзя. Возможно, что такая неточность Вам не покажется значительной, но в цифровом мире она огромна! Кроме того, ATmega168 может работать с максимальной скоростью 20 МГц от внешнего кварца, в то время как максимальная скорость внутреннего генератора составляет 8 МГц. Так что если Вам действительно нужно разогнать микроконтроллер с максимальной скоростью (и/или с максимальной точностью), то придется подключить внешний кварцевый резонатор.

External Oscillator (внешний кварцевый резонатор, или просто кварц). Это наиболее часто используемый тип генератора. На фотографии показан стандартный кварцевый резонатор в усеченном корпусе HC49/US.

Кварцы поставляются в различных корпусах, и бывают на разные частоты. Чаще всего встречаются частоты 20, 16, 15, 12, 10, 4 МГц. Также бывают частоты наподобие 14.7456 МГц, 9.216 МГц и 32.768 кГц — такие частоты используются потому, что они привязаны к стандартным скоростям обмена данными или предназначены для точного отсчета определенных интервалов времени. Например, если нужно достичь очень точно установленной скорости последовательного обмена данными 9600 bps, частота 9.216 МГц делится на 960, в результате получится 9600. Если использовать частоту 16 МГц, то не найдется целого делителя, чтобы получить 9600. Так что последовательный обмен данными будет очень точен при использовании частоты кварца 9.216 МГц, а при кварце 16 МГц всегда будет некоторая (хотя и незначительная) ошибка.

Внутри металлического корпуса прячется маленький кусочек кристалла кварца, размер которого и срез подобраны так, что он вибрирует на определенной частоте. Внутренний RC-генератор ATmega имеет точность +/-5%. В то же время кварц обычно имеет точность ‘+/-20ppm’. Аббревиатура ppm означает ‘parts per million’, т. е. точность +/-20 периодов на миллион! Таком образом, частота резонатора может быть в диапазоне от 15999680 до 16000320 Гц.

Это эквивалентно точности +/-0.002%, так что кварц точнее внутреннего RC-генератора в 2500 раз.

Примечание: прошу прощение за то, что забиваю Вам голову скучными техническими подробностями, но это довольно важно. Понятия генератор (oscillator) и кварц (crystal) часто заменяют одно другим, что вносит путаницу. Показанный на фотографии резонатор не является собственно генератором, это просто кварцевый резонатор (кварц). Кварцы дешевы. Однако генераторы намного дороже (стоят примерно 2..4 доллара). В чем разница? Генератор требует подачи внешнего питания и сам вырабатывает импульсы выходной частоты. Эти импульсы могут использоваться для тактирования любых видов периферийных устройств и микроконтроллеров. Кварц полностью пассивный элемент, для работы которого требуется внешний драйвер (усилитель), только при их совместном использовании получается генератор. К счастью 99% микроконтроллеров имеют встроенные узлы драйвера для получения генератора, так что достаточно просто подключить снаружи дешевый кристалл к 2 внешним выводам микроконтроллера.

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

Некоторые недостатки кварцев:

1. Кварцы немного дороже керамических резонаторов: $0.25 в сравнении с $0.10 для керамического резонатора.
2. Трудно сделать по-настоящему малогабаритный кварц (это сложнее, чем для керамического резонатора), так что для размещения кварца потребуется больше площади на печатной плате. Миниатюрные кварцы довольно дороги, и не очень широко распространены.
3. Кварцы требуют внешних нагрузочных конденсаторов, которые помогают запуску генерации. Без этих конденсаторов кварц может не заработать (хотя обычно работает нормально). Нагрузочные конденсаторы недороги, однако для них также нужна дополнительная площадь на печатной плате.

External Resonator (внешний керамический резонатор). По точности и цене керамические резонаторы занимают промежуточное положение между внутренним RC-генератором и кварцем.

Резонатор сделан из кусочка пьезокерамики, так что он может колебаться на определенной резонансной частоте. К сожалению, эта технология не позволяет достичь высокой точности, поэтому стандартный допуск по частоте для керамических резонаторов составляет +/-0.5%. Так что резонаторы в 10 раз точнее внутреннего RC-генератора, но по точности сильно проигрывают кварцам.

Резонаторы имеют тенденцию быть дешевле, чем кварцы, также их частота обычно ниже, и размеры меньше. Резонаторы удобнее использовать, потому что не нужны нагрузочные конденсаторы — они уже встроены в резонатор (по этой причине у резонатора 3 вывода). Резонаторы можно изготовить очень маленькими по размеру, и они будут занимать на печатной плате совсем мало места.

Сделайте для себя выбор. Для большинства приложений внутренний генератор будет отлично работать! Но если Вы попробуете осуществить обмен данными по последовательному каналу связи, то точность 5% обычно недостаточна (нужна точность 1-2%). Я обычно для своих проектов использую кварцы, но для по-настоящему маленьких устройств использую керамические резонаторы. Приложения для цифровой радиосвязи требуют обычно кварцев из-за жестких требований к точности частоты. Частота любого генератора будет изменяться во времени (из-за эффекта старения), и на неё будет влиять изменение температуры.

Как упоминалось ранее, ATmega168 поставляется сконфигурированной на работу от внутреннего RC-генератора на частоте 1 МГц. Но мы сможем ускорить выполнение программы. Попробуем настроить ATmega168 для работы на частоте 16 МГц от внешнего кварца.

Какие еще дополнительные изменения в работе произойдут, когда ATmega168 будет работать на повышенной тактовой частоте? Нельзя будет работать на маленьких напряжениях питания (таких как 3.3V или 2.8V). Поскольку у нас напряжение питания 5V, то это неважно. Работающий на повышенных частотах 16..20 МГц микроконтроллер будет потреблять больше тока, чем при работе на 1 МГц. Это следует учитывать при разработке Вашей системы.

Подключите кварц на 16 МГц к выводам 9 и 10 микроконтроллера, как это показано на схеме. Также подключите к ним 2 конденсатора на 22 пФ, вторые выводы конденсаторов подключите на шину GND.

Теперь нужно настроить ATmega168 на использование выводов 9 и 10 как выводов генератора, работающего от внешнего кварца. Это делается с помощью перепрограммирования фьюзов.

Прим. переводчика: если Вы загружаете код с помощью загрузчика (USB bootloader типа USBasp или UART bootloader Arduino), то в Вашей системе фьюзы уже настроены на использование внешнего кварца. Кроме того, загрузчик не позволяет менять значения фьюзов, это нужно делать с помощью внешнего ISP-программатора.

[Настроечные биты фьюзов (Fuse Bits)]

Это одна из самых трудных вещей, которые используются в AVR. Фьюзы позволяют производить самое низкоуровневое конфигурирование системы микроконтроллера. Путем установки или сброса этих бит можно полностью поменять работу и функционирование AVR. Я был много лет фанатом PIC, и конфигурационные биты PIC были очень просты. Вы просто кликали в удобное окошко Windows-программы, или могли менять биты конфигурации прямо в коде языка C. Никакой суеты, никаких проблем. Микроконтроллеры AVR в этом плане сильно отличаются, и Вы даже можете буквально повредить свой AVR, если запрограммируете биты защиты кое-как.

Два байта для настроек, которые есть в ATmega168, как раз и составляют эти ‘fuse bits’. Если Вы этого еще не сделали, загрузите полный даташит на ATmega168 (сейчас он размером в целых 448 страниц!), и сохраните его на Рабочий Стол компьютера. Если Вы никогда до этого не читали даташит, не беспокойтесь! Вовсе не нужно изучать все эти 448 страниц, нужно только рассмотреть в нем нужную Вам необходимую часть.

Перейдите в раздел даташита «8. System Clock and Clock Options» (удобно пользоваться для этого оглавлением и закладками, которые по умолчанию появляются с левой стороны открытого PDF-документа). В подразделе «8.2 Clock Sources» Вы увидите, что есть много вариантов настройки тактовой частоты для ATmega168. Давайте сначала переключим работу внутреннего RC-генератора с частоты 1 МГц на частоту 8 МГц.

Таблица 8-1. Опции для настройки тактирования микроконтроллера.

Режим тактирования Фьюзы CKSEL3 .. CKSEL0
Маломощный генератор с внешним кварцем. 1111 .. 1000
Обычный режим генератора с внешним кварцем. 0111 … 0110
Низкочастотный генератор с внешним кварцем. 0101 … 0100
Внутренний RC-генератор на 128 кГц. 0011
Внутренний калиброванный RC-генератор. 0010
Внешний источник тактов. 0000
Зарезервировано. 0001

В самом начале секции 8.6 написано: «По умолчанию Internal RC Oscillator (внутренний RC-генератор) предоставляет частоту примерно 8.0 МГц. Поскольку эта частота зависит от напряжения питания и температуры, она может быть при необходимости очень точно откалибрована пользователем. Микроконтроллер поставляется с запрограммированным фьюзом CKDIV8. Дополнительную информацию см. в разделе System Clock Prescaler».

Запрограммированный бит CKDIV8 приводит к тому, что частота внутреннего генератора 8 МГц проходит через делитель частоты на 8, и в результате получается частота 1 МГц, на которой и работает микроконтроллер. Чтобы микроконтроллер работал на частоте 8 МГц, нужно отключить делитель на 8, для чего нам нужно поменять значение фьюза CKDIV8. Фьюз CKDIV8 находится в младшем байте фьюзов, см. таблицу ниже.

Таблица 27-9. Fuse Low Byte (младший байт фьюзов).

Low Fuse Byte № бита Описание Значение по умолчанию
CKDIV8 7 0 включает деление тактов на 8. 0 (запрограммировано)
CKOUT 6 0 включает вывод тактовой частоты на ножку порта PORTB0. 1 (не запрограммировано)
SUT1 5 Выбор времени запуска генератора. 1 (не запрограммировано)
SUT0 4 Выбор времени запуска генератора. 0 (запрограммировано)
CKSEL3 3 Выбор варианта работы тактового генератора. 0 (запрограммировано)
CKSEL2 2 Выбор варианта работы тактового генератора. 0 (запрограммировано)
CKSEL1 1 Выбор варианта работы тактового генератора. 1 (не запрограммировано)
CKSEL0 0 Выбор варианта работы тактового генератора. 0 (запрограммировано)

Значение байта фьюзов по умолчанию 0b.01100010. Новое значение байта фьюзов, в котором поменян бит CKDIV8, равно 0b.11100010.

Прим. переводчика: бит CKDIV8 находится в самом старшем бите 7 младшего байта фьюзов. Обратите внимание, что «запрограммированное» значение бита соответствует не лог. 1, а лог. 0. «Незапрограммированное» значение соответствует лог. 1. Почему так? Это вносит дополнительную путаницу в интерпретацию значения бит фьюзов. Все пошло от технологии EEPROM и FLASH — очищенная память имела всегда ячейки, заполненные единицами, и «программирование» битов ячейки соответствовало записи туда нулей. Чтобы уменьшить путаницу при вычислении бит фьюзов, старайтесь использовать шестнадцатеричные значения для байт фьюзов, и пользуйтесь для этого специальным онлайн ресурсом — калькулятором бит фьюзов [2].

С новым значением бита CKDIV8 микроконтроллер ATmega168 должен заработать от внутреннего RC-генератора на частоте 8 МГц, и мы увидим, что светодиод LED начнет мигать в 8 раз быстрее! Есть пара способов изменить фьюзы, но самый «прямой» метод сделать это через командную строку утилиты avrdude. Изменение фьюзов будет показано на примере использования программаторов от Olimex типа AVR-PG1 (подключается через последовательный порт RS-232) или AVR-PG2 (подключается через параллельный порт LPT).

# Чтобы прочитать фьюзы ATmega168 с помощью программатора AVR-PG1:
avrdude -p m168 -P COM1 -c ponyser -U lfuse:r:-:h -U hfuse:r:-:h
# Чтобы прочитать фьюзы ATmega168 с помощью программатора AVR-PG2: avrdude -p m168 -P lpt1 -c stk200 -U lfuse:r:-:h -U hfuse:r:-:h

После выполнения команды чтения фьюзов утилита avrdude сообщит их значение в шестнадцатеричном виде: High fuse = 0xDF (значение старшего байта фьюзов), Low fuse = 0x62 (значение младшего байта фьюзов).

Новое значение для младшего байта фьюзов должно быть E2 (шестнадцатеричное значение). Как я сформировал новое значение для байта фьюзов? Таблица 27-9. Fuse Low Byte из даташита показывает значение по умолчанию байта фьюзов, равное 0x62, что в двоичном виде составит 0b01100010. Чтобы изменить значение фьюза CKDIV8 на противоположное состояние («незапрограммированное» состояние лог. 1), младший байт фьюзов должен изменить свой старший бит, и стать 0xE2, что в двоичном виде равно 0b11100010. Итак, чтобы переключить ATmega168 на работу от внутреннего RC-генератора на частоте 8 МГц, нужно выполнить следующую команду avrdude (конечно же, питание должен быть подключен программатор и подано питание на схему микроконтроллера):

# Запись младшего байта фьюзов ATmega168 с помощью программатора AVR-PG1:
avrdude -p m168 -P COM1 -c ponyser -U lfuse:w:0xE2:m
# Запись младшего байта фьюзов ATmega168 с помощью программатора AVR-PG2: avrdude -p m168 -P lpt1 -c stk200 -U lfuse:w:0xE2:m

После перепрограммирования бита фьюзов CKDIV8 светодиод будет мигать в 8 раз быстрее. Давайте продолжим изучение настроек младшего байта фьюзов, и переключим микроконтроллер на использование внешнего кварца на 16 МГц, после чего светодиод будет мигать еще в 2 раза быстрее.

Примечание: на

Как определить тактовую частоту микроконтроллера? | avr

Тактовая частота, на которой работает микроконтроллер AVR, определяет скорость его работы. Для некоторых realtime приложений (например для библиотеки V-USB) тактовая частота критически важный параметр, от которого зависит — будет программа работоспособна или нет. Поэтому важно уметь определять тактовую частоту, на которой работает микроконтроллер.

[На что влияет тактовая частота микроконтроллера?]

Ответ на этот вопрос прост — на скорость работы. Длительность каждого такта микроконтроллера AVR обычно соответствует времени выполнения одной инструкции на языке ассемблера (хотя есть инструкции ассемблера, время выполнения которых составляет 2, 3, и даже 4 такта). То есть чем выше тактовая частота, тем быстрее микроконтроллер работает, тем точнее его реакция на внешние события. Для приложений реального времени (например для программной работы с протоколом USB через библиотеку V-USB) бывает нужно очень точно знать длительность выполнения каждой инструкции программы.

Кроме того, в ядро AVR встроено множество периферийных аппаратных устройств — АЦП, UART, SPI, I2C и многое другое. Работа всех этих узлов зависит от тактовой частоты. Например, Вы не сможете точно задать скорость работы UART (RS-232), если не знаете его тактовую частоту.

Для вычисления задержек в программе часто используют удобные макросы-функции delay_us и delay_ms. Корректность их работы напрямую зависит от того, насколько рабочая частота микроконтроллера AVR соответствует программной константе F_CPU.

Таким образом, важно знать, как формируется тактовая частота, и уметь определять её действительное значение. Давайте разберем самые популярные варианты тактирования микроконтроллера AVR, чтобы научиться определять рабочую тактовую частоту.

[Кварцевый резонатор]

Очень часто (и это относится к макетным платам AVR-USB-MEGA16, AVR-USB162, AVR-USB162MU, metaboard, userial [1]) рабочая тактовая частота AVR точно равна частоте кварцевого резонатора (или просто кварца), который подключен к микроконтроллеру. В этом случае фьюзами (или программно) выключен встроенный предделитель тактовой частоты (prescaler). Ниже представлены примеры внешнего вида кварцевых резонаторов с маркировкой, где цифрами указана рабочая частота кварцевого резонатора.

   

На фотографии слева показан фрагмент старого варианта макетной платы AVR-USB-MEGA16 с кварцевым резонатором на 16 МГц. Многие примеры программ и готовые прошивки скомпилированы именно для этой частоты кварца. Справа показан новый вариант AVR-USB-MEGA16 с кварцем на 12 МГц.

Приложения, работающие с USB на макетной плате AVR-USB-MEGA16, обязательно должны учитывать тактовую частоту микроконтроллера, т. е. должны быть скомпилированы точно на ту частоту кварца, который установлен на макетной плате, иначе программа работать не будет. Причина проста — интерфейс USB имеет строгие параметры по времени, т. е. параметры сигналов D+, D- по длительности логических уровней 0 и 1 должны быть очень точно выдержаны. Эти параметры для макетных плат AVR-USB-MEGA16 контролируются библиотекой V-USB, когда программно на низком уровне обрабатывается протокол USB. Точность выдерживается за счет виртуозно написанного кода на языке ассемблера, где длительности сигналов подобраны нужным количеством команд NOP. Поэтому работа программы жестко привязана к частоте кварцевого резонатора, и прошивка микроконтроллера должна быть скомпилирована точно на рабочую тактовую частоту. Для библиотеки V-USB эти частоты могут быть 12, 15, 16, 16.5, 20 МГц (чаще всего используются частоты 12 и 16 МГц).

В программе тактовая частота задается специальными константами (например F_CPU), которые потом проверяются препроцессором компилятора — чтобы правильно подключить нужный модуль кода. Константа F_CPU часто задается в makefile, и передается компилятору через опции командной строки. Константа может быть также задана в заголовочном файле программы на языке C (так называемом хедере, файле с расширением *.h).

Будьте внимательны, когда выбираете в программе тактовую частоту для микроконтроллера — если Вы случайно запрограммируете микроконтроллер, который работает на частоте 12 МГц, не той прошивкой (например, которая рассчитана на работу с частотой 16 МГц), то получите неработоспособное устройство USB, которое не будет определяться операционной системой. Очень много вопросов пользователей (почему мое устройство USB не работает?..) связано с некорректной тактовой частотой прошивки.

На этом фото показана макетная плата metaboard с микроконтроллером ATmega328-PU и кварцевым резонатором на 16 МГц. Здесь тоже для приложений USB используется программная обработка протокола на основе библиотеки V-USB. Поэтому все, что было сказано по поводу частоты кварца для макетной платы AVR-USB-MEGA16, в равной степени относится и к metaboard.

На этой фотографии показан фрагмент макетной платы AVR-USB162 с установленным кварцем на 16 МГц. Здесь используется микроконтроллер AT90USB162 с аппаратным интерфейсом USB, поэтому он намного быстрее справляется с задачей обработки протокола USB, чем обычный микроконтроллер AVR. Здесь тоже важна тактовая частота, на которой работает микроконтроллер — для приложений USB можно использовать кварцы на частоты 8 или 16 МГц, но программа очень строго должна это учитывать.

[Работа микроконтроллера от внутреннего тактового генератора]

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

Вариант работы генератора (RC-генератор, внешний кварц, коэффициент деления частоты) определяется фьюзами микроконтроллера AVR. Фьюзы микроконтроллера AVR могут быть изменены только с помощью внешнего программатора (интерфейсы ISP, JTAG, или может быть применен так называемый «параллельный» интерфейс программирования). Большинство микроконтроллеров AVR, которые выходят с заводов Atmel, поставляются настроенными на работу от внутреннего генератора, с включенным делителем на 8, т. е. при подаче питания они сразу заработают на частоте 1 МГц. В некоторых пределах тактовую частоту можно подстраивать программно с помощью записи значений констант в специальный настроечный регистр. Подробнее про фьюзы и настройку тактирования микроконтроллера AVR Вы можете узнать из даташита на Ваш микроконтроллер.

[Использование PLL]

Некоторые микроконтроллеры позволяют для получения тактовой частоты использовать PLL. Эта аббревиатура расшифровывается как Phase Locked Loop, что означает фазовая автоподстройка частоты, ФАПЧ. Смысл этого всего в том, что микроконтроллер работает от внутренней тактовой частоты, которая генерируется путем умножения и деления частоты внутреннего RC-генератора, причем частота RC-генератора подстраивается программно. Хороший пример использования такого генератора — приложения V-USB с микроконтроллером ATtiny45 (или ATtiny85), например USBrelay [2]. Микроконтроллер работает на частоте 16.5 МГц, которая получена с помощью RC-генератора и PLL. Частота точно подстраивается программно по синхросигналам начала фрейма USB (так называемый сигнал SOF, Start Of Frame), которые имеют очень точную периодичность 1 мс. Подробнее про PLL см. даташит микроконтроллера и исходный код USB-Relay [2].

[Определение тактовой частоты с помощью осциллографа]

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

Если используется внешний резонатор (кварцевый или керамический), то тактовую частоту можно определить, подключившись к выходной ножке тактового генератора — коснувшись щупом одного из ножек резонатора. Будьте внимательны, подключиться надо именно к выходу генератора, и щуп осциллографа должен иметь малую входную емкость (чем меньше, тем лучше, желательно не более 20 пФ). Обычно малая входная емкость щупа получается, когда щуп осциллографа переключен на коэффициент деления 1:10). Чтобы точно узнать, какая ножка микроконтроллера является выходом, обратитесь к даташиту микроконтроллера. Осциллограф покажет тактовую частоту на выходе генератора, и рабочая тактовая частота микроконтроллера будет равна этой частоте с учетом коэффициента предделителя (если он включен фьюзами или программно).

Когда используется внутренний RC-генератор, и когда Вы не уверены в том, насколько правильно запрограммировали фьюзы предделителя, может помочь измерение длительности выполнения команд программы. Для этого случае Вы можете вставить в главный цикл main программы две простые команды уст

Экспериментальный DDS-генератор на AVR и PLL | avr

В 103 номере журнала клуба Benelux QRP (сентябрь 2002) была статья Ton PA0KLT [2] о системе настройки QRP. В системе работает DDS-гетеродин на микроконтроллере! Достоинство этого решения — не нужно покупать дорогой чип DDS, не нужно паять его тонкие выводы корпуса SMD. Всю работу по синтезу частоты гетеродина выполняет маленький микроконтроллер. Он даже опрашивает поворотный энкодер, используемый для настройки частоты! Однако, как и с обычной системой DDS, требуется еще одно устройство для чтения и отображения частоты (здесь и далее перевод статьи [1]).

В разработке PA2OHH применена оригинальная система индикации частоты на одноразрядном 7-сегментном индикаторе. В одном микроконтроллере объединены функции DDS, отображения частоты и сканирования кнопок для настройки частоты.

Подавление помех в выходном сигнале DDS. Для частотного синтеза использовался 7-разрядный DAC на резисторах на тактовой частоте 923 кГц. Такая система синтеза на выходе имеет сигналы помех. Однако они эффективно подавляются фильтром обратной связи PLL! Если какие-то помехи остаются, то они слабые в диапазоне звуковых частот. Большое достоинство в том, что эти помехи не попадают в диапазон приема как паразитные сигналы, что бывает в случае «нормальной» системы DDS без PLL. И помехи полностью исчезают, когда частота RF настраивается со смещением вверх или вниз только на 15 .. 30 Гц.

Работа микроконтроллера. Сердцем DDS служит простой и дешевый микроконтроллер AT90S1200. Частота кварца 11999.55 кГц, так что может использоваться кварц на 12 МГц. DDS управляет VCO, работающим на частоте от 6 до 30 МГц. Частота этого VCO делится на 128, и захватывается DDS с помощью схемы фазовой автоподстройки частоты (PLL). Диапазон генератора DDS составляет 46875 .. 234375 Гц.

Один цикл прокрутки программы DDS составляет 13 машинных тактов процессора, что дает частоту тактов синтеза DDS 11999.55 / 13 = 923.04 кГц. Форма сигнала на выходе треугольная, а не синусоидальная. Простейший 7-битный DAC организован на ножках порта PD6..PD0 на основе цепочки резисторов.

LC ФНЧ имеет частоту среза 200 кГц. Возможно, что дополнительная секция фильтра может немного улучшить параметры фильтрации, потому что частота среза довольно высока по сравнению с половиной тактовой частоты DDS 923 кГц. Порты PB1, PB4, PB5, PB6 используются как входы для опроса кнопок. LED-дисплей отключается с помощью транзистора BC557. Транзистор открывается, когда переходят в лог. 0 уровни на выходе порта PB2 или PB3. Трюк заключается в том, что сегменты B и C 7-сегментного LED-индикатора всегда светятся, когда отображается любая из цифр. Вместо токоограничивающего резистора на каждый сегмент используется только один резистор. Вы возможно заметите, что яркость будет меняться, когда меняется количество зажженных сегментов (в зависимости от отображаемой цифры). ИМХО на практике это не очень критично.

Обратите внимание, что LED-индикатор получает питание от +12V, чтобы не создавать помехи на стабилизированном источнике питания 5V микроконтроллера.

Запрещение PLL. Ножка порта PB0 используется для запрета PLL в определенных подпрограммах AVR, когда тактовая частота снижается до 1/8 x 923 кГц. На таких низких тактовых частотах, которые меньше 1/4 от максимальной частоты DDS, в настоящий момент выход DDS значительно искажен. Без запрета PLL (только 255 мкс) во время этих подпрограмм Вы можете услышать громкий щелчок.

Настройка DDS. Настройка осуществляется тремя кнопками на старой 3-кнопочной мыши (в ней используются только кнопки). Две кнопки настраивают частоту вверх или вниз, третья используется для переключения скорости настройки. Есть 6 скоростей настройки конечного VCO (который работает на частоте, в 128 раз выше частоты DDS): 15.625 Гц, 31.25 Гц, 62.5 Гц, 1 кГц, 10 кГц и 100 кГц. Нажатие кнопки переключения скорости с одной из кнопок настройки меняют скорость, которая отображается на индикаторе. Когда нажимаются кнопки изменения частоты вверх или вниз, DDS работает только часть времени, на 1/8 от нормальной частоты тактов 923 кГц. То же самое происходит, когда активно отображение цифр частоты. Есть дополнительный тумблер, отключающий отображение частоты и кнопки, чтобы можно было получить самый чистый выходной RF-сигнал.

Отображение частоты. Для нижних скоростей настройки отображается значение части килогерц частоты. Когда выбрана скорость настройки 10 кГц или 100 кГц, отображается значение в МГц + 100 кГц.

Ниже на примере показано, как все работает.

Для частоты 21.345 МГц и скорости настройки 10 кГц и 100 кГц алгоритм отображения частоты следующий:

Отображение цифры «2» в течение 0.5 секунд.
Выключение отображения на 0.1 секунды.
Отображение цифры «1» в течение 0.3 секунды.
Выключение отображения на 0.1 секунды.
Отображение цифры «3» в течение 0.3 секунды.
Затем дисплей выключается на 5 секунд, и отображение повторяется.

Для частоты 21.345 МГц и нижних скоростей настройки алгоритм отображения частоты следующий:

Отображение цифры «3» в течение 0.5 секунды.
Выключение отображения на 0.1 секунды.
Отображение цифры «4» в течение 0.3 секунды.
Выключение отображения на 0.1 секунды.
Отображение цифры «5» в течение 0.3 секунды.
Затем дисплей выключается на 5 секунд, и отображение повторяется.

Отображение выключается на 5 секунд, но включится немедленно после того, как будет опущена одна из кнопок изменения частоты вверх/вниз. Первая цифра отображается немного дольше, чем другие, что дает более удобное считывание значения частоты. Когда нажата кнопка скорости настройки, отображается текущая скорость (от 1 до 6). Нажатие кнопок настройки вверх/вниз медленно меняет скорость настройки (0.5 секунд на 1 шаг).

[VCO]

Генератор VCO собран на одном транзисторе и снабжен выходным драйвером и счетчиком/делителем на 128. Переключатель S1 выбирает один из двух диапазонов частот. В качестве буфера используется 74HCU04 (возможно, что будет также работать и 74HC04), и счетчик 74HC4060 делит частоту VCO на 128. Этот сигнал приходит на схему PLL.

[PLL]

Первый вариант реализации PLL имел систему выборки, чтобы обеспечить быструю петлю управления VCO (вариант старой версии можно посмотреть по ссылке http://www.qsl.net/pa2ohh/03dds1.htm). Однако быстрая петля обратной связи не требуется, нам нужно специальная петля обратной связи для подавления паразитных сигналов. Для этой цели лучше подходит обычная схема детектора частоты/фазы на основе сохранения заряда, и у неё нет недостатка захвата частоты на гармониках. Это может также работать и на много более высоких частотах DDS, чем используется в нашей системе. На более высокой выходной частоте DDS получается ускоренный цикл управления, на котором меньше сигналы помех.

Частотно-фазовый детектор собран на RS-триггерах. Была идея использовать микросхему фазового детектора 74HCT9046, но она больше недоступна. По этой причине было принято решение реализовать детектор на обычных, широко доступных компонентах. Другое достоинство такого решения — есть доступ к компонентам, которые обычно недоступны. Например, можно запретить схему накачки заряда в определенных подпрограммах, когда искажается выходной сигнал DDS.

Как работает схема PLL. На трех транзисторах Q1, Q2 и Q3 реализован компаратор. База Q2 подключена к среднему постоянному напряжению схемы DDS (усредняется резистором 10 кОм и конденсатором 0.1 мкФ).

Прямоугольный выходной сигнал компаратора приходит на тактовый вход D-триггера U1A. Его входы снабжены схемой гистерезиса, поэтому не требуется подавать строго прямоугольный сигнал. Сигнал выходной частоты VCO (поделенной на 128) подключается к тактовому входу второго D-триггера U1B. Когда на обоих выходах D-триггеров находится лог. 1, они сбрасываются схемой монтажного «И», собранной на диодах 1N4148.

Когда произошел «захват» частоты (т. е. когда генератор VCO и DDS работают синхронно), D-триггеры и схема монтажного «И» работают как фазовый детектор, а когда захвата частоты нет, они работают как частотный детектор.

Выходы триггеров управляют двумя источниками тока Q5 и Q6, которые заряжают накопительный конденсатор 0.1 мкФ. Источники тока вместе с этим конденсатором также эффективно подавляют все сигналы помех. Ток устанавливается резисторами 8.2 кОм. Падение на этих резисторах составляет 1V, выходное напряжение управления для VCO меняется в диапазоне приблизительно от 1.5V до 10.5V.

Фильтр петли обратной связи PLL собран на двух транзисторах Q7 и Q8, которые заботятся о процедуре быстрого захвата, когда VCO слишком далеко отстроен от рабочей частоты.

Q9 и Q10 работают как схема запрета накопительной емкости. PLL запрещается определенными подпрограммами, когда выход DDS прерывается.

[Программа для AT90S1200]

Тактовая частота 11999.55 кГц. Одна прокрутка подпрограммы DDS занимает 13 машинных циклов AVR, что дает тактовую частоту 923.04225 кГц. Регистр аккумулятора DDS (DDS Accumulator Register) имеет длину 4 байта: 256*256*256*256 = 4294967296. Слово настройки частоты (Frequency Tuning Word) также состоит из 4 байт.

Выходная частота DDS равна (923.04225 kHz * Frequency Tuning Word) / 4294967296, частота PLL в 128 раз выше. Значение Frequency Tuning Word меняется кнопками изменения частоты вверх/вниз. Например, изменение Frequency Tuning Word на 36352 приведет к изменению точно на 1 кГц. Число 36352 равно 64×568. Таким образом, самый малый шаг перестройки 568, что дает изменение частоты на 15.625 Гц.

Если изменено значение Frequency Tuning Word, цифры дисплея также изменятся соответствующим образом. Для каждой из цифр частоты зарезервировано по одному регистру. Однако самый младший байт такого регистра меняется не от 0 до 9, а от 0 до 64. Если при перестройке частоты вверх младший байт превысит 63, или при перестройке частоты вниз он равен 0, то все другие значения десятичных цифр изменятся. Такой метод изменения цифр разработан для того, чтобы все подпрограммы отрабатывали за строго одинаковое количество машинных тактов AVR, независимо от того, что происходит. Если нажата кнопка, то тактовая частота DDS переключается на 1/8 от своей нормальной тактовой частоты 923 кГц, и Frequency Tuning Word умножается на 8. Однако было очень трудно точно учесть все машинные такты, так что автор провел много времени за ручной коррекцией длительности тактов заряда накопительного конденсатора (правкой кода и вставкой команд NOP), измеряя их с помощью осциллографа и прослушивая качество приема эфира.

Смещение частоты (учитывающее частоту ПЧ) программируется установкой начального значения для Frequency Tuning Word и регистров десятичных цифр. По ссылке [3] можно загрузить архив 04dds1soft.zip, гд

Исправление фьюзов AVR — AVR devices

Иногда случается что исправный, правильно подключенный микроконтроллер перестает определяться программой для прошивки. Это может происходить в следствии нескольких причин:

  1. Программирование через SPI запрещено
  2. Ножка RESET стала обычным пином порта
  3. Неправильно выбран источник тактирования

Если в первом и втором случае без параллельного программатора не обойтись, то при неправильном выбранном источнике тактирования, можно попробовать методы описанные в этом небольшом руководстве. Для этого нам потребуются:

  • Кварц ~4 МГц
  • Конденсаторы  от 12 пФ  до 22 пФ (2 шт)
  • Резистор 10 кОм
  • Микросхема 74HC00
  • Прямые руки 🙂

Предположим, что мы не знаем какой источник тактирования у нас выбран. Существуют следующие источники тактирования :

  • Кварцевый резонатор
  • Внешняя RC цепочка
  • Внешней генератор

Есть еще внутренний RC генератор но по понятным причинам он нам не интересен. Для воскрешения контроллера нужно последовательно перебирать возможные варианты.

Кварцевый резонатор

Кварцевый резонатор подключается к ногам XTAL2 и XTAL1. Каждая нога кварца подсоединена к конденсатору который в свою очередь подключен на землю. Конденсаторы любые от 12 до 22 пф.

Если подключение кварца не помогло то пойдем дальше

Внешняя RC-цепочка

Использовать ее для тактирования я бы не стал, ибо частота будет плавать как сами знаете что в проруби. Подключается она к контроллеру вот таким образом:

ВАЖНО: Вывод XTAL2 должен болтаться в воздухе! Подключать его никуда не надо. Если и это не помогает то остается последний вариант

Внешний генератор

Этот генератор можно сделать практически из любой логики или например из таймера 555. Под рукой оказалась микросхема 74HC00. Вместо нее можно использовать нашу к155ла3. Схема предельно проста и не требует наладки:

Генератор работает на частоте около 1.3 МГц. Естественно ее можно подстроить меняя номиналы резистора и конденсатора, но вряд-ли в этом будет необходимость. Плату я для него не делал т.к. смысла не было. Ногу XTAL2 нужно оставить болтаться в воздухе. Если и после этого контроллер не завелся, то это значит что контроллер умер или программирование по SPI запрещено или отключен RESET. Помочь тут может только параллельный программатор.

Вопросы, предложения, уточнения кидаем в комментарии.

Каталог автоматических регуляторов напряжения (AVR)

Применяются автоматические регуляторы во всех современных моделях дизель-генераторных установок. Они выполняют несколько задач одновременно:

  • стабильная подача напряжения нужной величины в штатном режиме;
  • стабильный переход ДГУ с одного режима работы на другой с плавным изменением напряжения;
  • корректное отключение дизель-генератора в случае аварии или в критической ситуации;
  • когда требуется, AVR может парллельно подключить центральные электрические сети или другое энергетическое оборудование.

Характеристики AVR

Любой стабилизатор напряжения (AVR) для синхронных бесщеточных генераторов должен соответствовать определенным требованиям вне зависимости от своих характеристик, марки и вида генератора, на который он устанавливается. Во-первых, автоматический регулятор не может отклоняться в одну или другую сторону от входного значения напряжения больше, чем на 1/40 в обычном режиме работы. При внештатных ситуациях он должен удерживать напряжение с отклонением от стандартного не больше, чем на 1/29. Во-вторых, смена режимов напряжения должна проходить плавно. Поэтому правильная работа стабилизатора напряжения в генераторе должна обеспечивать отклонение величины напряжения в ДГУ не более 15% в меньшую сторону, и не больше, чем на 1/5 — в большую. Третий важный момент для всех корректоров — это время, за которое они должны привести генератор к заданному значению напряжения после переходного процесса — не более, чем за 1,5 секунды.

Только грамотная и правильная установка автоматического регулятора напряжения гарантирует бесперебойную и стабильную работу ДГУ и ДЭС в течение всего срока эксплуатации. Настройка AVR должна быть доверена квалифицированным специалистам, которые проведут ее в соответствии с техническими документами источника тока.

Ассортимент автоматических регуляторов напряжения в компании «ДГУ-Сервис»

ООО «ДГУ-Сервис» предлагает регуляторы напряжения (AVR) для генераторов CATERPILLAR, STAMFORD, ENGGA, LEROY SOMER, MARELLI MOTORI, ГС, ГБ и другие. За подробностями обращайтесь к нам: оставляйте заявку через сайт или задавайте вопросы нашим менеджерам по телефону +7 (343) 288-79-95.

Запускаем генератор DDS на AD9851 в Bascom-AVR — Проекты — AVR project.ru

 Примеров генераторов DDS достаточно много и я, ничтоже сумняшеся, решил скомпилировать из них что-то свое на нашем любимом Бейсике для проверки работоспособности платы. Интерфейс управления был взят из звукового генератора DDS итальянского коллеги, расчет и управление микросхемой – немецкого. Смотрим ниже:

Расчет генерируемой частоты

 

Программа скопипастилась быстро – используя CtrlC-CtrlV, но тут я от собственной жадности решил сэкономить память камня Atmega8 в расчете на дальнейший апгрейд ПО и схемы вообще. Итак, индусский код в моем исполнении:

 1.

Цифры, выводимые на дисплей, представлены в виде массива чисел. 

     

    Итальянский коллега высчитывал требуемое число последовательным умножением в цикле каждого разряда на 10 и сложением чисел


    Dim Fdig(8) As Byte          ‘числовой массив генерируемой частоты


    ‘преобразуем массив в целое
          Fincr = 0
          Tmpw = 1
          Txx1 = 5                        
          Do
          Tmpl = Fdig(txx1) * Tmpw        ‘da * 1  a * 10000
          Fincr = Fincr + Tmpl
          Tmpw = Tmpw * 10                ‘множитель изменения
          Decr Txx1
          Loop Until Txx1 = 0            ‘заканчиваем преобразование массива в целое

    ‘получаем на выходе  Fincr как long

    Мой вариант решения проблемы:


    Dim Fdig(8) As Byte                     ‘ числовой массив генерируемой частоты
    Dim Digasci(8) As Byte
    Dim Dispstring As String * 7 At Digasci Overlay

          For I = 1 To 7
          Digasci(i) = Fdig(i + 1) + 48
          Next I
          Frequ_gen = Val(dispstring)

    ‘ получаем на выходе  Frequ_gen как long

     Я использую вспомогательный семизначный массив, сдвигая значения 0-9 в ASCII код 48-57 и потом просто преобразую строку в число. Опять же мною были применен апноут №193. Старшую цифру я не трогаю по причине, указанной ниже.

     2. Управление микросхемой реализовано с помощью последовательного ввода кода.

      Оригинальное решение немецкого коллеги для работы с 64 разрядным числом:

      Sub To_ad9851
         Local S As Single
         Local Fred As Long
         Local Korr As Long
         Local W As Long
         Local Lauf As Byte

         Select Case Frequ_gen

            Case 0 To 9999999 : Fred = Frequ_gen
                                 Korr = 0
            Case 10000000 To 19999999 : Fred = Frequ_gen — 10000000
                                         Korr = 238609294
            Case 20000000 To 29999999 : Fred = Frequ_gen — 20000000
                                         Korr = 477218588
            Case 30000000 To 39999999 : Fred = Frequ_gen — 30000000
                                         Korr = 715827883
            Case 40000000 To 49999999 : Fred = Frequ_gen — 40000000
                                         Korr = 954437177
            Case 50000000 To 59999999 : Fred = Frequ_gen — 50000000
                                         Korr = 1193046471
            Case 60000000 To 69999999 : Fred = Frequ_gen — 60000000
                                         Korr = 1431655765
            Case Is >= 70000000 : Fred = Frequ_gen — 70000000
                                   Korr = 1670265060
         End Select

         S = Fred
         S = S * 23. 32 / 180MHz;
         W = Round(s)
         Korr = Lookup(fdig(1) , Dta)                             ‘ First digit
         W = W + Korr

      ‘И т.д.

      End Sub

      Dta:
      Data 0& , 238609294& , 477218588& , 715827883& , 954437177& , 1193046471&
      Data 1431655765& , 1670265060& , 1908874354& , 2147483647&

       То есть функцию Case меняем на lookup, экономя при этом нужную в дальнейшем память. Первая цифра массива Fdig(8) используется как индекс для поиска в данных нужного слагаемого. Генерируемая частота также повысилась до 100 МГц. Я, правда, не уверен, что данная платка его вытянет, и пока не проверял в железе.

       

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

       

      Печатку я еще не разводил, т.к. планирую использовать Атмегу8 в прямоугольном корпусе. Фьюзы по умолчанию – на 8 МГц. В качестве дальнейшего развития схемы (памяти и ног у нас еще ого-го) можно поставить энкодер, ввести шаг перестройки частоты, АМ и ФМ модуляцию, ну и т.п. Неплохо на выходе поставить ОУ как повторитель для защиты мелкосхемы. 

       Для экспериментов использовалась вот такая схема подключения:


       Результат всех трудов можно скачать ниже:

        СКАЧАТЬ

      И напоследок несколько фоток процесса:


       Все это испытывалось на оригинальной отладочной плате, которая совмещает в себе блок питания 5 и 12 вольт, частотомер и генератор, программатор и сом-порт, а на крышке сверху — макетная плата.


       

      Что такое AVR? Объясните функцию AVR?

      Почему вторичное напряжение распределительного трансформатора составляет 0,433 кВ вместо 0,415кВ. все остальные номиналы КРУЭ 415 вольт ??

      3 ответа


      каков будет эффект, если мы увеличим возбуждение генератор ??

      3 ответа


      Определить односторонний контур?

      0 ответов


      почему провод плавкого предохранителя ht такой тонкий

      7 ответов DLF,


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

      1 ответов



      что такое сервомеханизм?

      1 ответов


      У меня диаметр рулона ок.43 дюйма и передаточное число коробки передач 14.3. Поэтому мой вопрос заключается в том, как определить рейтинг кВт мотор.

      1 ответов


      Индукционный генератор имеет = A отрицательная скорость B отрицательное скольжение C отрицательное напряжение D отрицательный ток

      2 ответа


      На каком основании вы выбираете трансформатор типа ONAN (Oil Natural air natural) или сухой трансформатор для проекта?

      0 ответов Semac,


      что будет, если вторичная обмотка трансформатора напряжения (220 кВ / 110 В) любой измерительной жилы или защитной жилы (кабели) любой фазы заземлились ??

      1 ответов


      Как я могу рассчитать мегаваттную мощность, необходимую для работы установки с множеством электродвигателей и других электрических компонентов.

      0 ответов МКС,


      125Kva Dg может принять сколько амферической нагрузки.

      7 ответов Индийские железные дороги,


      Генератор сигналов AVR DDS V2.0

      Наконец, вторая версия улучшенного генератора сигналов AVR DDS уже здесь. Первый генератор AVR DDS V1.0 был всего лишь попыткой запустить алгоритм DDS без какого-либо аналогового контроля амплитуды.В этой версии генератора DDS я все еще хотел сделать все как можно проще, используя минимальное количество широко доступных компонентов в обновленной схеме. Кроме того, я придерживался одностороннего подхода к печатной плате.

      AVR DDS, спецификация

      AVR Генератор сигналов DDS V2.0 — это основанный на микропрограммном обеспечении генератор сигналов DDS, который использует слегка модифицированный алгоритм mini DDS Джеспера, адаптированный к коду AVR-GCC в качестве встроенного ASM.

      Генератор сигналов AVR DDS имеет два выхода — один для сигнала DDS, а другой для высокоскоростного прямоугольного сигнала [1,8 МГц], которые можно использовать для повторного включения микроконтроллеров с неправильными настройками предохранителей для других целей, где может быть высокоскоростной прямоугольный сигнал. необходимо.Сигнал высокой скорости (HS) выводится непосредственно с вывода Atmega16 OC1A (PD5).

      Выход DDS используется для всех сложных сигналов, генерируемых цепью резисторов R2R, и регулируется с помощью схем смещения LM358N и регулирования амплитуды. Два потенциометра могут управлять смещением и амплитудой.

      Смещение можно регулировать в диапазоне + 5В ..- 5В, а величину — в диапазоне 0..10В.

      Диапазон частот

      DDS составляет от 0 до 65534 Гц, что более чем достаточно для тестирования аудиосхем и других целей.

      Основные характеристики генератора сигналов AVR DDS V2.0:

      • Простая схема с легкодоступными и дешевыми компонентами;
      • Односторонняя печатная плата;
      • Блок питания в коробке с внешней розеткой переменного тока;
      • Выделенный высокоскоростной (HS) выход сигнала до 8 МГц;
      • Сигнал DDS с переменной амплитудой и смещением;
      • Сигналы DDS: синусоидальный, квадратный, пильный, оборотный, треугольный, ЭКГ и шум.
      • 2 × 16 ЖК-меню;
      • Интуитивно понятная пятикнопочная клавиатура.
      • Шаги регулировки частоты: 1, 10, 100, 1000, 10000 Гц;
      • Восстановление последней конфигурации после включения.

      На блок-схеме вы можете увидеть логическую структуру генератора сигналов V2.0

      Блок питания для генератора сигналов AVR DDS

      Как видите, устройству требуется несколько напряжений питания: + 5V, -12V, + 12V, GND. -12V и + 12V используются для регулировки смещения и амплитуды. Источник питания построен с использованием простого трансформатора и нескольких линейных регуляторов напряжения, таких как 7812, 7805 и 7912.

      Блок питания собран на отдельной макетной плате.

      Если вы не хотите создавать блок питания, вы можете использовать блок питания PC ATX, в котором доступны все необходимые напряжения. Возможно, вам потребуется изменить проводку разъема Molex следующим образом:

      Управление генератором DDS с ЖК-дисплеем Меню

      Все действия генератора DDS можно просмотреть в меню ЖК-дисплея. Управление меню осуществляется с помощью пяти кнопок, которые находятся рядом с ЖК-модулем

      .

      Вверх и Вниз Кнопки со стрелками используются для просмотра меню, а кнопки со стрелками Вправо и Влево используются для изменения значения частоты.При нажатии средней кнопки — запускается сигнал DDS. Нажмите среднюю кнопку еще раз, чтобы ОСТАНОВИТЬ генератор сигналов.

      Полная система меню генератора сигналов.

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

      Функция генерации шума не имеет настройки частоты.Он использует простую функцию rand (), результаты которой постоянно отправляются на вывод DDS.

      Для высокоскоростного сигнала доступны четыре частоты: 1, 2, 4 и 8 МГц.

      Принципиальная схема и печатная плата

      Принципиальная схема генератора AVR DDS (без источника питания) проста с широко доступными компонентами. В нем используются следующие строительные части:

      • AVR микроконтроллер Atmega16 с тактовой частотой 16 МГц;
      • Стандартный ЖК-модуль 2 × 16 на базе HD44780;
      • R2R ЦАП из простых резисторов;
      • LM358N — маломощный сдвоенный операционный усилитель;
      • Два потенциометра;
      • Пять кнопок;
      • несколько разъемов и розеток.

      Схема Схема

      Односторонняя печатная плата :

      Сборка генератора сигналов AVR DDS

      Прототип генератора

      DDS собран в пластиковом ящике. Наиболее значительную часть корпуса занимает блок питания. Вы можете сделать конечное устройство намного меньше, если бы использовали внешний источник питания.

      Последний пробный запуск генератора DDS перед закрытием коробки:

      Программирование AVR DDS 2.0 Прошивка

      Как я уже упоминал, функция DDS представляет собой модифицированный алгоритм DDS Джеспера. Основная модификация кода — добавление строки ASM, позволяющей в любой момент остановить генерацию DDS. Раньше единственным вариантом было перезагрузить устройство, чтобы оно закончилось.

      Теперь подпрограмма Signal_Out проверяет, установлен ли бит CPHA в регистре SPCR, который установлен во время подпрограммы обслуживания внешнего прерывания (при нажатии кнопки остановки). Алгоритм создания DDS занимает 10 циклов ЦП вместо 9 без функции остановки.

      void static inline Signal_OUT (const uint8_t * signal, uint8_t ad2, uint8_t ad1, uint8_t ad0) {
      asm volatile ("eor r18, r18; r18 <-0" "\ n \ t"
      "eor r19, r19; r19 <-0" "\ n \ t"
      "1:" "\ n \ t"
      "добавить r18,% 0; 1 цикл" "\ n \ t"
      "adc r19,% 1; 1 цикл" "\ n \ t"
      "adc% A3,% 2; 1 цикл" "\ n \ t"
      «л / мин; 3 цикла» «\ n \ t»
      "out% 4, __tmp_reg__; 1 цикл" 

      Что такое AVR портативного генератора?

      Генератор AVR является частью системы возбуждения генератора переменного тока, соединяет обмотку главного статора и обмотку возбуждения, чтобы обеспечить точное выходное напряжение замкнутого контура управления, в соответствии с выборкой выходного сигнала управления напряжением текущая система возбуждения, нагрузка двигателя группа градусов Компенсация коэффициента мощности будет выходным напряжением в определенном диапазоне регулирования.Высокая точность, которая может регулировать искажение формы волны, мала, функция защиты идеальна и так далее. Его можно широко использовать в бесщеточных и щеточных генераторах переменного тока с частотой 50/60 Гц и всеми видами функций.

      Портальный генератор Модель АРН:
      1.Квадратная пластиковая банка АРН 1-3 кВт
      2. Полукруглая алюминиевая банка АРН 1-3 кВт
      3. Полукруглая пластиковая банка АРН 1-3 кВт
      4. Полукруглая пластиковая банка АРН мощностью 5–7 кВт Банка
      5. Полукруглый 5-7 кВт AVR Пластиковая банка
      6. Полукруглый 5-7 кВт 3-фазный AVR
      7.Дизельный генератор 186F АРН, 1 фаза
      8. Дизель-генератор 186F АРН, 3 фазы
      9.188F Генератор и сварочный аппарат АРН двойного использования

      Квадратная 1-3 кВт AVR пластиковая банка

      Генератор 1-3 кВт Применение АРН:

      Генератор Товарный знак Генератор Тип
      HONDA EP1800 EP2500
      KAWASAKI GE1400 GE2200 GA2300 GA2900
      SUZUKI SV1400L SV1400LD SV2200L SV2200LD
      SAWAFUJI Ш2800 Ш3600
      МАРУЯМА ME1800 ME2600
      ELEPAQ Ph2800 Ph3600

      Полукруглый AVR 1-3 кВт Алюминиевая банка

      Генератор 1-3 кВт Применение АРН:

      Генератор Товарный знак Генератор Тип
      HONDA EP1800 EP2500
      KAWASAKI GE1400 GE2200 GA2300 GA2900
      SUZUKI SV1400L SV1400LD SV2200L SV2200LD
      SAWAFUJI Ш2800 Ш3600
      МАРУЯМА ME1800 ME2600
      ELEPAQ Ph2800 Ph3600

      Полукруглый АВР 1-3 кВт Пластиковая банка

      Генератор АВР 1-3 кВт Применение:

      Генератор Товарный знак Генератор Тип
      HONDA EP1800 EP2500
      KAWASAKI GE1400 GE2200 GA2300 GA2900
      SUZUKI SV1400L SV1400LD SV2200L SV2200LD
      SAWAFUJI Ш2800 Ш3600
      МАРУЯМА ME1800 ME2600
      ELEPAQ Ph2800 Ph3600

      Полукруглый 5–7 кВт AVR Алюминиевая банка

      Генератор 5-7кВт AVR Алюминиевая банка Применение:

      Генератор Товарный знак Генератор Тип
      YAMAHA EDL6500S
      KUBOTA LOW BOY GL6500S
      HONDA EP3800 EP5000 EC6500
      ELEMAX Ш5000 Ш5000 Ш6000 Ш7000
      KAWASAKI GE4300A GE500AS PP4000 PP6000
      SAWAFUJI Sh5600EX SH5300EX SH6500EXS SH7600EX

      Полукруглый 5–7 кВт AVR Plastci Can

      Генератор AVR 5-7 кВт Применение:

      Генератор Товарный знак Генератор Тип
      YAMAHA EDL6500S
      НИЗКИЙ МАЛЬЧИК KUBOTA GL6500S
      HONDA EP3800 EP5000 EC6500
      ELEMAX Ш5000 Ш5000 Ш6000 Ш7000
      KAWASAKI GE4300A GE500AS PP4000 PP6000
      SAWAFUJI Sh5600EX SH5300EX SH6500EXS SH7600EX

      Полукруглый 5-7 кВт 3-фазный АРН

      Трехфазный автоматический регулятор напряжения мощностью 5 кВт Технические характеристики
      (1) Функция: функция короткого замыкания, выборка

      .

      Добавить комментарий

      Ваш адрес email не будет опубликован. Обязательные поля помечены *