фазовый здвиг
- Войдите на сайт для отправки комментариев
Пнд, 21/01/2019 - 00:31
Приветствую!
Наткнулся здесь на такую программу
HardwareTimer pwmtimer3(3); HardwareTimer pwmtimer2(2); void setup() { pinMode(PA7, PWM); pwmtimer3.pause(); pwmtimer3.setPrescaleFactor(1); pwmtimer3.setOverflow(5760 - 1); pwmtimer3.setCompare(TIMER_CH2, 2880); pwmtimer3.refresh(); pwmtimer3.resume(); delay(50); //регулировка фазового сдвига pinMode(PA3, PWM); pwmtimer2.pause(); pwmtimer2.setPrescaleFactor(1); pwmtimer2.setOverflow(5760- 1); pwmtimer2.setCompare(TIMER_CH4, 2880); pwmtimer2.refresh(); pwmtimer2.resume(); } void loop() { }
но величина delay не вносить никакого сдвига фазы.
Подскажите пожалйста как сделать фазовый здвиг.
но величина delay не вносить никакого сдвига фазы.
интересно, как вы это проверяли? :)
И кстати, у вас величина задержки в десятки раз больше периода таймера, о каком "сдвиге" вы говорите? Фазовый сдвиг по определению меньше периода
проверял на осциллоскопе, вставлял разные значения в delay
проверял на осциллоскопе, вставлял разные значения в delay
Вы какую частоту таймера пытаетесь задать? а фазовый сдвиг ккой?
здесь 12,5 кГц
сдвиг любой, например 30 градусов
частота 12.5 КГц
сдвиг любой, например 30 градусов
Если у вас частота 12 КГц - то есть период порядка 80 микросекунд, так какой же сдвиг вы пытаетесь всести задержкой в 50 миллисекунд - в сотни раз больше периода?
Фазовый сдвиг проще всего делать задавая начальное значение счетчика на одном таймере 0, а на другом - сдвигом на нужную часть периода. Для значния переполнения 5760 и сдвига на 30 градусов это будет 5760*30/360 = 480
Спасибо 707, все как надо
кажется работает
Я вам написал как надо делать - если не поняли, лучше переспрашивайте. Ваш код в первом сообщении в принципе неверный, задержками точный сдвиг никогда не сделать.
Кроме того, вы в своей задержке не учитываете время на конфигурирование таймера , если уж делать задержку - то хотя бы сначала сконфигурируйте оба таймера, потом пустите один, а после задержки - второй.
Хотя повторяю, то как вы делаете - удаление гланд через Ж
Это не проблема, с чего то начинать надо
Это не проблема, с чего то начинать надо
перевожу - "разбираться лень, сойдет и так".
хреново заработает, попросите лучше b707 в коде показать
Вот сделал так, сдвиг фазы регулируется проблема = импульсы не стабильные, дрожат.
Я бы тоже дрожал если бы меня все время пинали. Зачем вы постоянно таймеры останавливаете/запускаете?
Вот сделал так, сдвиг фазы регулируется проблема = импульсы не стабильные, дрожат.
полную фигню сделали - вот и дрожат.
Во-первых, как Вам уже сказали - настройкам таймеров нечего делать в loop() - так работать не будет. Во-вторых - что за фигня у вас в строчках 38-42? Вы в курсе, в каких пределах должен лежать параметр функции analogWrite()?
По-моему, вы пытаетесь настроить таймерыЮ подбрасывая монетку. Орел - пишем одну строчку, решка - другую. Пока вы не прочитаете раздел даташита СТМ про таймеры - или хотя бы какую-нибудь хорошу статью в инете - и главное - НЕ РАЗБЕРЕТЕСЬ В СУТИ - нифига у вас не выйдет
И еще - если вы не слушаете ответов - зачем спрашивать? Пробуйте сами, не отнимайте у людей время.
Как сказал, встретил простую программу, проверяю будет ли она работать
Неудивительно - ответы не читаем.
Разбирайтесь. Начните с методички - что такое таймеры вообще и как работают. Потом переходите к таймерам СТМ32.
А тут с таким подходом писать не надо. Вам никто не поможет.
Как сказал, встретил простую программу, проверяю будет ли она работать
Все ли грибы съедобные? Съедобны все, только некоторые один раз )))
Так и с вашей программой!
Вам же сказали как надо делать, на таймерах, да и то не идеально (Джиттер), так как кварцевые резонаторы разного качества, а сейчас в ардуино нано вообще стараются поставить керамический, а на китайском клоне WAVGAT тоже керамика и по умолчанию от синтезатора PLL тактируется...
Таймеры - это тот минимум на чём надо реализовать, читайте
Что на тимерах можна это сделать это не новость.
Добавил noInterrupts() ;, стало намного лучше но в место 480 шагов (сообщение # 6) для 30 градусов этот сдиг происходит после 9 шагов .
Что на тимерах можна это сделать это не новость.
Посмотреть бы в кодах как это выглядит для arduino nano
Со сдвигом фазы не встретил
gena321, я давал отличный рабочий пример сдвига фаз прямоугольника для STM32, даже с картинкой.
Спасибо, читаю.
Вот и там наткнулся на эту программу, о чом говорил в самом начале, но про регулировку фазы там пока ничего не нашол.
Когда перенести эти генератора в сетап прямоугольники стабильные но фазу можнно менять только вручную.
Можно ли сделать обновление сетап при нажатии кнопки ?
gena321, там всего два настраиваемых парамера: ARR = (36E6/нужную_частоту_Гц)-1 ; CCR2 -отставание фазы второго сигнала в тактах мк -1
Но у Вас один тимэр = замечательно
А как менять ширину импульса?
gena321, в данном режиме никак. Нужно перенастраивать таймер в PWM режим.
Вот этот и есть в PWM, как их соединить ?
Гена, сколько Вам нужно повторить, что таймер НЕ НАДО НАСТРАИВАТЬ в основном цикле loop ? Вы понимаете, что loop у вас запускается сотни раз в секунду - и значит вы сотни раз в секунду заново настраиваете и перезапускаете таймер? - никакой устойчивой генерации сигнала в таком случае в принципе быть не может. В этой ветке вам уже три или четыре раза это сказали - и опять в скетче сообщения #31 у вас настройка в loop
(2) Configure TIM4 time base, configure TIM4-CH1 input capture, select TIM_TS_TI1FP1 input trigger, other configuration according to the routine, enable TIM4, open interrupt TIM_IT_CC1.
(3) Start the TIM2 sampling interval timing in the TIM4 interrupt routine.
(4) In the interrupt program of TIM2, sampling is started.
Вот этой строкой можна менять ширину импульсов, как ее добавить в dimax программу ?
Посмотреть, как это делается в исходнике библиотеки.
Нет, не поэтому. У dimax стабильно потому в его программе таймер настраивается ДО ИСПОЛЬЗОВАНИЯ.
Это не обязательно должно быть в сетапе - можно написать отдельную функцию или часть кода. Но этого нельзя вставлять в основной loop - как вы этого не поймете? Так работать не будет.
У меня такое чувство. что не только таймеры - вы и программировать-то начали с месяц назад. Не понимаете элементарных вещей. Может для начала с полгодика какие-нибудь проекты по проще освоить? Таймеры - не самое простое дело для новичка.
Гена - вы там выше спрашиваете "Как вызывать setup по кнопке?"
А нафига системный setup() вызывать? Создайте свою функцию setup_gena() , поместите в нее настройку таймера даи вызывайте по кнопке...
Гена - вы там выше спрашиваете "Как вызывать setup по кнопке?"
А нафига системный setup() вызывать? Создайте свою функцию setup_gena() , поместите в нее настройку таймера даи вызывайте по кнопке...
Примерно так?:
Я, честно, на память вот так вот не могу все эти параметры выставить, а искать в Гугле - это вы и сами можете :)
таймер перед настройкой надо остановить, тут этого нет
pinMode тут явно лишние, их в основной setup() надо.
и с параметрами функции вы что-то намудрили
Спасибо Всем за советы, пригодилось бы больше примеров как в сообщении #41
Гена - вы там выше спрашиваете "Как вызывать setup по кнопке?"
А нафига системный setup() вызывать? Создайте свою функцию setup_gena() , поместите в нее настройку таймера даи вызывайте по кнопке...
Примерно так?:
Месье в детстве изучал "отрыжку Вирта" - Паскаль? ;)))))
В нормальном ЯП так не пишут. Гы!
Месье в детстве изучал "отрыжку Вирта" - Паскаль? ;)))))
В нормальном ЯП так не пишут. Гы!
Ты пальцем покажи... )))
Паскаль не знаю, от слова совсем, но примеры из книги адаптировал и применял в ЯЗЫКЕ Инфо-Бухгалтер при работе с базами данных, с Ребусом, Дибэйсом, фокспро - знаком ))) А лучшая программа всех времён и народов для работы с базами данных - "Легко и Просто"? Не согласен???? )))
Вот нашел такую программу
Там есть функция
похожая до этих двух в месте - ширина импульсов
можно ли это использовать в программе dimax ?
помню что dimax сказал в #33, но может, все-таки можно?
Один канал сдвигать, второй менять ширину .