Страница 1 из 1
Регулировка частоты.
Добавлено: Вт мар 27, 2012 23:14:22
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
Может кто сталкивался с такой задачей?Или просто есть опыт по регулировке частоты?Подскажите... Поделитесь опытом... Заранее огромное спасибо!
Re: Регулировка частоты.
Добавлено: Вт мар 27, 2012 23:30:16
goldenfrog
Если есть три канала ШИМ, то синхронизировать их вполне можно, быстро вполне, можно почтроить дело на переменных векторах. Сразу оговорюсь, что в PIC машинах я не очень образорван до уровня минимальной профессии, на авр это реализовать не сложно.
Если хотите подробностей - прошу в личные сообщения, если тему решить нужно и она действиетльно важна для Вас а не просто поспрашивать.
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 01:05:58
Shapa
Если я вас правильно понял. И если рассматривать работу без регулировки скважности, то:
- описываем алгоритм для частоты в 1Кгц
- добавляем туда перменную задержку, значение которой будет определять частоту
Ваш алгоритм примерно будет выглядеть так:
1) везде выдаём 0, спим до момента когда надо поднять красный. поднимем красный
2) ждём пока надо поднять зелёный. поднимаем зелный.
3) ждём до момента пока надо опустить красный
и т.д.
остаётся только высчитать перменную составляющую задержки. Не заморачивайтесь с дробными часлами, для 8битников это смерти подобно. Представтье себе что вы свой флоат умножили на 1000 и привели к инту. Вот с этим интом и работайте
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 01:49:31
goldenfrog
Совершенно верно, дроби не нужны и близко для этой реализации. Всё делается на целочисленной арифметике разрядностью 16 бит, секрет в коэффициенте при времени задержки.
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 15:22:47
Андрей.
Здравствыйте, уважаемые коты. Как-то набрел на сайт
http://www.gaw.ru/html.cgi/txt/app/micr ... AVR495.htm
Там рассказывается о векторном ШИМ (для любимого АД). В конце приводится какая-то программа.
Но вот беда: только неделю назад начал курить книжечку А.В. Фрунзе "Микроконтроллеры?...". Ну вы понимаете. Мож кто разберётся что там в програмке написано, можно с нее чего-нибуди почерпнуть? Что она отслеживает и что куда выдает?
Может и автору темы пригодится.
Пардонте, что слегка не в ту степь. Просто есть 3ф АД с кз ротором на 3кВт, а лимит сети 1ф и 4кВА

Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 16:02:56
Alexeyslav
А программный ШИМ не рассматривали? Такты задавать при помощи прерывания от таймера, меняя величину сравнения при которой возникает прерывание от таймера и его обнуление можно регулировать скорость выполнения алгоритма, и следовательно его частоту.
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 16:22:28
Андрей.
Так, с частотой чуть прояснилось, а как быть с напряжением? Требуется для начала U/f = const. Как мне кажется вариант один: создаём штук 65 таблиц sin(t) для каждай f с учетом соотношения U/f = const, и выбирая ту/иную таблицу соответствующе уменьшаем/увеличиваем скорость выполнения алгоритма. Может я ошибаюсь. Сколько искал не смог найти действующего образца частотного преобразователя. Взглянуть бы на схемку и програмку, да хоть понюхать бы.
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 21:08:08
Alexeyslav
Эм... не знаю как насчет контроллеров, но посмотри пример прямого цифрового синтеза. Таблица синуса там используется одна, а частота задается числом подаваемым на сумматор, по сигналу с опорного генератора происходит суммирование. Чем чаще суммируем и чем больше число - тем быстрее перебирается вся таблица.
http://rf.atnn.ru/s6/DDS_1.htm - посмотри по ссылке "Рис. 4. Прямой цифровой синтезатор на основе накапливающего сумматора". Примерно такой алгоритм реализовать программно, а выход для каждой фазы брать из таблицы синуса со смещением.
И делов-то.
А дальше, подавать вычисленные значения на 3 канала ШИМ и радоваться жизни.
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 23:07:59
Андрей.
Благодарю за ссылочку. Завтра попытаюсь обмозговать.
Re: Регулировка частоты.
Добавлено: Ср мар 28, 2012 23:51:02
Aaantonnn15
Спасибо всем кто откликнулся.
остаётся только высчитать перменную составляющую задержки. Не заморачивайтесь с дробными часлами, для 8битников это смерти подобно. Представтье себе что вы свой флоат умножили на 1000 и привели к инту. Вот с этим интом и работайте
Я сразу расчитывал на 16-битные числа. Пробовал и такой алгоритм построить: делить не 1/f, а 1000/f, а после полученное число умножить на необходимый коэффициент. Как я понимаю, инт - это округление до целого числа? Так вот. Взял калькулятор в руки 1000/1000=1 вроде все ок! Бери теперь это число и умножай его на нужный коэффициент. Далее попробовал 1000/800=1,25 округлил до 1 и выходит, что задержка будет одинаковая, как для частоты в 1кГц, так и для частоты в 800Гц. А это не очень хорошо.

Может я неправ?Поправьте...
Re: Регулировка частоты.
Добавлено: Чт мар 29, 2012 00:42:24
Aaantonnn15
А программный ШИМ не рассматривали? Такты задавать при помощи прерывания от таймера, меняя величину сравнения при которой возникает прерывание от таймера и его обнуление можно регулировать скорость выполнения алгоритма, и следовательно его частоту.
Насколько понимаю вы предлагаете сделать что-то похожее на это:основной сигнал пусть будет красный первый импульс пропустим, начнем со второго.
1. Запускаем один таймер и ждем когда он сработает;
2. В обработчике прерываний запускаем второй таймер, который при срабатывании установит лог 0 на зеленом
сигнале;
3.После срабатывания второго таймера, записываем в него новое значение и ждем совпадения с синим сигналом. после всего ждем срабатывание первого таймера и записываем лог0 на красный сигнал, запускаем снова первый таймер, но второй таймер не трогаем, ждем когда первый таймер снова сработает и т.д.
Я правильно понял?
Re: Регулировка частоты.
Добавлено: Чт мар 29, 2012 07:21:45
Alexeyslav
Нет. Просто по прерыванию таймера меняем фазу сигнала на выходе.
Чаще идут прерывания - чаще меняется фаза и больше частота сигнала на выходе.
Re: Регулировка частоты.
Добавлено: Чт мар 29, 2012 23:19:31
Aaantonnn15
Нет. Просто по прерыванию таймера меняем фазу сигнала на выходе.
Чаще идут прерывания - чаще меняется фаза и больше частота сигнала на выходе.
Это относиться к DDS генератору? То есть мне нужно еще составить таблицу выходного сигнала. В моем случае это меандр. И в зависимости от фазы считывать определенные значения таблицы. Не могу только понять, как расчитывается коэффициент накопления фазы. Может подскажите?
Re: Регулировка частоты.
Добавлено: Чт мар 29, 2012 23:36:42
Alexeyslav
А там в статье нет формулы? Ну вот смотри, если ты ставишь коэфициент равный единице, то сумматор фактически превращается в счетчик, период будет равен опорной частоте деленной на количество импульсов до переполнения. Если сумматор 16-битный, то переполнение произойдет через 65536 тактов. если выставить 2, очевидно сумматор будет считать ровно в 2 раза быстрее ... и т.д.
Коэфициент по сути является дополнительным кодом до величины периода.
а период равен 1/частота...
Для меандра никакой таблицы не нужно, достаточно взять последний разряд сумматора... или подсчитывать переполнения и делить их счетным триггером - на выходе получишь чистый меандр с частотой в 2 раза меньше частоты переполнения сумматора.
Re: Регулировка частоты.
Добавлено: Пт мар 30, 2012 12:33:59
goldenfrog
Вроде бы удалось человеку разъяснить, а как у него всё получится - может расскажет как надо на самом деле. Успеха начинающему разработчику.
Re: Регулировка частоты.
Добавлено: Сб мар 31, 2012 13:15:22
Aaantonnn15
Коэфициент по сути является дополнительным кодом до величины периода.
а период равен 1/частота...
Спасибо за разъяснение. Формулу нашел. Как я понял код частоты - это и есть коэффициент. При оперативном изменении частоты, этот код частоты и надо менять. Так? Формула для расчета выходной частоты: Fout=M*Fclk/2n. Пробовал расчитывать для выходной частоты 50 Гц. при опорной частоте в 100кГц. Получается 32,768, сумматор 16-битный. Вылезают все теже числа с плавающей запятой. Может я не прав...
Re: Регулировка частоты.
Добавлено: Сб мар 31, 2012 18:48:31
Alexeyslav
Числа там только целые. ровное значение частоты не всегда возможно установить, поэтому выбирается ближайшая. Если ошибка оказывается недопустимо большой - нужно выбирать опорную частоту больше.
При ваших параметрах М = 65 на выходе получается частота равная 49.85 Гц.
при М = 66 частота равна 50.35Гц
Чтобы увеличить точность установки частоты необходимо увеличить разрядность сумматора.
У вас получается шаг установки частоты примерно 5 порядков на весь диапазон, или примерно 0.76Гц - его легко посчитать при М = 1.
Увеличив разрядность сумматора хотябы на 4 бита, уменьшаем шаг в 16 раз и т.д.
Уменьшив тактовую частоту до 10кГц, имеем шаг по частоте 0.076Гц и т.д. Но при этом уменьшается максимальная частота.