How to reduce the frequency and bit width of PWM Arduino
Vložit
- čas přidán 17. 02. 2018
- Hello! In this video we will consider how to change the PWM frequency from 15 Hz to 62.5 kHz, and the bit depth from 255 to 1023.
Article: mypractic.ru/urok-37-shirotno-...
Datasheet, pinout and settings: drive.google.com/open?id=1yZ_...
Where you can buy:
AM2320: ali.pub/28nldb
DHT22: ali.pub/1weunr
Mini MP3 module: ali.pub/28md2v
Sound sensor: ali.pub/28izrn
MSGEQ7: ali.pub/26ytmr
Neon Ribbon: ali.pub/26uqio
Hall sensor A3144: ali.pub/26su6r
Cheap Servo Drives: ali.pub/26aq2i
Metal servos: ali.pub/26aq60
The cheapest Arduino Pro Mini for crafts: ali.pub/1ny2z4
TFT Displays: ali.pub/1ny2rc
Battery Shield: ali.pub/23xxnc
DS1307 RTC: ali.pub/1rjsbr
HC-SR04: ali.pub/213gl0
Dimmers: ali.pub/1zmq9k
BMP280: ali.pub/1z5ck5
WS2812B: ali.pub/1x8oim
Power supply 5V 3A: ali.pub/1x8pcy
Powerful power supply 5V 3A: ali.pub/1x8pfv
Arduino Mega 2560: ali.pub/1ny34r
Label: ali.pub/1ny3ae
Lintels: ali.pub/1ny3la
Quality crosspieces: ali.pub/1ny3j5
The most convenient Keshbek:
LetyShops: goo.gl/Ev5XgI
The most profitable Keshbek for aliexpress:
Ecomerce: got.by/238t10 - Věda a technologie
На 06:43 : если в регистр управления TCCR1B в младшие четыре разряда (03..00) записать нули, то Таймер/Счётчик1 будет остановлен, а не "то у нас будет без деления частоты, т.е. самая высокая частота".
Да, вы правы. Спасибо за исправление
Не за что. Спасибо за видео, я - Ваш давний подписчик! :)
Очень полезный, давно хотел разобраться с ШИМ-ом, ток все лень даташит читать, а здесь все объяснено доходчиво разжевано. И с таймерами тоже все стало ясно, а то не мог понять почему, у меня при подключении библиотеки IRremote один из трех аналоговых выходов перестает работать. Спасибо автору!
Спасибо за отзыв! Успехов вам в освоении!
Согласен ! Ценная инфа ! Запарился искать ,надо было сразу сюда зайти )))
Круто, спасибо за столь полезную инфу
Автор, спасибо тебе ОГРОМНОЕ. Половину дня понять не мог - почему не регулируется подсветка двух цветов одной из двух RGB лент. Я задействовал все 6 PWM пинов.
А оказывается - библиотека timer-api.h "захватила" для себя первый таймер.
Благодаря твоему видео, понял, что из-за этой библиотеки не будут нормально работать пины 10 и 9.
Ещё раз спасибо =)
+Анатолий Маркелов Не за что! Успехов вам!
Спасибо Вам большое за объяснение! Я этого не знал, но хотел углубиться в железо
+Николай Маренин спасибо за отзыв! Успехов вам!
Спасибо! С движками сработало!
Спасибо за полезную информацию 👍
Спасибо!
Просто и понятно! Спасибо и Подписка!
Спасибо, ценная информация
А как сделать плавную регулировку частоты с PWM В 1023??? ЕСЛИ НЕЛЬЗЯ то как сделать генератор импульстов на STM32
Можно на ардуино смоделировать работу микросхемы SG3525 с частотой до 62 килогерц , с дедтаймом и двумя сигналами выходами на затвор ?
И 62.5 кГц это максимальная частота шима для ардуино , или можно выше ?
спасибо красавчик до этого смотрел ни хрена не понимал рил спасибо
меняя предделители таймеров следует помнить что все функции связанные с временем ,типа delay или millis, тоже будут меняться.
Да, вы правы, но delay, millis и т.д. завязаны на 0-м таймере. В видео показана работа именно с 1-м таймером, а не с 0-м.
Спасибо!!!!
Годнота однако
:)
А при помощи какого кода можно установить частоту ШИМ 50 Гц? А то у меня без какого-либо кода выдает 977 Гц (ардуини нано с выходом на 5-й пин)
как можно плавно менять частоту шим? Например чтобы построить генератор частоты с одновременным изменением скважности.
На сколько я правильно понимаю, вы включили режим Fast PWM 9 bit, а не Phase Correct PWM как вы показываете
есть библиотека timerOne как раз то что нужно, а для меги timer3.
Круто
+MrDarkshine спасибо! Успехов вам!
А как также настроить только на 3 пине? Я так понимаю это уже 2 таймер Ардуино ?
я новенький в этом деле по этому подскажите если я буду изменять частоту у меня будет работать дисплей который подключён по SPI
Это совершенно не связанные вещи.
На дуине при работе с регистрами, можно получать вплоть до 8MГц. Просто через таймеры по даташиту
Все верно, если пользоваться даташитом то можно получить Настройки в широких пределах
Подскажи что может занчить вот это OCR1A = OCR1B = (buffer[whichBuff][intCount] >> volMod*-1);
это все в процедуре ISR(TIMER1_OVF_vect)
buffer[whichBuff][intCount] - это двухмерный массив
его значение смещается побитовым сдвигом на volMod*-1 бит
то что получилось записывается в OCR1B и OCR1A
ёптать, тем самым уничтожена вся концепция ардуино :D.
PS не проще тогда писать на с++ (если хочется использовать классы) или на чистом си?
Молодец. Ставлю лайк! На MEGA2560 наверное будут свои ШИМ?
+Blackhock 2012, Спасибо! На Меге используется другой МК, у него другие регистры. Надо смотреть в даташит.
Объясните пожалуйста, на что конкретно влияет частота шима. Предположим в рекомендации по управлению электромагнитом дают частоту в 100Гц, а я буду управлять, предположим, 10кГц. На что это может повлиять?
На то что мотор не будет вращаться. Длительности импульсов будет недостаточно для того чтобы образовалось магнитное поле достаточной силы для вращения мотора.
А почему при половине заполнения (255 при 9 битах ШИМ) на осциллогафе чистая единица (время 4:58)?
Это из-за того что я прервал съемку. Перед этим я нажал "прошить". Ардуино перешла в режим загрузки прошивки и настройки всех пинов сбросились по дефолту. На этом я прервал съемку. Если бы снимал дальше то можно было бы увидеть результаты прошивки.
да нет. это по тому, что при разрядности 9 и 10 бит функция analogWrite при значении 255 выдает 1 на выходе. Сам не мог понять, пока не посмотрел повторно это видео и почитал комментарии статьи в описании...
А что-то подобное можно провернуть с есп8266?
Я с ESP8266 не работал, по этому не могу ничего подсказать. Сейчас заказал пару штук. Придут примерно через месяц. Тогда и буду разбираться что к чему.
Home Made - То, что ты можешь сделать очень жду видео
удалось разобраться
нужно ввести в arduino ide analogWriteFreq(нужная частота)
подробнее:github.com/esp8266/Arduino/issues/1265
т.е. ардуинку нельзя настроить на 100кГц?? Может вы сделаете похожее видео для стм32?
Сейчас уже и не скажу какой микроконтроллер какие частоты поддерживает.
Я сейчас в отъезде. Новое видео смогу сделать только через 2 месяца. Напомните пожалуйста
У вас частоты не правильно указаны, такие частоты получаются в режиме FAST PWM, но в нём при нуле в регистре будут импульсы на выходе. То есть ШИМ=0% вы никогда не получите. Частоты будут в два раза ниже указанных.
AnalogWrite(pin, value) выдаёт в стандарте сигнал частотой 490-500 Гц, и имеет разрешение в 8 бит(от 0 до 255).
А у Вас в таблице 9 бит = 488, 28Гц.
Почему в скетче мы не используем тогда по стандарту диапазон от 0 до 512? Не сходится... Я не понял.
Все зависит от настройки таймера. Для 9 бит (как и для 8 и 10) частота зависит от того какие значения будут записаны в регистры TCCR1A и TCCR1B. Изменяя эти регистры (настраивая таймер1) можно получить разные разрядность и частоту.
AnalogWrite(pin, value) - не настраивает таймер. Настройки уже предустановлены самой средой Arduino ide. И то что вы запишите в AnalogWrite(pin, value) идет не напрямую в настройки таймера, проходит через массу кода, который интерпретирует и изменяет эту команду.
488, 28Гц. - это "лабораторные" значения. А по факту частота может плавать и зависит от качества сборки, качества питания, качества источника тактирования и т.д.
Про "от 0 до 512" я написал немного выше. Это все настройки самой Ардуино IDE. Пропищите свои настройки таймера и используйте в том диапазоне, какой вам необходим.
Силами фл прог можно это сделать?
Нет, не получится.
Очень советую вам уходить от этой программы. Так как по-настоящему программировать вы не научитесь.
Можно.
Как сделать плавное нарастание шим по аналоговуму входу? Когда резко крутнул резистор на половину, а шим плавно нарастает до этого значения, а когда резко уменьшил, то он резко уменшился, паузу делать в цикле не вариант, так как тогда плавное затухание. Нужно это для педали газа в детской электромашине, что бы не было пробуксовки колес при старте.
Проще написать готовый скетч чем расписывать принцип и объяснять как этот скетч написать.
Могу привести пример что именно нужно сделать: czcams.com/video/CRBNUABEd-w/video.html
смотрите с 6:36
Я там объясняю как сделать плавное изменение скорости моторов управляющих роботом.
@@UCanDo что то я там не увидел, как сделать плавный шим зависящий от аналогового входа
Делаете две переменные, в одной реальное значение с Аналогового Входа, во второй хранится значение для ШИМ. Если значение второй переменной меньше (больше) чем первой, то добавляем (отнимаем) 1. Пауза.
Длительность паузы влияет на скорость измерения ШИМ
@@UCanDo спасибо, уже дал ладу как это в flprog сделать, нужно было просто мозг включить, посто я не программист С++, изучать начинал avr, но потом забил, один хрен все забывается если с этим не работаешь постоянно, снова гуглишь. А то, что нужно раз в год написать, делаю в flprog, все просто.
я слышал если изменить шим, то драйверы двигателя перестают пищать, своим низкочастотным писком. это правда?
Да. Частота ЩИМ для каждого отдельного мотора подбирается индивидуально, хотя и есть стандарты
В ардуино есть баг, если увеличить разрядность например на 10бит то значение 255 будет эквивалентно 1024 т.е максимуму
Не совсем понимаю о какой разрядности идёт речь. У Ардуино для ШИМ максимум 256 значений. А для АЦП 1024.
@@UCanDo , в видео, когда поставить 10 бит то максимум шим будет уже не 255 а 1023 , но при этом если поставить 255 то будет например лампа светить на полную, а при 256 опять на четверть.
Выше 800 гц мотор пищит и не вращается??? Это шутка такая или что? С чего ему не вращаться?
Попробуйте сами провести эксперимент.
@@UCanDo я попробовал, у меня 250 ваттный мотор с магнитным энкодером на валу отлично работает на 25 кгц и делает все что ему скажут, ибо все что ниже 20кгц заставляет его пищать безбожно
Не совсем согласен про моторы , и это не пустые слова czcams.com/video/qdHST8EgfSY/video.html тут более менее рассказал что есть что , и поднятие частоты иногда ведет к очень приятным последствием
Сделайте урок про программный ШИМ на любой пин. На эту тему мало уроков.
+Сергей Герасименко Я об этом уже говорил в видео "Как ускорить Ардуино в 10 раз".
Реализовать можно, но это совсем не эффективно, так как программный ШИМ будет занимать все время микроконтроллера.
czcams.com/video/38HLruh4SK8/video.html
Home Made. Спасибо сейчас гляну.
Home Made. Глянул по ссылке. Там нет ничего про то как организовать работу программного ШИМа на определенную частоту и на определенное кол-во пинов не привязанных аппаратно. Вы там больше говорите об управлении портами напрямую языком СИ++. Что даёт оптимизацию программы и вследствии увеличении скорости обработки программы. Хотелось бы отдельный урок где будет напримере показанно как можно скажем подключить светодиод к любой ножке МК и управлять скважностью с определенной частотой. Таких уроков внятных очень мало.
Смотрите с 18-й минуты: czcams.com/video/38HLruh4SK8/video.htmlm48s
Программный ШИМ это поочередная запись в пин HIGH или LOW. Пин можно выбрать любой. Но этого никто не делает, так как МК больше никакую программу выполнять не будет, только контроль программного ШИМа. Это тупиковый путь, так как никакую другую программу не получится выполнить. Либо какая-то программа, либо программный ШИМ. По этому и нет уроков на эту тему - бессмыслено, пустая трата времени/ресурсов.
Если пинов с ШИМ не хватает, то либо меняйте Ардуино ( на пример на Мегу или ДУЕ) или переходите на STM. На той же stm32f103 ШИМ поддерживают 20 пинов.
Этот таймер, который крутим, не повлияет на работу других функций? Вообще, смысла задирать этот ШИМ просто никакого, раз те же моторы плохо реагируют на повышенный. Единственное, для чего стоит повышать частоту - это использование ардуино в качестве ШИМ-контроллера, а это какое-то извращение уже....
Изменить частоту герц. 8-}
Бл* где это видео было год назад?
+Chris N. Бывает :)
А каши то сколько... :)
и не говори... :)
Автор ещё куда-то топор запрятал. ;)
Есть серьезные косяки в рассказе, а первый таймер может иметь разрядность шим от 2 до 16 бит
Добрый день. Я только учусь, так что не судите строго :)
Исходя из таблицы: Table 13-4. Waveform Generation Mode Bit Description, есть описание битности ШИМ 8-10 бит. Но есть и другие режимы, где максимальное значение счетчика таймера достигается ICR1. Вы это имеете в виду говоря о разрядности ШИМ 2-16 бит?
Спасибо!