How to reduce the frequency and bit width of PWM Arduino

Sdílet
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

Komentáře • 98

  • @Al.Sy.
    @Al.Sy. Před 6 lety +9

    На 06:43 : если в регистр управления TCCR1B в младшие четыре разряда (03..00) записать нули, то Таймер/Счётчик1 будет остановлен, а не "то у нас будет без деления частоты, т.е. самая высокая частота".

    • @UCanDo
      @UCanDo  Před 6 lety

      Да, вы правы. Спасибо за исправление

    • @Al.Sy.
      @Al.Sy. Před 6 lety +1

      Не за что. Спасибо за видео, я - Ваш давний подписчик! :)

  • @user-md2zq6hj4v
    @user-md2zq6hj4v Před 6 lety +1

    Очень полезный, давно хотел разобраться с ШИМ-ом, ток все лень даташит читать, а здесь все объяснено доходчиво разжевано. И с таймерами тоже все стало ясно, а то не мог понять почему, у меня при подключении библиотеки IRremote один из трех аналоговых выходов перестает работать. Спасибо автору!

    • @UCanDo
      @UCanDo  Před 6 lety

      Спасибо за отзыв! Успехов вам в освоении!

  • @About-everything-for-you

    Согласен ! Ценная инфа ! Запарился искать ,надо было сразу сюда зайти )))

  • @nikolaydd6219
    @nikolaydd6219 Před 3 lety +1

    Круто, спасибо за столь полезную инфу

  • @user-zj3wq6ts9j
    @user-zj3wq6ts9j Před 6 lety +3

    Автор, спасибо тебе ОГРОМНОЕ. Половину дня понять не мог - почему не регулируется подсветка двух цветов одной из двух RGB лент. Я задействовал все 6 PWM пинов.
    А оказывается - библиотека timer-api.h "захватила" для себя первый таймер.
    Благодаря твоему видео, понял, что из-за этой библиотеки не будут нормально работать пины 10 и 9.
    Ещё раз спасибо =)

    • @UCanDo
      @UCanDo  Před 6 lety

      +Анатолий Маркелов Не за что! Успехов вам!

  • @MaPeHuH
    @MaPeHuH Před 6 lety

    Спасибо Вам большое за объяснение! Я этого не знал, но хотел углубиться в железо

    • @UCanDo
      @UCanDo  Před 6 lety

      +Николай Маренин спасибо за отзыв! Успехов вам!

  • @LeoPlus
    @LeoPlus Před 3 lety

    Спасибо! С движками сработало!

  • @kosmos8460
    @kosmos8460 Před 3 lety

    Спасибо за полезную информацию 👍

  • @dmitriydogot6753
    @dmitriydogot6753 Před rokem +1

    Спасибо!

  • @segamajkud3444
    @segamajkud3444 Před 3 lety

    Просто и понятно! Спасибо и Подписка!

  • @benhummer185
    @benhummer185 Před 4 lety

    Спасибо, ценная информация

  • @user-bh8nh6gq9m
    @user-bh8nh6gq9m Před 5 lety

    А как сделать плавную регулировку частоты с PWM В 1023??? ЕСЛИ НЕЛЬЗЯ то как сделать генератор импульстов на STM32

  • @voicebeautiful1
    @voicebeautiful1 Před 5 lety

    Можно на ардуино смоделировать работу микросхемы SG3525 с частотой до 62 килогерц , с дедтаймом и двумя сигналами выходами на затвор ?
    И 62.5 кГц это максимальная частота шима для ардуино , или можно выше ?

  • @frankenstein5041
    @frankenstein5041 Před 4 lety +1

    спасибо красавчик до этого смотрел ни хрена не понимал рил спасибо

  • @justfullscale
    @justfullscale Před 6 lety +4

    меняя предделители таймеров следует помнить что все функции связанные с временем ,типа delay или millis, тоже будут меняться.

    • @UCanDo
      @UCanDo  Před 6 lety +5

      Да, вы правы, но delay, millis и т.д. завязаны на 0-м таймере. В видео показана работа именно с 1-м таймером, а не с 0-м.

  • @Biskowegas
    @Biskowegas Před 4 lety

    Спасибо!!!!

  • @bul2012
    @bul2012 Před 6 lety

    Годнота однако

  • @Petro-Ods
    @Petro-Ods Před 3 lety

    А при помощи какого кода можно установить частоту ШИМ 50 Гц? А то у меня без какого-либо кода выдает 977 Гц (ардуини нано с выходом на 5-й пин)

  • @mendel454
    @mendel454 Před 4 lety

    как можно плавно менять частоту шим? Например чтобы построить генератор частоты с одновременным изменением скважности.

  • @user-kk5gr7zk3m
    @user-kk5gr7zk3m Před 5 lety

    На сколько я правильно понимаю, вы включили режим Fast PWM 9 bit, а не Phase Correct PWM как вы показываете

  • @krepton85you
    @krepton85you Před 6 lety

    есть библиотека timerOne как раз то что нужно, а для меги timer3.

  • @MrDarkshine1
    @MrDarkshine1 Před 6 lety

    Круто

    • @UCanDo
      @UCanDo  Před 6 lety

      +MrDarkshine спасибо! Успехов вам!

  • @user-gw1pj7fh7q
    @user-gw1pj7fh7q Před 24 dny

    А как также настроить только на 3 пине? Я так понимаю это уже 2 таймер Ардуино ?

  • @vladyslavverbytskyi7772

    я новенький в этом деле по этому подскажите если я буду изменять частоту у меня будет работать дисплей который подключён по SPI

    • @UCanDo
      @UCanDo  Před 3 lety

      Это совершенно не связанные вещи.

  • @agood9000
    @agood9000 Před 3 lety

    На дуине при работе с регистрами, можно получать вплоть до 8MГц. Просто через таймеры по даташиту

    • @UCanDo
      @UCanDo  Před 3 lety +1

      Все верно, если пользоваться даташитом то можно получить Настройки в широких пределах

  • @wizzii84
    @wizzii84 Před 6 lety

    Подскажи что может занчить вот это OCR1A = OCR1B = (buffer[whichBuff][intCount] >> volMod*-1);

    • @wizzii84
      @wizzii84 Před 6 lety

      это все в процедуре ISR(TIMER1_OVF_vect)

    • @UCanDo
      @UCanDo  Před 6 lety

      buffer[whichBuff][intCount] - это двухмерный массив
      его значение смещается побитовым сдвигом на volMod*-1 бит
      то что получилось записывается в OCR1B и OCR1A

  • @iwh1te340
    @iwh1te340 Před 5 lety +3

    ёптать, тем самым уничтожена вся концепция ардуино :D.
    PS не проще тогда писать на с++ (если хочется использовать классы) или на чистом си?

  • @Blackhock-wh6rl
    @Blackhock-wh6rl Před 6 lety +1

    Молодец. Ставлю лайк! На MEGA2560 наверное будут свои ШИМ?

    • @UCanDo
      @UCanDo  Před 6 lety

      +Blackhock 2012, Спасибо! На Меге используется другой МК, у него другие регистры. Надо смотреть в даташит.

  • @theeverlastinglight5701

    Объясните пожалуйста, на что конкретно влияет частота шима. Предположим в рекомендации по управлению электромагнитом дают частоту в 100Гц, а я буду управлять, предположим, 10кГц. На что это может повлиять?

    • @UCanDo
      @UCanDo  Před 5 lety

      На то что мотор не будет вращаться. Длительности импульсов будет недостаточно для того чтобы образовалось магнитное поле достаточной силы для вращения мотора.

  • @taugras
    @taugras Před 6 lety

    А почему при половине заполнения (255 при 9 битах ШИМ) на осциллогафе чистая единица (время 4:58)?

    • @UCanDo
      @UCanDo  Před 6 lety

      Это из-за того что я прервал съемку. Перед этим я нажал "прошить". Ардуино перешла в режим загрузки прошивки и настройки всех пинов сбросились по дефолту. На этом я прервал съемку. Если бы снимал дальше то можно было бы увидеть результаты прошивки.

    • @user-ow9df2xw2y
      @user-ow9df2xw2y Před 6 lety +1

      да нет. это по тому, что при разрядности 9 и 10 бит функция analogWrite при значении 255 выдает 1 на выходе. Сам не мог понять, пока не посмотрел повторно это видео и почитал комментарии статьи в описании...

  • @ruselplay
    @ruselplay Před 6 lety +2

    А что-то подобное можно провернуть с есп8266?

    • @UCanDo
      @UCanDo  Před 6 lety +1

      Я с ESP8266 не работал, по этому не могу ничего подсказать. Сейчас заказал пару штук. Придут примерно через месяц. Тогда и буду разбираться что к чему.

    • @ruselplay
      @ruselplay Před 6 lety

      Home Made - То, что ты можешь сделать очень жду видео

    • @ruselplay
      @ruselplay Před 6 lety

      удалось разобраться
      нужно ввести в arduino ide analogWriteFreq(нужная частота)
      подробнее:github.com/esp8266/Arduino/issues/1265

  • @MADBASS77
    @MADBASS77 Před 5 lety

    т.е. ардуинку нельзя настроить на 100кГц?? Может вы сделаете похожее видео для стм32?

    • @UCanDo
      @UCanDo  Před 5 lety

      Сейчас уже и не скажу какой микроконтроллер какие частоты поддерживает.
      Я сейчас в отъезде. Новое видео смогу сделать только через 2 месяца. Напомните пожалуйста

  • @user_PsevdonimyEtoPolnyjOtstoj

    У вас частоты не правильно указаны, такие частоты получаются в режиме FAST PWM, но в нём при нуле в регистре будут импульсы на выходе. То есть ШИМ=0% вы никогда не получите. Частоты будут в два раза ниже указанных.

  • @user-il2eu7sy6p
    @user-il2eu7sy6p Před 4 lety

    AnalogWrite(pin, value) выдаёт в стандарте сигнал частотой 490-500 Гц, и имеет разрешение в 8 бит(от 0 до 255).
    А у Вас в таблице 9 бит = 488, 28Гц.
    Почему в скетче мы не используем тогда по стандарту диапазон от 0 до 512? Не сходится... Я не понял.

    • @UCanDo
      @UCanDo  Před 4 lety

      Все зависит от настройки таймера. Для 9 бит (как и для 8 и 10) частота зависит от того какие значения будут записаны в регистры TCCR1A и TCCR1B. Изменяя эти регистры (настраивая таймер1) можно получить разные разрядность и частоту.
      AnalogWrite(pin, value) - не настраивает таймер. Настройки уже предустановлены самой средой Arduino ide. И то что вы запишите в AnalogWrite(pin, value) идет не напрямую в настройки таймера, проходит через массу кода, который интерпретирует и изменяет эту команду.
      488, 28Гц. - это "лабораторные" значения. А по факту частота может плавать и зависит от качества сборки, качества питания, качества источника тактирования и т.д.
      Про "от 0 до 512" я написал немного выше. Это все настройки самой Ардуино IDE. Пропищите свои настройки таймера и используйте в том диапазоне, какой вам необходим.

  • @alexanderzaycev2315
    @alexanderzaycev2315 Před 5 lety

    Силами фл прог можно это сделать?

    • @UCanDo
      @UCanDo  Před 5 lety

      Нет, не получится.
      Очень советую вам уходить от этой программы. Так как по-настоящему программировать вы не научитесь.

    • @vorobeichumaziy
      @vorobeichumaziy Před 5 lety +1

      Можно.

  • @kiilfaces5464
    @kiilfaces5464 Před 3 lety

    Как сделать плавное нарастание шим по аналоговуму входу? Когда резко крутнул резистор на половину, а шим плавно нарастает до этого значения, а когда резко уменьшил, то он резко уменшился, паузу делать в цикле не вариант, так как тогда плавное затухание. Нужно это для педали газа в детской электромашине, что бы не было пробуксовки колес при старте.

    • @UCanDo
      @UCanDo  Před 3 lety

      Проще написать готовый скетч чем расписывать принцип и объяснять как этот скетч написать.
      Могу привести пример что именно нужно сделать: czcams.com/video/CRBNUABEd-w/video.html
      смотрите с 6:36
      Я там объясняю как сделать плавное изменение скорости моторов управляющих роботом.

    • @kiilfaces5464
      @kiilfaces5464 Před 3 lety

      @@UCanDo что то я там не увидел, как сделать плавный шим зависящий от аналогового входа

    • @UCanDo
      @UCanDo  Před 3 lety +2

      Делаете две переменные, в одной реальное значение с Аналогового Входа, во второй хранится значение для ШИМ. Если значение второй переменной меньше (больше) чем первой, то добавляем (отнимаем) 1. Пауза.
      Длительность паузы влияет на скорость измерения ШИМ

    • @kiilfaces5464
      @kiilfaces5464 Před 3 lety

      @@UCanDo спасибо, уже дал ладу как это в flprog сделать, нужно было просто мозг включить, посто я не программист С++, изучать начинал avr, но потом забил, один хрен все забывается если с этим не работаешь постоянно, снова гуглишь. А то, что нужно раз в год написать, делаю в flprog, все просто.

  • @ingvarorlov6726
    @ingvarorlov6726 Před 3 lety

    я слышал если изменить шим, то драйверы двигателя перестают пищать, своим низкочастотным писком. это правда?

    • @UCanDo
      @UCanDo  Před 3 lety

      Да. Частота ЩИМ для каждого отдельного мотора подбирается индивидуально, хотя и есть стандарты

  • @emarchel
    @emarchel Před 4 lety

    В ардуино есть баг, если увеличить разрядность например на 10бит то значение 255 будет эквивалентно 1024 т.е максимуму

    • @UCanDo
      @UCanDo  Před 4 lety

      Не совсем понимаю о какой разрядности идёт речь. У Ардуино для ШИМ максимум 256 значений. А для АЦП 1024.

    • @emarchel
      @emarchel Před 4 lety +1

      @@UCanDo , в видео, когда поставить 10 бит то максимум шим будет уже не 255 а 1023 , но при этом если поставить 255 то будет например лампа светить на полную, а при 256 опять на четверть.

  • @clydewarrior2255
    @clydewarrior2255 Před 5 lety +2

    Выше 800 гц мотор пищит и не вращается??? Это шутка такая или что? С чего ему не вращаться?

    • @UCanDo
      @UCanDo  Před 5 lety

      Попробуйте сами провести эксперимент.

    • @alexanderchudinov1117
      @alexanderchudinov1117 Před 5 lety

      @@UCanDo я попробовал, у меня 250 ваттный мотор с магнитным энкодером на валу отлично работает на 25 кгц и делает все что ему скажут, ибо все что ниже 20кгц заставляет его пищать безбожно

  • @Aleksandr_Sidorov
    @Aleksandr_Sidorov Před 4 lety

    Не совсем согласен про моторы , и это не пустые слова czcams.com/video/qdHST8EgfSY/video.html тут более менее рассказал что есть что , и поднятие частоты иногда ведет к очень приятным последствием

  • @user-sg9fc1we3b
    @user-sg9fc1we3b Před 6 lety

    Сделайте урок про программный ШИМ на любой пин. На эту тему мало уроков.

    • @UCanDo
      @UCanDo  Před 6 lety +1

      +Сергей Герасименко Я об этом уже говорил в видео "Как ускорить Ардуино в 10 раз".
      Реализовать можно, но это совсем не эффективно, так как программный ШИМ будет занимать все время микроконтроллера.

    • @UCanDo
      @UCanDo  Před 6 lety

      czcams.com/video/38HLruh4SK8/video.html

    • @user-sg9fc1we3b
      @user-sg9fc1we3b Před 6 lety

      Home Made. Спасибо сейчас гляну.

    • @user-sg9fc1we3b
      @user-sg9fc1we3b Před 6 lety

      Home Made. Глянул по ссылке. Там нет ничего про то как организовать работу программного ШИМа на определенную частоту и на определенное кол-во пинов не привязанных аппаратно. Вы там больше говорите об управлении портами напрямую языком СИ++. Что даёт оптимизацию программы и вследствии увеличении скорости обработки программы. Хотелось бы отдельный урок где будет напримере показанно как можно скажем подключить светодиод к любой ножке МК и управлять скважностью с определенной частотой. Таких уроков внятных очень мало.

    • @UCanDo
      @UCanDo  Před 6 lety

      Смотрите с 18-й минуты: czcams.com/video/38HLruh4SK8/video.htmlm48s
      Программный ШИМ это поочередная запись в пин HIGH или LOW. Пин можно выбрать любой. Но этого никто не делает, так как МК больше никакую программу выполнять не будет, только контроль программного ШИМа. Это тупиковый путь, так как никакую другую программу не получится выполнить. Либо какая-то программа, либо программный ШИМ. По этому и нет уроков на эту тему - бессмыслено, пустая трата времени/ресурсов.
      Если пинов с ШИМ не хватает, то либо меняйте Ардуино ( на пример на Мегу или ДУЕ) или переходите на STM. На той же stm32f103 ШИМ поддерживают 20 пинов.

  • @fantom3ds
    @fantom3ds Před 4 lety

    Этот таймер, который крутим, не повлияет на работу других функций? Вообще, смысла задирать этот ШИМ просто никакого, раз те же моторы плохо реагируют на повышенный. Единственное, для чего стоит повышать частоту - это использование ардуино в качестве ШИМ-контроллера, а это какое-то извращение уже....

  • @Ukka_Sarasty
    @Ukka_Sarasty Před 6 lety

    Изменить частоту герц. 8-}

  • @chrisn.6760
    @chrisn.6760 Před 6 lety

    Бл* где это видео было год назад?

    • @UCanDo
      @UCanDo  Před 6 lety

      +Chris N. Бывает :)

  • @f33net
    @f33net Před 6 lety

    А каши то сколько... :)

    • @UCanDo
      @UCanDo  Před 6 lety

      и не говори... :)

    • @Al.Sy.
      @Al.Sy. Před 6 lety

      Автор ещё куда-то топор запрятал. ;)

  • @alexbat72
    @alexbat72 Před 6 lety

    Есть серьезные косяки в рассказе, а первый таймер может иметь разрядность шим от 2 до 16 бит

    • @UCanDo
      @UCanDo  Před 6 lety

      Добрый день. Я только учусь, так что не судите строго :)
      Исходя из таблицы: Table 13-4. Waveform Generation Mode Bit Description, есть описание битности ШИМ 8-10 бит. Но есть и другие режимы, где максимальное значение счетчика таймера достигается ICR1. Вы это имеете в виду говоря о разрядности ШИМ 2-16 бит?

  • @saidgusainov6252
    @saidgusainov6252 Před 2 lety

    Спасибо!