Делаем генератор частоты на базе ардуино микроконтроллера
Содержание:
- А что насчет дрожания фронтов — джиттера?
- Генератор сигналов на микросхеме таймера 555
- Introduction: Arduino Waveform Generator
- Какие основные преимущества дает применение DDS-синтезаторов?
- Step 2: Enclosure
- Каким образом этот линейный сигнал преобразуется в синусоиду?
- Какие свойства синтезаторов DDS являются основными преимуществами с точки зрения проектировщика?
- Можно ли синхронизировать несколько синтезаторов DDS, например, для получения сигнала I-Q?
- Возможно, вам также будет интересно
- Как Arduino измеряет частоту
- Компиляция Optiboot для работы на частотах 8МГц и 1МГц
- Step 10: Low Pass Filter
- Step 29: Test
- А как получить сигнал с фазовой модуляцией PSK?
А что насчет дрожания фронтов — джиттера?
Дрожание фронтов (джиттер) — это динамическое отклонение фронта сигнала от среднего положения фронта, измеренного за продолжительный период времени. Идеальный
генератор обеспечивал бы абсолютно точное
положение фронтов сигнала в определенные
моменты времени, и это положение никогда
бы не менялось. Такое, конечно, невозможно,
и даже лучшие генераторы созданы из реальных элементов, обладающих шумами и другими несовершенствами. Высококачественный кварцевый генератор обладает величиной джиттера, не превышающей 35 пс.
Джиттер возникает за счет температурного
шума, нестабильности параметров элементов
генератора, внешних помех по питанию, по земле и даже через соединение выхода. Кроме того, оказывают влияние внешние магнитные
и электрические поля, такие как поля от близко расположенных передатчиков. Даже простой
усилитель, инвертор или буфер будет вносить
дополнительный джиттер в выходной сигнал.
Таким образом, некоторое дрожание фазы будет присутствовать в выходном сигнале синтезатора DDS. Так как любому источнику тактового сигнала присущ некоторый джиттер, для
начала необходимо выбрать тактовый генератор с минимальным джиттером. Один из способов уменьшить величину джиттера — получать тактовый сигнал посредством деления частоты высокочастотного тактового сигнала.
При делении частоты та же величина джиттера
распределяется на больший период времени, что
снижает относительную величину джиттера.
В целом, чтобы минимизировать величину
дрожания фазы, необходимо выбрать хороший источник тактовых импульсов, избегать
сигналов с медленными фронтами и схем
с низкой скоростью нарастания импульсов
и работать при максимально возможной частоте тактирования, чтобы иметь достаточно
большой запас по частоте.
SFDR — динамический диапазон, свободный от гармоник, — представляет собой соотношение (в децибелах) между величиной
основного сигнала и величиной максимального пика в спектре выходного сигнала, включая гармоники, интермодуляционные составляющие и продукты наложения спектров.
SFDR является важным параметром для
многоканальных систем. Если передатчик обладает недостаточно низким уровнем гармоник, эти гармоники могут являться источником помех для соседних каналов.
Типичный спектр выходного сигнала ИС
AD9834 (10-разрядный DDS) при частоте
тактирования 50 МГц показан на рис. 10.
На рис. 10а частота выходного сигнала составляет ровно 1/3 от частоты тактирования
(MCLK). Поэтому в данном случае в полосе
25 МГц практически отсутствуют гармоники, эффекты наложения спектров минимальны
и спектр выглядит превосходно; все максимумы в спектре как минимум на 80 дБ слабее сигнала (SFDR = 80 дБ). На рис. 10b показан
спектр выходного сигнала при более низкой
частоте на выходе; здесь на один период приходится большее число отсчетов (но недостаточное для того, чтобы получить по-настоящему чистую синусоиду) и спектр выходного
сигнала гораздо дальше отстоит от идеального; максимальная гармоника — вторая — имеет величину –50 дБ относительно основного
сигнала (SFDR = 50 дБ).
<img class=»wp-image-132497 size-full» src=»https://kit-e.ru/wp-content/uploads/28p10.png» alt=»Спектр выходного сигнала синтезатора AD9834 при частоте тактирования 50 МГц и выходной частоте fout = MCLK/3 = 16,667 МГц (a) и fout = 4,8 МГц (b)» title=»» width=»494″ height=»233″>
рис 10 Спектр выходного сигнала синтезатора AD9834 при частоте тактирования 50 МГц и выходной частоте fout = MCLK/3 = 16,667 МГц (a) и fout = 4,8 МГц (b)
Генератор сигналов на микросхеме таймера 555
Генератор сигналов на микросхеме таймера 555. Схема электрическая принципиальная
Прежде всего, мы поговорим о генераторе прямоугольного сигнала на микросхеме 555, или, я бы сказал, о нестабильном (астабильном, автоколебательном) мультивибраторе на 555. Эта схема необходима, потому что для проверки частотомера нам необходим сигнал, частота которого известна. Без этого сигнала мы не сможем рассказать о работе частотомера. Если у нас есть прямоугольный сигнал с известной частотой, мы можем использовать его для проверки частотомера на Arduino и для подстройки точности в случае любых отклонений. Макет генератора сигнала на микросхеме таймера 555 показан ниже.
Макет генератора сигналов на микросхеме таймера 555
Ниже показана типовая схема таймера 555 в нестабильном режиме, из которой мы получили вышеприведенную схему генератора сигналов.
Типовая схема на таймере 555 в автоколебальном режиме
Частота выходного сигнала зависит от резисторов RA и RB и конденсатора C. Формула будет следующей:
\
Здесь RA и RB – значения сопротивлений, а C – значение емкости. Подставляя значения сопротивлений и емкости в приведенную выше формулу, мы получаем частоту выходного прямоугольного сигнала.
Можно увидеть, что RB на схеме выше заменен в нашей схеме генератора сигналов потенциометром; это сделано для того, чтобы для лучшего тестирования мы могли получить на выходе прямоугольный сигнал переменной частоты. Для простоты можно заменить этот потенциометр простым резистором.
Introduction: Arduino Waveform Generator
By amandaghassaeiuh-man-duh-guss-eye-dot-comFollow
More by the author:
About: I’m a Research Engineer at Adobe. Previously, I was a grad student at the Center for Bits and Atoms at MIT Media Lab. Before that, I worked at Instructables, writing code for the website and iOS apps and m…
More About amandaghassaei »
Waveform generators (also called function generators) are useful for testing and debugging circuits. I often use them to test the frequency response of electronics components like op amp and sensors. This waveform generator is powered by an Arduino. It outputs four waveshapes: sine, triangle, pulse, and saw, each waveshape ranges in frequency from 1Hz-50kHz. The frequency, pulse width, and overall amplitude (gain) of the waveforms is controlled by three potentiometers. I’ve also included (optional) indicator LEDs that let you know which type of wave is currently being sent to the output.
Parts List:
(4x) Mini SPST 1.5-Amp Momentary Pushbutton Switch (2 packages) Radioshack #275-1556
(8x) 10K Ohm 1/4-Watt Carbon Film Resistor (2 packages) Radioshack #271-1335
(9x) 20K Ohm 1/4-Watt Carbon Film Resistor (2 packages)
(1x) 50K-Ohm Linear-Taper Potentiometer Radioshack #271-1716
(1x) 10K-Omh Audio-Taper Potentiometer Radioshack #271-1721
(1x) 10K-Ohm Audio Control Potentiometer with SPST Switch Radioshack #271-215
(1x) 1/8″ Stereo In-Line Audio Jack Radioshack #274-274
(1x) 10.01µf 50V Ceramic Disc Capacitor Radioshack #
(1x) 4.7K Ohm 1/4-Watt Carbon Film Resistor Radioshack #271-1330
(1x) 8 Pin Socket Radioshack #276-1995
(1x) LM386 Low Voltage Audio Power Amplifier Radioshack #276-1731
(2x) 220µF 35V 20% Radial-lead Electrolytic Capacitor (or anything between 200 and 300 uF) Radioshack #272-1029
(1x) Arduino Uno REV 3 Radioshack #276-128
(1x) Arduino Proto Shield Radioshack #276-140
(4x) White Super-bright LED Indicator Radioshack #55050633
(4x) 740 ohm 1/4W 5% Carbon Film Resistor (1 package) Radioshack 271-1317
(1x) 300Ohm resistor
Additional Materials:
Heat Shrink Radioshack #278-1611
22 Gauge Wire Radioshack #278-1224
Solder Radioshack #64-013
Drill
Hot Glue
Glue
Black diffusor material (tissue paper, plastic, etc)
Какие основные преимущества дает применение DDS-синтезаторов?
Синтезаторы DDS, подобные вышеупомянутой
ИС AD9833, управляются посредством быстродействующего последовательного порта SPI, при этом
для генерации синусоидального сигнала требуется
только тактовый сигнал. Доступные в настоящее
время синтезаторы DDS способны генерировать сигнал на частотах от 1 Гц до 400 МГц (при тактовой
частоте 1 ГГц). Преимущества, предоставляемые малым энергопотреблением, низкой стоимостью и малыми размерами корпусов, в сочетании с отличным
качеством сигнала и возможностью цифрового управления, делают синтезаторы DDS чрезвычайно
привлекательными приборами по сравнению с гораздо менее гибкими схемами на дискретных
элементах.
Step 2: Enclosure
I decided to laser cut a custom enclosure for my project. I designed the enclosure using AutoCAD, Autodesk 123D Make, and Corel Draw, and I’ve included corel draw and adobe illustrator 2D files as well as the STL, and DWG files from this process below. If you do not have access to a laser cutter, you can use my 2D files a guide and drill the necessary holes in a project enclosure of some kind. Figure 4 shows the holes that should be drilled on the front panel:
(3x) 7mm holes for gain, freq, and PWM pots
(3x) 7mm holes for four push buttons- sin, saw, tri, and pulse
(1x) 10mm hole for audio out
I cut out shapes of all four waveforms in the front of the enclosure so that I could backlight them with indicator LEDs, you may choose to just drill four 5mm holes for these LEDs in the front panel of the enclosure, place one LED under each momentary switch.
Also include a rectangular (11mm tall, 12mm wide) cutout somewhere on the side of the enclosure for the arduino’s usb port.
I made my project enclosure out of wood, so I had to glue all the pieces (except the bottom) together with wood glue. I will attach the bottom panel on later in this instructable.
Attachments
- enclosure.stlDownload
- function generator enclosure.aiDownload
- function generator enclosure.cdrDownload
- enclosure.dwgDownload
Каким образом этот линейный сигнал преобразуется в синусоиду?
Для преобразования выходного кода аккумулятора фазы (в случае ИС AD9833 — это
28-разрядный код) в мгновенные значения
амплитуды используется ПЗУ с табличными
значениями отсчетов синуса. Младшие разряды 28-разрядного кода отбрасываются; на выходе табличного ПЗУ мы получаем 10-разрядный код, который подается на ЦАП. Так как
синусоида обладает симметричностью, в синтезаторе DDS хранятся табличные данные
только об 1/4 части синусоиды. Табличное
ПЗУ генерирует полный цикл синусоиды за
счет чтения данных сначала в прямом, затем
в обратном порядке. Схематически принцип
работы синтезатора проиллюстрирован на
рис. 5.
Рис. 5. Сигналы в синтезаторе DDS
Какие свойства синтезаторов DDS являются основными преимуществами с точки зрения проектировщика?
Современные недорогие, высокопроизводительные и высокоинтегрированные синтезаторы DDS становятся очень популярными
как в коммуникационных системах, так и в устройствах с датчиками. Среди привлекательных для разработчика свойств можно отме-
тить следующие:
- Цифровая настройка частоты с точностью
до микрогерц и фазы с точностью до долей
градуса. - Чрезвычайно большая скорость перестройки частоты (или фазы) выходного сигнала;
переключение частоты производится при
непрерывной фазе сигнала без выбросов
и без переходных процессов захвата частоты, присущих системам с ФАПЧ. - Цифровая архитектура синтезаторов DDS
позволяет избавиться от элементов ручной
настройки и от явлений, связанных с температурным и временным дрейфом, присущим аналоговым системам. - Цифровой интерфейс синтезаторов DDS
позволяет без труда реализовать дистанционное управление синтезатором с помощью
микропроцессора.
Можно ли синхронизировать несколько синтезаторов DDS, например, для получения сигнала I-Q?
Можно применить два отдельных синтезатора DDS, работающих от одного источника
тактирования, для получения двух выходных
сигналов, фазы которых можно затем установить в соответствии с требуемой величиной.
На рис. 8 две микросхемы AD9834 работают
от общего источника тактовых импульсов и их
входы сброса объединены. При такой конфигурации можно реализовать модуляцию I-Q.
Сигнал сброса должен быть подан на соответствующие входы микросхем после включения питания и до подачи данных на входы синтезаторов DDS. Этот сигнал установит синтезаторы DDS в исходное состояние с известной
начальной фазой, что позволит синхронизировать несколько синтезаторов DDS. Когда
в микросхемы одновременно загружаются новые данные, обеспечивается когерентность фаз
выходных сигналов; соотношения фаз устанавливаются с помощью регистров сдвига фаз.
Микросхемы AD9833 и AD9834 обладают
12-разрядными регистрами фазы, эффективная разрешающая способность составляет 0,1.
Более детально синхронизация нескольких синтезаторов DDS описана в руководстве AN-605.
Возможно, вам также будет интересно
Важнейшим фактором, влияющим на надежность работы модулей питания и, как следствие, на надежность аппаратуры, в которую они установлены, является правильно выбранный тепловой режим их эксплуатации . Известно, что повышение рабочей температуры электронных компонентов на 10 °С приводит к сокращению их наработки на отказ вдвое. Поэтому выбор оптимального теплового режима работы модулей питания в аппаратуре —
Работаем с Vinculum II и W5100. USB от FTDI + Ethernet от Wiznet
C момента начала серийного производства компанией FTDI хост-контрол-лера Vinculum II прошел год. Этот контроллер оказался удачным и востребованным решением. С его помощью можно добавить в разрабатываемое изделие возможность подключения различных USB-устройств: флэш-накопителей, принтеров, HID-устройств (клавиатуры, мыши и т. д.), модемов CDC-класса. Кроме USB-интерфейса, в настоящее время для встраиваемых приложений также актуальна поддержка сетевых подключений. В связи с этим компания FTDI добавила поддержку хост-контроллером Ethernet-моста W5100 производства компании
Безлицензионный высокоскоростной АЦП LM15851 от Texas Instruments
Как Arduino измеряет частоту
Arduinio Uno имеет специальную функцию , которая позволяет нам определять длительность положительного или отрицательного состояния конкретного прямоугольного сигнала:
Данная функция измеряет время, в течение которого высокий или низкий логический уровень присутствует на выводе 8 Arduino Uno. Таким образом, в одном периоде сигнала у нас будут продолжительности положительного и отрицательного уровней в микросекундах. Функция измеряет время в микросекундах. В заданном сигнале мы имеем время высокого логического уровня = 10 мс и время низкого логического уровня = 30 мс (частота 25 Гц). Таким образом, в будет сохранено целое число 30000, а в – 10000. Если мы сложим эти два значения, то получим длительность периода, а инвертировав её, мы получим частоту.
Компиляция Optiboot для работы на частотах 8МГц и 1МГц
Исходные файлы Optiboot входят в состав IDE Ардуино и находятся в каталоге Arduino_dir\hardware\arduino\avr\bootloaders\optiboot\. Там же расположен батник omake.bat для сборки загрузчика. Вот только для его сборки в составе IDE Ардуино (начиная с версий 1.5.x) не хватает утилиты make.exe. Наиболее простое решение — это скопировать ее из старой версии. Для этого:
- скачайте IDE версии 1.0.6;
- распакуйте архив и перейдите каталог \arduino-1.0.6\hardware\;
- скопируйте или переместите каталог tools в Arduino_dir\hardware\arduino\ вашей рабочей IDE;
- IDE 1.0.6 больше не нужна, ее можно удалить.
Перейдите в каталог optiboot и откройте файл Makefile в Блокноте. В нем нужно найти секцию для atmega328:
Между ней и началом следующей секции для Sanguino вставляем код:
atmega328_8: TARGET = atmega328
atmega328_8: MCU_TARGET = atmega328p
atmega328_8: CFLAGS += ‘-DLED_START_FLASHES=3’ ‘-DBAUD_RATE=57600’
atmega328_8: AVR_FREQ = 8000000L
atmega328_8: LDSECTIONS = -Wl,—section-start=.text=0x7e00 -Wl,—section-start=.version=0x7ffe
atmega328_8: $(PROGRAM)_atmega328_8.hex
atmega328_8: $(PROGRAM)_atmega328_8.lst
atmega328_1: TARGET = atmega328
atmega328_1: MCU_TARGET = atmega328p
atmega328_1: CFLAGS += ‘-DLED_START_FLASHES=3’ ‘-DBAUD_RATE=4800’
atmega328_1: AVR_FREQ = 1000000L
atmega328_1: LDSECTIONS = -Wl,—section-start=.text=0x7e00 -Wl,—section-start=.version=0x7ffe
atmega328_1: $(PROGRAM)_atmega328_1.hex
atmega328_1: $(PROGRAM)_atmega328_1.lst
Это копии секции atmega328. От исходной они отличаются частотой микроконтроллера и скоростью загрузки скетчей. Эти значения соответствуют указанным нами ранее в файле boards.txt. Думаю, можно указать и большую скорость загрузки, но я не экспериментировал с этим. Однозначно, при слишком высокой скорости ошибки будут неизбежны, поэтому с уменьшением частоты микроконтроллера я уменьшаю и скорость загрузки.
Step 10: Low Pass Filter
Use a resistor and capacitor in series to create a low pass filter. Low pass filters let low frequencies pass through and silence (attenuate) high frequencies. Connecting a low pass filter to the output from the dac will smooth out the steps in the wave.
Here’s how I calculated the value of the components in my low pass filter:
corner frequency = 1/(2*pi*R*C)
According to Nyquist’s Theorum, signals cannot contain frequencies higher than half their sampling rate. If I used a sampling rate of 100kHz, then the highest frequency I can produce is 50kHz.
if I use a 300Ohm resistor and I want a corner frequency of 50kHz:
50000 = 1/(6.28*300*C)
C = 1.06*10^-8 F
round this to:
C = 0.01uF
Connect one end of the the 300Ohm resistor to the 10kOhm resistor connected to digital pin 7. Connect the capacitor to the other end of the 300Ohm resistor. The other side of the cap should connect to ground.
Step 29: Test
Turn up the gain knob to turn on the function generator. Plug an eighth inch jack into the output and hook up the function generator to an oscilloscope. Test out each of the waveforms and adjust the frequency and gain to make sure they are working properly. Switch the output to pulse and check if the pulse width modulation knob works (figs 4-6).
You will notice that the pulse wave is the only wave which truly ranges from 1Hz to 50kHz. Since the sampling rate is 100kHz, the sine, triangle, and saw waves start to become somewhat unrecognizable at about 25kHz (they are only comprised of 4 samples per cycle- 100kHz/25kHz). The saw and triangle waves only go down to about 100Hz, this is because the values of triInc and sawInc get so low that they are rounded to zero below this frequency. The sine wave reaches all the way to 1 HZ but the resolution stays the same for anything under 5Hz, since the Arduino only has enough memory to store about 20 thousand samples.
А как получить сигнал с фазовой модуляцией PSK?
Кодирование со сдвигом фаз (PSK) — еще
один простой способ кодирования. При модуляции PSK частота несущей остается постоянной, а фаза передаваемого сигнала меняется в соответствии с передаваемым кодом.
Из разновидностей модуляции PSK наиболее
простой является двоичная импульсно-кодовая
модуляция (BPSK) — в ней применяется только
два значения фазы сигнала, 0° и 180°. Спомощью
фазового сдвига 0° передается логическая единица, а при фазовом сдвиге 180° — логический ноль.
Состояние каждого передаваемого разряда определяется по отношению к предыдущему разряду. Если фаза сигнала не меняется, это означает, что передаваемый сигнал находится постоянно в одном из логических состояний — 0 или 1.
Если фаза изменилась на 180°, это значит, что состояние изменилось — с 0 на 1 или с 1 на 0.
Кодирование PSK легко реализовать с помощью микросхемы-синтезатора DDS. Большинство из них обладают отдельным регистром фазы, в который можно записать величину фазы. Эта величина прибавляется к фазе
несущей частоты без изменения значения частоты. Изменение значения регистра фазы
приводит к изменению фазы несущей частоты, таким образом, мы получаем сигнал с модуляцией PSK. Для тех случаев, где требуется
модуляция с высокой скоростью, имеется ИС
AD9834, в которой предусмотрены регистры,
куда можно заранее записать величину фазы
сигнала, а затем выбрать одно из двух значений фазы с помощью входа PSELECT, в результате чего мы получим требуемый сигнал
с фазовой модуляцией.
Более сложные виды модуляции PSK подразумевают 4 или 8 различных значений фазы. При этом скорость передачи данных гораздо выше, чем при простейшей двоичной
модуляции (BPSK). При модуляции с четырьмя значениями фазы (квадратурной модуляции, или QPSK) фаза может принимать значения 0°, +90°, –90° или 180°; таким образом, каждое значение фазы передает 2 бита информации. В микросхемах AD9830, AD9831,
AD9832 и AD9835 имеется четыре регистра фазы, позволяющих реализовать сложные схемы модуляции за счет выбора одного из четырех значений сдвига фазы.
Рис. 8. Синхронизация синтезаторов DDS