Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 20.02.2010, 01:33  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Регулировка частоты на контроллере. Спектрометр

Задача: формировать на любом порту контроллера сигнал определенной частоты с точностью 0,01Гц и с шагом 1Гц от 1Гц до 50КГц
Пусть будет мега16/16Mhz

как оптимально обеспечить такие условия?
Реклама:

Последний раз редактировалось spballiance; 20.02.2010 в 17:15.
spballiance вне форума  
Непрочитано 20.02.2010, 01:44  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

Ну почти для Вас написано
http://telesys.ru/electronics/projects.php?do=p035
kison вне форума  
Непрочитано 20.02.2010, 02:01  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

это я уже читал...
автор обошел вопрос генерации частоты, уделив время формированию синуса на ЦАП.

Я пробовал прикинуть через инициализацию Т0 и установку начального значения таймера - мне не очень нравится точность
spballiance вне форума  
Непрочитано 20.02.2010, 02:36  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

Сообщение от spballiance Посмотреть сообщение
автор обошел вопрос генерации частоты, уделив время формированию синуса на ЦАП.
Вообще то метод DDS там расписан полностью.
Но если хотите берите другой проект за основу - http://www.myplace.nu/avr/minidds/index.htm
Здесь частота выше и ниже точность, но все это зависит от параметров алгоритма.
А у Ридико точность частоты в 0,01Гц обеспечивается. Несмотря на то, что Вам там что то не нравится Особенно если учесть что:

Сообщение от spballiance Посмотреть сообщение
Я пробовал прикинуть через инициализацию Т0 и установку начального значения таймера
Там таймер Т0 вообще не задействован.
kison вне форума  
Непрочитано 20.02.2010, 12:54  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

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

иными словами: можно воспользоваться конечно библиотекой на Си delay_us и формировать интервалы с точностью до 1 мкс, но хотелось найти более изящный способ.

собираю спектрометр U,I(f), 2 каналами ацп снимаю характеристики, затем через фурье делаю нужные мне преобразования

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

Последний раз редактировалось spballiance; 20.02.2010 в 17:12.
spballiance вне форума  
Непрочитано 20.02.2010, 20:12  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

Сообщение от spballiance Посмотреть сообщение
но синус мне не нужен, и таблицу прямоугольников не хочу забивать в eeprom (ЦАП мне не нужен), мне нужно просто через правильные интервалы времени инвертировать пин какого-нибудь свободного порта. дальше я этим сигналом буду тактировать внешние вещи.
Таблица и не нужна, для формирования прямоугольника достаточно выводить в порт старший бит накопителя фазы. Но частота и правильные интервалы не одно и то же.
DDS выравнивает частоту за счет приличного джиттера. В Варианте Ридико с синусом это не проблема - ФНЧ поправит некрасивый сигнал до красивого синуса. С прямоугольником это не пройдет.

Сообщение от spballiance Посмотреть сообщение
иными словами: можно воспользоваться конечно библиотекой на Си delay_us и формировать интервалы с точностью до 1 мкс, но хотелось найти более изящный способ.
Ну прикиньте сами. 50000Гц это 20мкС. 49999.99Гц это 20,000396007840955250913968096568 мкС. Ближайшая частота, которую Вы сможете получить 21мкС =47619Гц. Т.е. шаг почти в 400Гц, а вовсе не 0,01. Если использовать таймер с аппаратным модулем сравнения, то при Fcpu=16000000 на 50000Гц это 320 тактов. 321 такт уже 49844, т.е. шаг 16Гц. Что тоже далеко не 0,01. А если нужен строго меандр, то ближайшее значение 322 такта = 49689Гц. Шаг уже ›300Гц.

Сообщение от spballiance Посмотреть сообщение
поэтому синус я хочу возложить на внешнюю цепь, тактируемую от контроллера
Так все же нужен синус? Поставьте отдельный контроллер с цапом и фильтрами именно на формирование частоты. Как у Ридико. А другим уже производите измерения. Это наименее затратный способ.
kison вне форума  
Непрочитано 20.02.2010, 21:02  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

kison
все верно...
сейчас обдумываю постановку задачи, в принципе можно уйти от размерности частоты и переделать формулу на круговая частота=pi/delay_us(длина полупериода)
таким образом мне нужно:
20 точек * 20 измерений в диапазоне 10-20Гц--›100 000-50 000 мкс шаг неважен, т.к. я по изменению частоты делаю расчеты

20 точек * 20 измерений в р-не 90-200Гц--›11 111-5 000 мкс шаг неважен

затем просканировать диапазон 400-2000Гц - 2500-500 мкс - вот тут мне нужна приличная точность и разница между 500 и 501мкс уже 4 Гц - не айс, а найденная частота мне нужна для определенных выводов

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

а можно алгоритм DDS или Си код? асм ковырять не очень наглядно, хотя в свое время писал для с51 только на нем, да по 60 страниц
в примере у него 8 регистров, суммирование с учетом переноса и Z, и т.д. и т.п. тяжеловато в голове разворачивать
да и писать я буду на си, т.к. мне нужны библиотеки sin, cos, atan, LCD, d18s20...
писать на асме не буду, слишком заморочно.


второй контроллер как генератор частоты можно поставить atiny со связью с основным контроллером через uart, но это удорожание схемы....меги16 должно хватить на все это
мне синус нужно будет делать очень хороший и с определенной амплитудой и Umin›8V & Umax‹18V, поэтому я буду использовать внешнюю схему
spballiance вне форума  
Непрочитано 20.02.2010, 21:31  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

Сообщение от spballiance Посмотреть сообщение
а можно алгоритм DDS
Алгоритм расписан в начале статьи Ридико. Там всего две переменных - накопитель фазы и приращение фазы. Первая определяет мгновенную фазу, а вторая приращение фазы между выборками. У Ридико исходник несколько перегружен, он экономил флеш и храни только четверть таблицы синуса. Если хранить полную таблицу, то программа становится очень простой. Если таблица из 256 значений, то старший байт мгновенной фазы - индекс в этой таблице.

Сообщение от spballiance Посмотреть сообщение
второй контроллер как генератор частоты можно поставить atiny со связью с основным контроллером через uart, но это удорожание схемы....меги16 должно хватить на все это
Меги на генерацию хватит, но вот загружена она будет процентов на 80. Хватит ли остатка на все остальное?

Сообщение от spballiance Посмотреть сообщение
поэтому я буду использовать внешнюю схему
Что Вы подразумеваете под "внешней схемой"? Внешний DDS или усилитель с фильтром? Второе в любом случае обязательно должно быть.
kison вне форума  
Непрочитано 20.02.2010, 22:22  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

Сообщение от kison Посмотреть сообщение
У Ридико исходник несколько перегружен, он экономил флеш и храни только четверть таблицы синуса.
он изящен, но не прозрачен


Цитата:
Меги на генерацию хватит, но вот загружена она будет процентов на 80. Хватит ли остатка на все остальное?
в режиме генерации она будет обрабатывать прерывания по АЦП и собирать массив данных. все преобразования будут потом, когда генерация отключена. но я еще пока не решил. нужно все взвесить.
возможно обработка АЦП будет слишком размазывать точность генерации


Цитата:
Что Вы подразумеваете под "внешней схемой"? Внешний DDS или усилитель с фильтром? Второе в любом случае обязательно должно быть.
второе.
spballiance вне форума  
Непрочитано 20.02.2010, 22:58  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Регулировка частоты на контроллере

Сообщение от spballiance Посмотреть сообщение
он изящен, но не прозрачен
Ну если отбросить фокусы с экономией флеши:
Код:
uint32_t AccFz; // мгновенная фаза
uint32_t AddFz; // приращение фазы

#define DAC PORTB

uint8_t SinTbl[256] = {xx,xx,xx... // таблица значений для синуса

ISR(TIMER1_COMPA_vect) // вектор по совпадению OCR1A таймера 1
{
 AccFz += AddFz;
 DAC = SinTbl[AccFz ›› 24]; 
}
Вот и весь алгоритм
kison вне форума  
Сказали "Спасибо" kison
spballiance (20.02.2010)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение частоты на ATmega8 lextorg Микроконтроллеры, АЦП, память и т.д 22 14.01.2010 14:48
Контроль частоты вращения Faxa Электроника - это просто 6 06.01.2010 23:43
Делитель частоты Gladkih TTL и CMOS логика 7 07.12.2009 18:31
Генератор частоты на Mega - как? code-by Микроконтроллеры, АЦП, память и т.д 9 10.11.2009 15:02


Часовой пояс GMT +4, время: 06:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot