ШИМ, мёртвая зона
- Войдите на сайт для отправки комментариев
Пт, 16/01/2015 - 17:09
Использую такой код:
int _gtv1 = 192; int _gtv2 = 192; void setup() { } void loop() { analogWrite(5, _gtv1); analogWrite(6, _gtv2); }
каким способом можно выполнить задержку (мёртвую зону) второго шим, что б было как на 2 графике?
я так понимаю в среду ардуино можно делать вставки на др языках программирования
на русском напишите что вы хотите. что значит мертвая зона?
ммм... чтоб 2 шим шел с отставанием от 1 на определённое время. сделать таким способом сдвиг фазы на n%
нужно чтобы это именно ШИМ был или же вам нужно сформировать два сигнала какой-то предопределенной формы?
если нужен ШИМ то как вариант первый ШИМ оставить апаратным, настроить прерывание по совпадению (оно срабатывает тогда когда выход ШИМ меняете статус) и в этом прерывании програмно управлять вторым ШИМ
нужен именно два шим с сдвигом на 180% или как то организовать пропуск через 1 - на пример чтоб получилось так:
зачем, что за устройство ? и какая частота ШИМ нужна ?
31 кГц, пока только эксперементирую, приблуда для замены управляющих микросхем в Импульсных Бп
Мутите мостовое включение и надо, чтобы плечи не были открыты одновременно?:)
вот это зря. совсем зря. такие вещи лучше заменять на аналогичные как минимум. а то горелые дорожки и детали за долю секунды как нефиг делать
tl494 посмотри
скважность вы собираетесь менять? в каких пределах надо менять скважность?
можно инвертировать второй канал и выставлять ему скважность со сдвигом
скважность, а точнее заполнение шим буду менять от 0 до 49% на обоих чтоб не были открыты одновременно
"можно инвертировать второй канал и выставлять ему скважность со сдвигом", как это попроще выполнить?
а можно ли просто 2 шим запустить со сдвигом на 1 таймере ?
выход ШИМ_1 на пин 2 или 3 , по rising определить длительность HIGH ШИМ_1
на любом пине формировать HIGH ШИМ_2 с задержкой 16129 микросек от rising HIGH ШИМ_1 на длительность HIGH ШИМ_1
или - выход ШИМ_1 на пин 2 И 3 , один обработчик по rising , второй по fall - в каждом обработчике задержка на 16 миллисек и установка пина ШИМ_2 в HIGH и LOW
но лучше задействовать счётчик под ШИМ_2
У мега328 три таймера у каждого по два канала ШИМ. Но все три таймера тактируются от одного генератора, так что если их настраивать на одну частоту то сдвига не получится. А чем не устраивает вариант с инвертированием? Получится два канала в противофазе, достаточно выставлять скважность у второго канала со сдвигом
единственно инверсию придется самому настроить в рабочих регистрах, ардуиновские библиотеки это не умеют. Выберите таймер, один егл канал без инверсии настроить, второй с инверсией
У мега328 три таймера у каждого по два канала ШИМ. Но все три таймера тактируются от одного генератора, так что если их настраивать на одну частоту то сдвига не получится. А чем не устраивает вариант с инвертированием? Получится два канала в противофазе, достаточно выставлять скважность у второго канала со сдвигом
единственно инверсию придется самому настроить в рабочих регистрах, ардуиновские библиотеки это не умеют. Выберите таймер, один егл канал без инверсии настроить, второй с инверсией
фронты будут без просвета, и сдвиг на 180 будет только при Q=50, в остальных случаях T HIGH ШИМ_2 не будет соответствовать T HIGH ШИМ_1
OCn1 и /OCn2 - скважность 10 и 90.... а как они будут синхронизированы ?
нарыл в просторах интернета на англоязычном сайте:
Для реализации этой идеи был выбран 8-битный микроконтроллер фирмы Atmel, позволяющий наиболее просто организовать 4 согласованных канала широтно-импульсной модуляции (ШИМ). Каждый канал ШИМ управляет яркостью одной из 4 цифр. В микроконтроллере имеются 2 таймера, каждый формирующий по 2 канала ШИМ. Принцип формирования 4-канальной согласованной ШИМ показан на рисунках.
Наклонные линии на верхних диаграммах представляют значения счетчиков таймеров. Горизонтальные штрих-пунктирные линии соответствуют порогам срабатывания цифровых компараторов-формирователей ШИМ, устанавливаемым в регистрах OCRxA и OCRxB таймеров. Если эти пороги установить симметрично относительно среднего значения счетчика таймера (см. левый рисунок), то скважность импульсов ШИМ в обоих каналах таймера (а, значит и яркость соответствующих цифр) получится одинаковой. Для исключения временного пересечения импульсов ШИМ значение нижнего порога не должно превосходить 127, а значение верхнего порога быть не менее 128 (и не более 255). Таким образом получается ШИМ с 7-битным разрешением.
как бы это организовать а меге? Там есть и готовый код, но я в нем ничего не понял так как на програмист http://mcs.uwsuper.edu/sb/Electronics/HugeLED/
Пишут: "Реализовал на одном 16 битном таймере. Выбрал ШИМ с фазовой корекцией, вершину счета задал в регистре ICR1 скважность регистрами OCR1A, OCR1B."
а разве неинвертированный шим по одному каналу до 127 и инвертировнный от 128 до 255 не будет то что нужно?
просто в первом 0>>127 это увеличение шим, а во втором будет 255>>128 увеличение (просто использовал такие значки. это не сдвиг)
левая картинка в #16 - то что нужно, вот только один счётчик может выдать или прямую или инверсную ШИМ....
можно так - выделить под это один из счётчиков, настроить режим счёта как на той картинке, в каждом периоде перезаписывать пороги срабатывания цифровых компараторов-формирователей ( формирователь не нужен ! ) , по срабатыванию совпадения формировать на 2-ух других пинах псевдоШИМ...
пороги должны быть симметричны относительно 32767 для ST_16 и 128 для ST_16для ST_8
фронты будут без просвета, и сдвиг на 180 будет только при Q=50, в остальных случаях T HIGH ШИМ_2 не будет соответствовать T HIGH ШИМ_1
если скважность задать с просветом, будут с просветом. У каждого канала своя скважность
фронты будут без просвета, и сдвиг на 180 будет только при Q=50, в остальных случаях T HIGH ШИМ_2 не будет соответствовать T HIGH ШИМ_1
если скважность задать с просветом, конец первого и начало второго будут с просветом. У каждого канала своя скважность. Между концом второго и началом первого просвета не будет, но ТС про эту часть никаких требований не высказывал. Он явно что-то скрывает) Вообще не очень благодарное задание пытаться помочь человеку который скрывает конечную цель. Это как помогать ему выйти из темной комнаты когда ты сам не знаешь где выход
Я ни чего не скрываю =). Цель - выполнить на меге функции tl494 =), иметь возможность менять скважность и частоту ~10кГц, ~32кГц
Заранее Спасибо За Помощь)
не получится на одном счётчике разную скважность и чтобы ещё сдвиг на 180 был :(
ТС нужно две последовательности импульсов F=31kHz , скважность 1....49 - и самое главное - чтобы хиги первого канала были посередине ловов второго , и наоборот....
ТС , так ?
в ЧипеДипе она - 33 р. - стоит ли заморачивацца ? или дело прЫнцЫпа ?
Почти :
F=31kHz желательна, но подойдёт и в 2 раза меньше
заполнение шим 0-127
и самое главное - чтобы хиги первого канала были посередине ловов второго , и наоборот.... да)
SU-27-16 дело принципа) временно сделал на "ка3511" , но хочу чтоб это делал контроллер. Тут пол форума а то и более таких). А то уже б давно купил бы готовое изделие и не мучал мозг себе и окружающим)
настроить ST_2 в режиме коррекция фазы на нужную частоту
установить порог 16, пин_8 поднять, старт ST_2
совпадение - пин_8 снять, установить порог 256-16
совпадение - пин_9 поднять
совпадение - пин_9 снять
установить порог 16
совпадение - пин_8 поднять ( проехали состояние ST_2=0 )
........второй период
совпадение - пин_8 снять, установить порог 256-16
...........
частота - предделителем счётчика ST_2 , скважность - уровнями порогов
Спс , пошел книжки читать)
OCR0A - порог для канала_1 , OCR0В - порог для канала_2 - чёбы не перезаписывать в каждом периоде уровни....
OCR0A - по совпадению управляет пин_8 , OCR0В - по совпадению управляет пин_9
всё гораздо проще..... тока счётчик настроить....
я могу ошибаться :) , проверяйте !
а регистры лучше загружать так - TIMSK2 = 1<<TOIE2;
строка #24 COM2B1:COMBA0=11 >>>>>>>>>>> COM2B1:COM2B0=11 :(
немогу пока проверить, посылки в пути, а мега с осцилографом есть только на работе(
но заранее Спасибо за помощь=)
ещё косяк :(
##32 , 38 - OCR2B = 128 - i; >>>>>>> OCR2B = 128 - i;OCR2B = 255 - i;
#37 в посте #30 OCR2B = 128 - i; >>>>>>>>> OCR2B = 255 - i;
:(
а разве неинвертированный шим по одному каналу до 127 и инвертировнный от 128 до 255 не будет то что нужно?
просто в первом 0>>127 это увеличение шим, а во втором будет 255>>128 увеличение (просто использовал такие значки. это не сдвиг)
да, именно так :) , спасибо !