Увеличение частоты PWM по всем 6-ти пинам
- Войдите на сайт для отправки комментариев
Ср, 04/12/2019 - 15:37
Не нашёл ответа на форуме, в основном обсуждается разрядность PWM более 8 бит, задача иная нужно Шимить 6 пинов с увеличением частоты, можно с дискретностью позволяемой делителями Таймеров, разрядность 8 бит.
Реализуемо?
Да, кто ж не даёт-то? Если просто нужно (типа из звуковых частот уйти), так в статье про разрядность у меня и таблицы частот есть. Если же хочется гибко управлять частотой, так там же таймеры в три строки конфигурируются (см. #12 в той же статье). Да и вроде библиотека была типа PWM.h
Да, кто ж не даёт-то? Если просто нужно (типа из звуковых частот уйти), так в статье про разрядность у меня и таблицы частот есть. Если же хочется гибко управлять частотой, так там же таймеры в три строки конфигурируются (см. #12 в той же статье). Да и вроде библиотека была типа PWM.h
так читал я и даже про проблему 0 и 255 значения, мне надо синхронно, на всех шести пинах, именно частоту а не разрядность, по режиму FAST PWM получается для Таймера 2 использовать делители из ряда Таймера 0,1, по коду не понял )))
Так там же написано как частоту менять.
Насчёт синхронности раньше речи не было. Целиком синхронно? Или скважность может отличаться? Насколько синхронно? Какое расхождение допустимо?
Так там же написано как частоту менять.
Насчёт синхронности раньше речи не было. Целиком синхронно? Или скважность может отличаться? Насколько синхронно? Какое расхождение допустимо?
вообще-то показатель PWM разный, сейчас делаю очень просто, загружая в счетчики нужное вычисленное значение, расхождение в пределах времени исполнения кода весьма допустимо )))
Так настраиваю таймера:
Так загружаю нужным значением PWM
или хотя бы по четырём каналам )))
Ну, а в чём тогда проблема? Настраивайте все 6 так - в чём беда-то? Я думал Вам надо суперсинхронность, хотел с этим поэкспериментировать.
Ну, а в чём тогда проблема? Настраивайте все 6 так - в чём беда-то? Я думал Вам надо суперсинхронность, хотел с этим поэкспериментировать.
супер синхронность желательна (даже очень желательна) по двум каналам )))
А частоту ШИМ - просто загружая соответствующие предделители?
Конечно.
супер синхронность желательна (даже очень желательна) по двум каналам )))
А по двум каналам она всегда будет абсолютно синхронна, если каналы от одного таймера. Проблема заставить все таймеры синхронно работать.
супер синхронность желательна (даже очень желательна) по двум каналам )))
А по двум каналам она всегда будет абсолютно синхронна, если каналы от одного таймера. Проблема заставить все таймеры синхронно работать.
если есть возможность попробовать по четырём, буду признателен!!!
если есть возможность попробовать по четырём, буду признателен!!!
возьми СТМ-ку, там таймеры 4х канальные
если есть возможность попробовать по четырём, буду признателен!!!
возьми СТМ-ку, там таймеры 4х канальные
ограничен 328 чипом )))
Ну, я попробую, но не сейчас. Может, завтра.
Ну, я попробую, но не сейчас. Может, завтра.
мне абсолютно не срочно и по шиму, если можно 1 килогерц и 7-8 килогерц
Только учти, что изменение частоты ШИМ на пинах связанных с Timer0 приведет к неправильной работе delay и millis. Если какие из используемых библиотек завязаны на это, то придется их править.
Только учти, что изменение частоты ШИМ на пинах связанных с Timer0 приведет к неправильной работе delay и millis. Если какие из используемых библиотек завязаны на это, то придется их править.
да я посматриваю в сторону atmega328pb, на третий таймер перевести, сериальный порт мне не нужен
Ну, в общем, я не понял в чём у Вас затык.
Настраивается таймер на частоту PWM просто подбором нужного делителя.
При этом на двух каналах одного таймера о синхронизации думать не надо. У каналов одинаковая частота и ноль они проходят вместе, значит никакого фазового сдвига не будет.
Если нужно строго синхронизовать два (или все три) таймера, то можно их выключить (обесточить), настроить, не забыв прописать 0 (или любое, но одинаковое для всех таймеров) значение в регистр счётчика, а потом включить все одновременно одной командой процессора. Они дружно стартуют и никакого фазового сдвига между ними не будет.
Вот пример на приблизительно 1 кГц и приблизительно 8 кГц (для 8 кГц закомментируйте строку №1)
В меге есть специальные регистр, который даёт возможность синхронизировать сразу всё таймеры
Благодарю! Сегодня поэкспериментирую!
В меге есть специальные регистр, который даёт возможность синхронизировать сразу всё таймеры
О меге я думал, тем более, что там два процессора, на 32U4 реализовать разбор протокола обмена, а на самой меге всё остальное
OCR1A = 60 и пр. OCRnA - установка частоты.
О меге я думал
Видимо, dmax имел в виду ATmega, т.к. в 328 такое тоже есть - сейчас посмотрел. Не пробовал, но в даташите написано.
есть специальные регистр, который даёт возможность синхронизировать сразу всё таймеры
Спасибо, буду знать.
может скважности?
А, да... Сорри. Фокус с TOP в OCRxA - это при PWM с фазовой коррекцией. Там OCRxA определяет частоту, а OCRxB - скважность. Сегодня только всю голову изломал этим.
PS, ан нет - Fast PWM-у тоже можно сделать произвольный TOP и задавать частоту: https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM -> Fast PWM Mode with OCRA top. Што-то меня этот PWM запутал опять, надо пойти поспать.
всё получается
есть специальные регистр, который даёт возможность синхронизировать сразу всё таймеры
Спасибо, буду знать.
может имеет смысл в базу знаний по ШИМ на сайт добавить?
Может и имеет, но в принципе ... даташит надо внимательнее читать :)
Может и имеет, но в принципе ... даташит надо внимательнее читать :)
Там столько букв, столько букв, а чтобы разобраться и запомнилось, надо проверять на пробных скетчах...
раз пишут, что надо заворачивать, значит надо заворачивать )))
Может и имеет, но в принципе ... даташит надо внимательнее читать :)
Евгений Петрович, не сыпьте соль на рану, что поделать, если последний зачет по аглицкому, в далеком СССР, был сдан за красивый, старинный словарь из "Старой Книги", а когда понадобилось, тут уже, то дед Альцгеймер зайдет шашками подвигать, то бабушка Деменция, с пирожком, чайку попить.))))
Гугель, неправославный, иногда вроде помогает, но слабо.((((
Долго втыкал, чем в 16-битном таймере WGM mode 10 отличается от WGM mode 11. Так вот, если кому-то интересно, тестовый скетч (двухлучевой осциллограф поможет увидеть):
А если кратко, то:
1) Применяя ICR1 в качестве TOP мы можем использовать два канала (A, B) для PWM с разной скважностью на произвольной частоте.
2) Применяя OCR1A в качестве TOP мы можем получить один канал (B) для PWM на произвольной частоте и один (A) - для других нужд. А так же использовать таймер захвата - ICR1-то не занят.
Закину картинки для наглядности:
и шимим
Вот пример на приблизительно 1 кГц и приблизительно 8 кГц (для 8 кГц закомментируйте строку №1)
а вот с регистром PRR всё не так однозначно оказалось (((
В смысле? Что неоднозначно?
Видимо он обесточил ближайшую подстанцию этим регистром...
В смысле? Что неоднозначно?
да как-то исчезает ШИМ на пинах, подстанцию вроде не обесточивал )))
Ну, пример "от димакса" точно работает - я проверял говнокодом в лупе, прежде чем тиснуть в газету пост.
Да оба примера нормально работают, я оба проверял.
у меня тоже, я о PRR...
Да оба примера нормально работают, я оба проверял.
Если что-то может не заработать, у меня оно обязательно не заработает, вернули прибор, думал он неисправен, добавил в скетч мигание диодом, не мигает
У меня мигает на полгерца примерно
У меня мигает на полгерца примерно
а Ардуино какая? испытываю на нано
я жеж говорю, точнее DIMAX, если у ua6em что-то имеет теоретическую возможность не заработать, оно обязательно не заработает )))
я сначала грешным делом подумал, что мне осциллограф спалили, но тут что-то другое, разберусь, отпишу...
другой компьютер, другая нано (рободин), загрузчик не перешивался, если не запускать синхронно (закомментировать строки 68 и 76) шим есть, светодиод моргает раз в секунду где-то, снять комментарии - после заливки разовая короткая вспышка и всё, шима нет... ЧЯДНТ...пните в нужном направлении, что посмотреть, была мысль, что проблема в загрузчике, здесь же он не менялся...
В смысле?
Пепелац улетел.... А далее никаких "в смысле" не существует.
"не могу понять" (c) Шейнин, записки следователя...
Если остановку таймеров выносить после их иницализации, то код работает, если до - нет
IDE 1.8.9 arduino nano ROBODYN
Долго втыкал, чем в 16-битном таймере WGM mode 10 отличается от WGM mode 11. Так вот, если кому-то интересно, тестовый скетч (двухлучевой осциллограф поможет увидеть):
А если кратко, то:
1) Применяя ICR1 в качестве TOP мы можем использовать два канала (A, B) для PWM с разной скважностью на произвольной частоте.
2) Применяя OCR1A в качестве TOP мы можем получить один канал (B) для PWM на произвольной частоте и один (A) - для других нужд. А так же использовать таймер захвата - ICR1-то не занят.
кстати увидел у DIMAX (я о строке 43)