Регулировка частоты.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Aaantonnn15
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт авг 20, 2010 18:31:05
Контактная информация:

Регулировка частоты.

Сообщение Aaantonnn15 »

Привет всем! Помогите кто может... Разрабатываю алгоритм управления тремя светодиодами(в дальнейшем это будут оптопары). График сигналов приложу. Все три сигналы между собою свызаны небольшой задержкой на включение/выключение. Величина задержки пока роли не играет. Нужно регулировать частоту от 50 Гц до 1 кГц с точностью в 1Гц, так чтоб связь между сигналами не терялась. Как добиться зависимости между сигналами я разобрался, а как регулировать частоту не могу разобраться. Пишу на асме для пиков. В дальнейшем собираюсь добавить еще и регулировку скважности.

1. шим сразу отпал, так как не представляю как синхронизировать между собою эти три сигнала.
2. табличное чтение - высокое быстродействие, но очень большие затраты на память ROM. Если прописывать на каждый герц. Да и еще одного байта мало на константу, нужно минимум два. К примеру 1/50Гц = 0.02 сек. При кварце в 4 МГц нужно два байта для записи паузы в 0,02с. в один запишем 79, в другой 253. Вот и выходит не одна таблица, а две.
3. пытался разобраться с инструкцией AN575 IEEE 754 Compliant Floating Point Routines в ней описаны процедуры с плавающей запятой, но ничего не вышло... хотел с их помощью в рабочей программе вычислять период по формуле = 1/f.

http://www.microchip.com/stellent/idcpl ... e=en010961 - ссылка на инструкцию AN575

Может кто сталкивался с такой задачей?Или просто есть опыт по регулировке частоты?Подскажите... Поделитесь опытом... Заранее огромное спасибо!
Вложения
График.JPG
График сигналов
(30.57 КБ) 599 скачиваний
Реклама
goldenfrog
Встал на лапы
Сообщения: 113
Зарегистрирован: Вт янв 17, 2012 17:32:10
Откуда: СССР, левый берег Днепра

Re: Регулировка частоты.

Сообщение goldenfrog »

Если есть три канала ШИМ, то синхронизировать их вполне можно, быстро вполне, можно почтроить дело на переменных векторах. Сразу оговорюсь, что в PIC машинах я не очень образорван до уровня минимальной профессии, на авр это реализовать не сложно.
Если хотите подробностей - прошу в личные сообщения, если тему решить нужно и она действиетльно важна для Вас а не просто поспрашивать.
Реклама
Аватара пользователя
Shapa
Встал на лапы
Сообщения: 127
Зарегистрирован: Пт июн 20, 2008 09:38:05
Откуда: Харьков
Контактная информация:

Re: Регулировка частоты.

Сообщение Shapa »

Если я вас правильно понял. И если рассматривать работу без регулировки скважности, то:
- описываем алгоритм для частоты в 1Кгц
- добавляем туда перменную задержку, значение которой будет определять частоту

Ваш алгоритм примерно будет выглядеть так:
1) везде выдаём 0, спим до момента когда надо поднять красный. поднимем красный
2) ждём пока надо поднять зелёный. поднимаем зелный.
3) ждём до момента пока надо опустить красный
и т.д.
остаётся только высчитать перменную составляющую задержки. Не заморачивайтесь с дробными часлами, для 8битников это смерти подобно. Представтье себе что вы свой флоат умножили на 1000 и привели к инту. Вот с этим интом и работайте
goldenfrog
Встал на лапы
Сообщения: 113
Зарегистрирован: Вт янв 17, 2012 17:32:10
Откуда: СССР, левый берег Днепра

Re: Регулировка частоты.

Сообщение goldenfrog »

Совершенно верно, дроби не нужны и близко для этой реализации. Всё делается на целочисленной арифметике разрядностью 16 бит, секрет в коэффициенте при времени задержки.
Реклама
Эиком - электронные компоненты и радиодетали
Андрей.
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср мар 28, 2012 14:40:15
Откуда: "Млечный путь" дальше не помню

Re: Регулировка частоты.

Сообщение Андрей. »

Здравствыйте, уважаемые коты. Как-то набрел на сайт
http://www.gaw.ru/html.cgi/txt/app/micr ... AVR495.htm
Там рассказывается о векторном ШИМ (для любимого АД). В конце приводится какая-то программа.
Но вот беда: только неделю назад начал курить книжечку А.В. Фрунзе "Микроконтроллеры?...". Ну вы понимаете. Мож кто разберётся что там в програмке написано, можно с нее чего-нибуди почерпнуть? Что она отслеживает и что куда выдает?
Может и автору темы пригодится.
Пардонте, что слегка не в ту степь. Просто есть 3ф АД с кз ротором на 3кВт, а лимит сети 1ф и 4кВА :(
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Регулировка частоты.

Сообщение Alexeyslav »

А программный ШИМ не рассматривали? Такты задавать при помощи прерывания от таймера, меняя величину сравнения при которой возникает прерывание от таймера и его обнуление можно регулировать скорость выполнения алгоритма, и следовательно его частоту.
Реклама
Андрей.
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср мар 28, 2012 14:40:15
Откуда: "Млечный путь" дальше не помню

Re: Регулировка частоты.

Сообщение Андрей. »

Так, с частотой чуть прояснилось, а как быть с напряжением? Требуется для начала U/f = const. Как мне кажется вариант один: создаём штук 65 таблиц sin(t) для каждай f с учетом соотношения U/f = const, и выбирая ту/иную таблицу соответствующе уменьшаем/увеличиваем скорость выполнения алгоритма. Может я ошибаюсь. Сколько искал не смог найти действующего образца частотного преобразователя. Взглянуть бы на схемку и програмку, да хоть понюхать бы.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Регулировка частоты.

Сообщение Alexeyslav »

Эм... не знаю как насчет контроллеров, но посмотри пример прямого цифрового синтеза. Таблица синуса там используется одна, а частота задается числом подаваемым на сумматор, по сигналу с опорного генератора происходит суммирование. Чем чаще суммируем и чем больше число - тем быстрее перебирается вся таблица.

http://rf.atnn.ru/s6/DDS_1.htm - посмотри по ссылке "Рис. 4. Прямой цифровой синтезатор на основе накапливающего сумматора". Примерно такой алгоритм реализовать программно, а выход для каждой фазы брать из таблицы синуса со смещением.
И делов-то.

А дальше, подавать вычисленные значения на 3 канала ШИМ и радоваться жизни.
Андрей.
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср мар 28, 2012 14:40:15
Откуда: "Млечный путь" дальше не помню

Re: Регулировка частоты.

Сообщение Андрей. »

Благодарю за ссылочку. Завтра попытаюсь обмозговать.
Аватара пользователя
Aaantonnn15
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт авг 20, 2010 18:31:05
Контактная информация:

Re: Регулировка частоты.

Сообщение Aaantonnn15 »

Спасибо всем кто откликнулся.
остаётся только высчитать перменную составляющую задержки. Не заморачивайтесь с дробными часлами, для 8битников это смерти подобно. Представтье себе что вы свой флоат умножили на 1000 и привели к инту. Вот с этим интом и работайте
Я сразу расчитывал на 16-битные числа. Пробовал и такой алгоритм построить: делить не 1/f, а 1000/f, а после полученное число умножить на необходимый коэффициент. Как я понимаю, инт - это округление до целого числа? Так вот. Взял калькулятор в руки 1000/1000=1 вроде все ок! Бери теперь это число и умножай его на нужный коэффициент. Далее попробовал 1000/800=1,25 округлил до 1 и выходит, что задержка будет одинаковая, как для частоты в 1кГц, так и для частоты в 800Гц. А это не очень хорошо. :( Может я неправ?Поправьте...
Аватара пользователя
Aaantonnn15
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт авг 20, 2010 18:31:05
Контактная информация:

Re: Регулировка частоты.

Сообщение Aaantonnn15 »

А программный ШИМ не рассматривали? Такты задавать при помощи прерывания от таймера, меняя величину сравнения при которой возникает прерывание от таймера и его обнуление можно регулировать скорость выполнения алгоритма, и следовательно его частоту.


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

1. Запускаем один таймер и ждем когда он сработает;

2. В обработчике прерываний запускаем второй таймер, который при срабатывании установит лог 0 на зеленом
сигнале;

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

Я правильно понял?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Регулировка частоты.

Сообщение Alexeyslav »

Нет. Просто по прерыванию таймера меняем фазу сигнала на выходе.

Чаще идут прерывания - чаще меняется фаза и больше частота сигнала на выходе.
Аватара пользователя
Aaantonnn15
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт авг 20, 2010 18:31:05
Контактная информация:

Re: Регулировка частоты.

Сообщение Aaantonnn15 »

Нет. Просто по прерыванию таймера меняем фазу сигнала на выходе.

Чаще идут прерывания - чаще меняется фаза и больше частота сигнала на выходе.

Это относиться к DDS генератору? То есть мне нужно еще составить таблицу выходного сигнала. В моем случае это меандр. И в зависимости от фазы считывать определенные значения таблицы. Не могу только понять, как расчитывается коэффициент накопления фазы. Может подскажите?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Регулировка частоты.

Сообщение Alexeyslav »

А там в статье нет формулы? Ну вот смотри, если ты ставишь коэфициент равный единице, то сумматор фактически превращается в счетчик, период будет равен опорной частоте деленной на количество импульсов до переполнения. Если сумматор 16-битный, то переполнение произойдет через 65536 тактов. если выставить 2, очевидно сумматор будет считать ровно в 2 раза быстрее ... и т.д.

Коэфициент по сути является дополнительным кодом до величины периода.
а период равен 1/частота...

Для меандра никакой таблицы не нужно, достаточно взять последний разряд сумматора... или подсчитывать переполнения и делить их счетным триггером - на выходе получишь чистый меандр с частотой в 2 раза меньше частоты переполнения сумматора.
goldenfrog
Встал на лапы
Сообщения: 113
Зарегистрирован: Вт янв 17, 2012 17:32:10
Откуда: СССР, левый берег Днепра

Re: Регулировка частоты.

Сообщение goldenfrog »

Вроде бы удалось человеку разъяснить, а как у него всё получится - может расскажет как надо на самом деле. Успеха начинающему разработчику.
Аватара пользователя
Aaantonnn15
Встал на лапы
Сообщения: 101
Зарегистрирован: Пт авг 20, 2010 18:31:05
Контактная информация:

Re: Регулировка частоты.

Сообщение Aaantonnn15 »

Коэфициент по сути является дополнительным кодом до величины периода.
а период равен 1/частота...

Спасибо за разъяснение. Формулу нашел. Как я понял код частоты - это и есть коэффициент. При оперативном изменении частоты, этот код частоты и надо менять. Так? Формула для расчета выходной частоты: Fout=M*Fclk/2n. Пробовал расчитывать для выходной частоты 50 Гц. при опорной частоте в 100кГц. Получается 32,768, сумматор 16-битный. Вылезают все теже числа с плавающей запятой. Может я не прав...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Регулировка частоты.

Сообщение Alexeyslav »

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

При ваших параметрах М = 65 на выходе получается частота равная 49.85 Гц.
при М = 66 частота равна 50.35Гц

Чтобы увеличить точность установки частоты необходимо увеличить разрядность сумматора.
У вас получается шаг установки частоты примерно 5 порядков на весь диапазон, или примерно 0.76Гц - его легко посчитать при М = 1.

Увеличив разрядность сумматора хотябы на 4 бита, уменьшаем шаг в 16 раз и т.д.

Уменьшив тактовую частоту до 10кГц, имеем шаг по частоте 0.076Гц и т.д. Но при этом уменьшается максимальная частота.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»