Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
1

Генератор произвольных частот на МК

09.01.2013, 22:00. Просмотров 6937. Ответов 26
Метки нет (Все метки)


какой алгоритм для генерации произвольной частоты на микроконтроллере? Подскажите, как добиться точности?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2013, 22:00
Ответы с готовыми решениями:

генератор частот с заданным шагом
всю голову издумал, как на меге сделать генератор частоты 1000Гц-2000Гц с шагом 1, 5 или 10Гц?

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

Генератор частот
Здравствуйте! Подскажите пожалуйста код, позволяющий воспроизводить любую заданную частоту в Гц,...

Генератор частот. Осталось немного доработать
Написал программу, которая генирирует звук заданной частоты на протяжение 8 секунд. Хочу, что бы он...

26
10214 / 6595 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
09.01.2013, 22:20 2
Лучший ответ Сообщение было отмечено как решение

Решение

...ввиду ограниченности железа (тактовой), совсем произвольной частоты вы не добьетесь.

И лучше использовать специализированные решения, если стоит задача именно качественной генерации и точности, к примеру, прямой синтез частоты, т.е. DDS (а управлять им уже с МК). Алгоритм подсмотреть можно у Analog Devices http://www.analog.com/library/... 8/dds.html. И не забывать про ФНЧ.
3
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 18:23  [ТС] 3
не могли бы для чайника объяснить, как вообще работать с DDS, что такое аккумулятор фазы?
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 19:07  [ТС] 5
т.е. синтезатор-это по сути готовая микросхема, например как si570 и т.д. ? передо мной стоит задача выработать математический алгоритм получения произвольный частоты, и потом его использовать. из железки есть только микроконтроллер C8051F341
0
10214 / 6595 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
11.01.2013, 19:13 6
Да, по сути готовая. Про точность и качество на выбранном вами МК забудьте.
0
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
11.01.2013, 21:04 7
Цитата Сообщение от Microsilabs Посмотреть сообщение
какой алгоритм для генерации произвольной частоты на микроконтроллере? Подскажите, как добиться точности?
Какой точности? О какой точности (в числовом выражении) речь?

С какой дискретностью, шагом надо изменять частоту? В каких пределах?

Что надо - синус, пила, прямоуг импульсы, скважность?
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 21:21  [ТС] 8
частоту мы задаем сами, желательно, чтоб генерировалось несколько Мгц. точность максимально возможная. есть выражение, Fout=Fclock/(2^16-reloadvalue), где reloadvalue - значение в регистрах периферийного устройства

Добавлено через 3 минуты
прямоугольные импульсы, насчет скважности не знаю
0
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
11.01.2013, 21:40 9
Формулу не понял,
напишите чему равна Fclock (это константа?), что такое 2^16, и reloadvalue в каких пределах меняется.

http://www.google.ru/#hl=ru&ne... 40&bih=753
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 22:12  [ТС] 10
Fclock это тактовая частота мк (48Мгц), а reloadvalue- его меняя, меняем выходную частоту(в моей предыдущей проге это значение регистра таймера).
но как я понял, надо эту формулу модифицировать. не уверен.
0
10214 / 6595 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
11.01.2013, 22:14 11
...таки не услышали какой вам шаг сетки-то нужен?
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 22:20  [ТС] 12
можно менять с шагом 0,5Мгц

в документе формула, про которую я говорил
0
Вложения
Тип файла: docx Документ Microsoft Word.docx (18.6 Кб, 18 просмотров)
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
11.01.2013, 22:30 13
Вы сами знаете что такое 2^16 ?

И сколько таких шагов по 500кГц, до какого значения?

reloadvalue меняется от и до скольки?
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 22:31  [ТС] 14
Fout= \frac{Fclock}{{2}^{16}-reloadvalue}
0
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
11.01.2013, 22:33 15
Цитата Сообщение от Microsilabs Посмотреть сообщение
Fout= \frac{Fclock}{{2}^{16}-reloadvalue}
Можешь в цифрах написать результат который нужен, несколько результатов, с шагом?
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
11.01.2013, 22:38  [ТС] 16
моя тактовая 48Мгц, тогда с шагом 500кгц, до 24Мгц.
или генератор с матрицей, в котором есть значения нужных частот.
0
35 / 35 / 1
Регистрация: 07.02.2012
Сообщений: 79
12.01.2013, 16:13 17
Если я правильно понял ТС, у него есть мк с 16-ти разрядным таймером, управляя которым нужно получить сетку частот.
В формуле есть одна переменная – reloadvalue. Меняя её от 0 до 65535 (2^16 – 1) можем получить выходной сигнал с частотой от 0,732 кГц (48 / 65536) до 48 МГц (48 / 1).

Если коэффициент деления выбрать 96, выходная частота будет 48000 / 96 = 500 кГц.
При к=48, Fout = 48000 / 48 = 1000 кГц.

Т.е. K= Fclok / Fout, или reloadvalue = 65536 - Fclok / Fout.

Можно считать частоту по формуле используя целочисленную арифметику. Или заранее рассчитать и составить таблицу значений reloadvalue для всех нужных частот.

Но уже при попытке сформировать Fout =2500 кГц получится Fout=2625 кГц. Дальше, для всех значений, на которые 48000 нацело не делятся, ошибка будет расти.

ТС, приведите ваше задание полностью.
1
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
12.01.2013, 17:06  [ТС] 18
задание такое: привести алгоритм для генератора произвольной, т.е не кратной тактовой, частоты, без значительной потери точности. проблема заключается в отклонениях при частотах, не делящихся на тактовую.
0
10214 / 6595 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
12.01.2013, 17:52 19
TC, честно, меня удивляет ваше нежелание рассмотреть внутреннюю схемотехнику получения сетки частот в DDS по вышеприведенным материалам, и уже на основании этого экстраполировать кое-чего в МК, раз DDS на корню отметаете.
0
97 / 92 / 0
Регистрация: 24.04.2010
Сообщений: 275
12.01.2013, 18:34 20
Цитата Сообщение от Microsilabs Посмотреть сообщение
задание такое: привести алгоритм для генератора произвольной, т.е не кратной тактовой, частоты, без значительной потери точности. проблема заключается в отклонениях при частотах, не делящихся на тактовую.
Не зная какие нужны частоты (от и до) с каким шагом, привести алгоритм не получиться.

Как я понял, топикстартер сам не знает что от него хотят преподаватели.
Придется "шаманить".

Писать (вам) придется на асме с подгоном по точности с пом команд NOP. На си точность будет хуже. При тактовой в 48 мГц (я бы кварц на 50 мГц поставил, для простоты расчетов, контролер работать будет) один тактовый шаг будет 1/48мГц = 20,83 наносекунд. С таким шагом периодом можно регулировать частоту генератора. Но максим чатота на выходе с контроллера будет 48/2=24мГц, а минимальная любая.

Сами определитесь что надо.

Fout=Fclock/(2^16-reloadvalue) это формула не верна, нужно еще на 2 делить, т.к. эта формула для полупериода.
Плюс один такт уходит на поднятие и опускание выхода пина порта, плюс смотреть в даташиите на контролер есть ли задержки по тактам при достижении таймера нужного значения и поднятие-опускание пина.

А так если нужна сетка частот кратная 2-м и не более 24 мГц, то погрешности не будет, если учесть вышесказаное.

Добавлено через 16 минут
Вход-выход из прерывания тоже занимает некоторе кол-во тактов.
Поэтому Fout=Fclock/(2^16-reloadvalue) получить 24 мГц не получиться
Максим частота на выходе будет без исп прерываний, напр так для пика

START
BSF PORTB, 0
BCF PORTB, 0
BSF PORTB, 0
BCF PORTB, 0
.
.
.
BSF PORTB, 0
BCF PORTB, 0
GOTO START ;безусловный переход занимает 2 такта, и здесь при переходе будет погрешность затрачиваемая на переход.
Поэтому получить 24 мГц на выходе с макс точностью не получиться даже на ассемблере.

Для справки, у 10,12,16,18 пика 1 такт занимает 4 тика тактовой частоты. Но к вышеописаному коду это не относится.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2013, 18:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Построить гистограммы частот и относительных частот
Построить гистограммы частот и относительных частот распределения(в первом столбце указан частичный...

Заданы два множества, первое состоит из произвольных десяти чисел в диапазоне от 1 до 100, второе состоит из произвольных десяти чисел в диапазоне от
Заданы два множества, первое состоит из произвольных десяти чисел в диапазоне от 1 до 100, второе...

Делитель частот
Здравствуйте Уважаемые Форумчане. Помогите доработать схему "Делителя частоты на 11" и ее временные...

Фильтр частот
Покажите пожалуйста на пальцах как конденсатор может выполнят роль кроссовера?или ткните носом где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.