PWM библиотека, ШИМ Ардуино
- Войдите на сайт для отправки комментариев
Чт, 23/07/2015 - 12:07
Скачал библиотеку подправил пример(сделал понятным), а проверить осцилогрофа нет, может кто проверит.
и заодно скажет будит ли данная библиотека конфликтовать с RCSwitch.h и Ethernet.h
Библиотека с примером: https://yadi.sk/d/K_hBK_Xii3cMn
Пример:
/* Пример для мега и Уно. позволяет менять диапазона частот: 1 Гц - 2 мГц (2000000 Гц) на 16-битных таймеров 31 Гц - 2 мГц (2000000 Гц) на 8-битных таймеров Стандартная частота ШИМ ардуины 500Гц. pwmWriteHR() может использоваться пины: на Uno (9 и 10) на Мега (2,3, 5, 6, 7, 8, 11, 12, 44, 45, и 46) */ #include <PWM.h> int led = 5; // пин, светодиод unsigned long frequency = 31; // частота 1 - 2000000 (Гц) int brightness = 125; // частота ШИМ (0-255) //или //word brightnessHR = 32768; // частота ШИМ (0-65536) is 32768. void setup(){ InitTimersSafe(); //инициализируем все таймеры, кроме 0, //SetPinFrequencySafe(led, frequency); //устанавливает частоту для указанного pin SetPinFrequency(led, frequency); //устанавливает частоту для указанного pin } void loop(){ pwmWrite(led, brightness); //0-255 используйте эту функцию вместо analogWrite //или //pwmWriteHR(led, brightnessHR); //0-65536 используйте эту функцию вместо analogWrite }
Неужели никто не пользовался данной библиотекой???
Наверное всех радует писк мотора и все пользуются штатной ШИМ?
Кто как меняет частоту ШИМ???
Denis_1704, прямым программированием регистров таймера :)
Denis_1704, прямым программированием регистров таймера :)
не реально сложно одновременно для нескольких шим в скетче где все без делайс
как определить примерную частоту без осцилографа??
как определить примерную частоту без осцилографа??
А вообще, недорогой осциллограф поможет ещё не раз, подумайте лучше о приобретении, правда - это хороший совет, поверьте.
Думаю Денису будет достаточно залить в свободную дуину скетч частотометра :)
dimax,
но ведь и осциллограф, пусть скромный и недорогой, никому ещё не мешал :) По себе сужу, иногда читаешь теорию - кажется, что понял, а устройство не работает, а когда посмотришь, что там творится - сразу доходит, что понял неправильно - на порядок легче понимать, когда видишь процессы.
как определить примерную частоту без осцилографа??
Действтиельно, Ардуино вполне способен как выполнять некоторую полезную (или не очень) работу, так и сам наблюдать о том, как эта работа выполняется, и докладывать хозяину.
PS. А осциллограф - да, вещь порлезная. И можно его сделать на той же Ардуине.
Смотрел осцилографам выходящий сигнал на UNO до 1Мгц похоже на меандр свыше уже начинает перекашивать сильно фронты но это скорей проблемма самой UNO. И не всегда заданая частота соответствует реальной, если задаеш 50 Гц то осцилограф столько и показывает а вот если задать 52 Гц то уже начинает выдавать 52,3Гц, а на 100Гц опять точно выдает 100Гц.
Если со слухом хорошо, или поблизости есть пианина, то для определения частоты сгодится пищалка и любой двоичный счётчик. Слухаем, находим похожую ноту, выясняем частоту (существуют таблицы), умножаем на коэффициент деления счётчика. Если делить так чтобы частоты получались не выше 4 кГц, метода даёт точность около 3%.
И да, музыкальный инструмент иметь необязательно, щас VST-синтезаторов развелось как собак нерезанных. Ставь не хочу.
...а вот если задать 52 Гц то уже начинает выдавать 52,3Гц...
Если делить так чтобы частоты получались не выше 4 кГц, метода даёт точность около 3%.
Как бы 0.3Гц от 52Гц - это существенно меньше 3%.
Потом, нота (52 Гц) получается в контроктаве. На слух точно определить не та-то просто, - в этом диапазоне у человеческого уха весьма низкая чувствительность к высоте.
Да и к 3% погрешности (как я понял - это четверть тона, т.е. половина "младшего разщряда") - это только при условии идеально настроенного инструмента. А сплошь и рядом попадаются инструменты, настроенные на 1/4, а то и на 1/2 тона ниже. Бывает и больше.
И да, музыкальный инструмент иметь необязательно, щас VST-синтезаторов развелось как собак нерезанных. Ставь не хочу.
Для указанной цели, думаю, этот вариант гораздо лучше пианино: во-первых, точнее строй, во-вторых, проще подобрать тембр близкий к тембру после делителя.
Шим 255 - это 50 герц?
Это коэффициент заполнения (duty cycle), а не частота: 255 - это 100%. Частота ШИМ постоянна, у ардуины по-умолчанию 490 Гц.
Пончтно. А можно задавать шим в герцах? Я хочу сделать инвертор с регулируемой частотой от 0 до 10 герц. Такое возможно?
Точнее от 0 до 100 герц
Ещё раз: у ШИМ частота постоянна, а меняется скважность/коеффициент заполнения.
Широтно-импульсная модуляция
Извините за невнимательность! Мою идею как-нибудь можно реализовать на ардуино?
Ну генерить разную частоту на ардуино можно. Вот хорошая тема: Генератор с регулируемоей частотой на ардуино
Правда там целое устройство и частота меняется крутя ручку энкодера. Хотя это можно делать и программно, но код придется переделывать.
Вот варийант медленного ШИМ например
автор спрашивает:
Наверное всех радует писк мотора и все пользуются штатной ШИМ?
т.е. разговор идет об повышении частоты ШИМ-а... а ему тут "советуют" ...
варийант медленного ШИМ например
или я чего то непонимаю?
у меня тоже такая же задача: движек нереально сверлит мозг, особенно на низких оборотах, нашел эту ветку а в итоге - рекомендуют низкочастотный ШИМ
поясните, если не сложно?
спасибо
490Гц это ШИМ по умолчанию в ардуино, при желании можно повысить частоту - там меняются какие-то из регистров, писалось неоднократно, мне лень искать даже. Чтобы не было писка мотора ШИМ должен работать на частоте не ниже 2000Гц, лучше больше. Но как показала практика при такой частоте чисто субъективно падает в разы мощность мотора почему-то.
у меня тоже такая же задача: движек нереально сверлит мозг, особенно на низких оборотах, нашел эту ветку а в итоге - рекомендуют низкочастотный ШИМ
Вы можете увелечить частоту ШИМ выше звукового предела (20кГц и выше) или уменьшить ниже - менее 20Гц). Как это делается писалось здесь сотни раз с кодами и примерами.
А можете вообще отказаться от регулирования двигателя через непосредственно ШИМом. Например, микросхема ТА7291 работает через опорное напряжение (постоянное) и никакого ШИМа. Опорное напряжение, конечно тоже делается из ШИМа, но там ШИМ заранее интегрируется перед подачей на микросхему. Как это делается см. вот здесь. Есть о объяснение и готовая схема.
Скачал библиотеку подправил пример(сделал понятным), а проверить осцилогрофа нет, может кто проверит.
и заодно скажет будит ли данная библиотека конфликтовать с RCSwitch.h и Ethernet.h
Библиотека с примером: https://yadi.sk/d/K_hBK_Xii3cMn
Пример:
А можете вообще отказаться от регулирования двигателя через непосредственно ШИМом. Например, микросхема ТА7291 работает через опорное напряжение (постоянное) и никакого ШИМа.
Микросхема это конечно хорошо, но если у человека задача как была у меня, то этот экземпляр слабоват будет (до 48В 7А). :)
Микросхема это конечно хорошо, но если у человека задача как была у меня, то этот экземпляр слабоват будет (до 48В 7А). :)
Ну, берите другую микросхему. Это был пример того, что бывают драйверы с опорным напряжением - "не ШИМом единым".
спасибо, я на рассыпухе все сделал... :о)
п.с. вопрос был - как непонимание, почему советуют понижать частоту шима... когда нужно повышать (т.е. я со своим шимом то разобрался...)
Ну, почему, можно и понижать. От задачи зависит. Сделайте 10Гц, например, - для очень многих задач такой точнойсти управления вполне хватит.
> можно и понижать
> Наверное всех радует писк мотора и все пользуются штатной ШИМ?
разговор был об движке (видимо, что-то подобное турбине фена, или какой подобный коллекторный), в данном случае только повышение, и желательно вообще "без делителя" ...
> падает в разы мощность мотора
на своей турбине я этого не заметил (используется импульсныйо step-down преобразователь, три детали...), работает так же как и при запитке "напрямую"...
Значит у вас на двигателе не динамическая нагрузка. Я тут 6мм фрезой дерево как-то резал, так и на полных оборотах (48В) того и гляди шпиндель встанет, а если бы снизил обороты до нормальных для этой фрезы так точно встал бы - рукой легко останавливается.
> используется импульсныйо step-down преобразователь
Здравствуйте, друзья, помогите сделать генератор 80 кГц, без регулирования частоты. Заранее спасибо.
Берите микросхему ICL8038. Схема генератора прямо в даташите. Как считать частоту там написано. Резисторы ставьте подстроечные. Когда сделаете, подберёте частоту поточнее.
Все работает отлично, как я понял меняется частота ШИМ.
Мне нужно ДВА генератора на одной плате (до 50 Кгц), как я понимаю с этой библой это сделать невозможно, потому что ШИМ один ан Дуине?
Так как с программированем регистров таймера у меня большие сложности, подскажите как собрать двойной генератор?
Или на адекватную ссылку по регистрам наведите...
Утро доброе, разобрался с либой, сделал на дуино генератор управляющих импульсов регулируемой частоты и скважиности (собираюсь измельчать металлы электроэрозионным методом), теперь мне необходимо обеспечить хотя бы программный deadtime между сигналами на входах полумостовых драйверов. Программно вывести два сигнала ШИМ, подрезав скважность второго на величину deadtime для исключения перехлеста сигналов и сквозняка при переключении 2го полумоста на 1й вроде бы не сложно, однако, как сделать фазовый сдвиг так, чтобы он был гарантирован? Да и на основе этого моста, который работает в импульсном режиме честно говоря очень хочется в дальнейшем попробовать мост с фазовым сдвигом. ЗЫ Защита от включения на сквозняк все равно будет в виде пары транзисторов на выходах ирок, которые закрыты в момент протекания тока по другой диагонали.
всем доброго дня коллеги.
начал разбираться с шим на ардуино мега.
необходимо менять скорость кулера (он на 5 вольт) питаю от отдельного DC-DC, Управляется транзистором 3705N
собрал плату с защитным диодом, ну и поджарил немного диод(из своей свалки). теперь думаю что не так поставил чтоли)))))))
или может брак какой?
а в общем то вопрос вот в чем....
а ардуино мега знаю что 6 таймеров, мне надо использовать 2 пина так как будут 2 кулера с разной чистотой крутить.
куда лучше посадить чтоб в дальнейшем не мешало ничему и не конфликтовало с другими библиотеками?
и какой таймер за что отвечает? не могу найти инфу.... а когдато попадалась.....
заранее благодарен!
и еще есть ли библиотека для работы с мегой?
Диод-то небось задом наперёд поставили? Хорошо хоть диод не особо мощный, а то какой-нибудь SF81 вполне бы себе выжил, зато из всего остального бы дым выпустил.
Какой таймер за что отвечает (в смысле за какие пины?) смотрите в даташите на мегу. Если склероз не изменяет, то
спасибо за ответ, я имел в виду чтото в роди этого
"Таймер 0 занят под millis"
остальные таймеры под что заняты?
к примеру tone и ватчдог тоже занимают таймеры.
а серилал (их 4 на меге) тоже наверное занимают?
и какой более безболезненно использовать на 2 пина ?
я думал использовать 44-45 пины попробовал библиотеку PWM, не заработало.
а сто вы имели в виду "Библиотек для работы с мегой некуда девать." ?
А есть ещё стопиццот библиотек, которые занимаю таймеры и что? Вы уж определитесь что Вы используете в данном проекте и кто что занимать будет. Или у Вас нет проекта и Вы пока так "в глобально масштабе" рассуждаете?
ну пока мысли в голове, половина уже в железе собрано, продолжаю собирать...
что будет занято это все сериалы, возможно 1 софтсериал тоже займу.
из библиотек поставлю Wire для ds18b20, dht11 но она вроди не использует таймер, ватчдог, tone (возможно). ну вроди все.
какой библиотекой лучше воспользоваться не меге ?
так и не нашел библиотеку для работы с 44-45 пином, решил попробовать на первом таймере 11 пин через библиотеку, все сразу запустилось.
а дальше проверил без нее и оказалось замечательно и без нее работает, не жужит))))) так и оставлю)))))))!!!
Ну, как же так без библиотеки-то? Правильные ардуинщики, если им надо помигать светодиодом, всегда идут на форум с требуют дать им ссылку на подходящую библиотеку! И в этом высокий смысл и высокая философия! :)
Ну, как же так без библиотеки-то? Правильные ардуинщики, если им надо помигать светодиодом, всегда идут на форум с требуют дать им ссылку на подходящую библиотеку! И в этом высокий смысл и высокая философия! :)
если только ради Вас:))))
форум на каком можно просить библиотеку не подскажете? ;)
кстати я так и не понял прикола, почему на 44 пине гул от вентилятора а на 11-12 нет (осцилографа у меня нет)?
форум на каком можно просить библиотеку не подскажете? ;)
Это смотря куда Вы предпочитаете быть посланным. На разных форумах разные традиции :)
кстати я так и не понял прикола, почему на 44 пине гул от вентилятора а на 11-12 нет (осцилографа у меня нет)?
Так обзаведитесь. Тот же DSO-138 при весьма скромной цене смог бы помочь в большистве "ардуино-проектов"
форум на каком можно просить библиотеку не подскажете? ;)
кстати я так и не понял прикола, почему на 44 пине гул от вентилятора а на 11-12 нет (осцилографа у меня нет)?
Разобраться с таймерами - пара дней времени, разобраться, что не работает в сторонней либе - проще написать свою с нуля. Гул от низкой частоты ШИМ, а какие делители у вас на каких таймерах - только вам и автором ваших библиотек может быть известно.
dimax , У меня вопрос по использовании этой библиотеки(pwm.h) Функция pwmwrite работает только с pwmwrite(pin , x) ,где x=0 и 255 . Как заставить работать со значением например 1000Гц и 136 шимом ?Смотрел в описании библиотеки на 0 и 255 он просто вкл digitalwrite LOW или HIGH а далее идет вот такая вот абракадабра
Я пробовал использовать analogRead вместо pwmWrite , но не уверен что он будет работать на нужной частоте. Напишите свое мнение в комментариях , или другое решение
danil123901,
вот здесь я показывал как делать ШИМ произвольного разрешения в несколько строк безо всяких библиотек. Только если заинтересует, то читайте до конца, там по дороге некая проблема решается.
Доброго времени суток!
Использую библиотеку PWM.h
Управляю драйвером шагового двигателя, выдавая на него импульсы:
Всё работает, как надо ))
Однако кроме импульсного сигнала, на драйвер шагового двигателя необходимо подавать ещё пару логических сигналов (0 В, либо 5 В). - направление вращения и разрешение управления. Всё бы ничего, но внутри драйвера сигнальные "плюсы" объединены. Соответственно как быть с PWM-сигналом? Получается от ардуины кидаем общие +5В на драйвер, но тогда ШИМ не будет работать. Что можно придумать?
Спасибо.
Что за такой хитрый драйвер? Сигналы step/dir всегда идут на разных ножках. И они объединены никак не могут быть.
Почти все драйверы Leadshine такие. Кроме DM2282. PUL это тот же STEP, в данном случае:
Если мне склероз не изменяет - достаточно выход МК соединить штатно с драйвером, а сигнал управляющий инвертировать (вместо HI подавать LO и наоборот).