Увеличение частоты ШИМ

Тема в разделе "Arduino & Shields", создана пользователем DrProg, 23 дек 2015.

  1. DrProg

    DrProg Вечный нерд

    Познавательная страничка.

    Все знают, что ШИМ на стандартной Ардуине (16МГц) работает на частоте все го лишь около 500Гц. Для 99% задач этого хватает, но для тех кому вдруг потребуется поднять частоту в несколько раз (как мне), копипащу сюда следующую информацию:
    Взято здесь. Проверено, работает.
     
    fbismark, 9xA59kK, Tomasina и 2 другим нравится это.
  2. Толик Иванов

    Толик Иванов Administrator Администратор

    "Все тайминги и частоты приведены для штатной частоты 16Мгц микроконтроллера ATMEGA328", а для леонардо есть такая возможность? там другой микроконтроллер.
     
  3. DrProg

    DrProg Вечный нерд

    Наверняка есть. Надо читать даташит в поисках таймеров ШИМ.
     
    ИгорьК нравится это.
  4. Alex19

    Alex19 Гуру

    Да там ATmega32U4.

    На каком из таймеров надо ШИМ и на каких пинах, что за частота нужна?
     
  5. Толик Иванов

    Толик Иванов Administrator Администратор

    у меня на 6м пине подключен вентилятор, с изменяемой скоростью вращения через шим, и есть писк естественно, конденсатор помогает но изменения вращения становятся нелинейными, хочу убрать конденсатор и использовать повышенную частоту
     
  6. Alex19

    Alex19 Гуру

    4 таймер, на нем 6 пин (OC4D), 10 пин (OC4B),13 пин (0C4A).

    Как я понял, Ваша проблема описана тут - http://forum.amperka.ru/threads/%D0%BA%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%83-%D1%88%D0%B8%D0%BC-%D0%BD%D0%B0-iskra-neo-%D1%87%D1%82%D0%BE%D0%B1-%D0%B8%D0%B7%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%D1%81%D1%8F-%D0%BE%D1%82-%D0%BF%D0%B8%D1%81%D0%BA%D0%B0-%D0%BD%D0%B0-%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B5.6805/#post-57475.

    Ок, сегодня не обещаю, но завтра займусь. Мне сейчас нужно самому нужно досконально разобраться с таймерами ATmega32U4 и их режимами ШИМ.

    Если спешите, или ищите библиотеку от Ардуино для таймера 4 или поиск реализации Soft PWM. Или отрываете pdf - http://www.atmel.com/images/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf начинаем с стр. 140.

    UPD. 10 pin на другом таймере (в pin mapping-е написано 10 pin (PCINT6/OC1B/OC4B/ADC13) PB6, получается 1 таймер).
     
    Последнее редактирование: 23 дек 2015
  7. ИгорьК

    ИгорьК Гуру

    Таймеры на всех AVR приблизительно одинаковые и бывают двух видов: 8 и 16 разрядные. Разбираться с ними лучше по инструкции здесь: http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/start.htm
    После чего читать даташит на конкретный МК не более чем на предмет где какие ноги.
    Хотя настоящие джедаи обязательно найдут ссылку где уже все сделано за них.
     
    Последнее редактирование: 23 дек 2015
  8. Alex19

    Alex19 Гуру

    В общем и целом да, но нюансов хватает.

    К примеру таймер 4 на Atmega32u4 10 битный (с пометкой таймер высокой скорости, еще не понял за что его так гордо именуют).

    Так же таймеры различаются по режимам работы, у одного и того же микропроцессора разные таймеры будут поддерживать не все режимы Normal, CTC, Fast PWM, PFC PWM Mode и т.д., а 4 таймер на Atmega32u4 имеет режимы, которые не встречал к примеру у Atmega328p, а именно Single-Slope PWM6, Dual-Slope PWM6 Mode. Кол-ву контролируемых выводов, кол-ву поддерживаемых прерываний.

    Могут иметь так же Как и регистры которые не встречаются у других таймеров тот же DT4, у 4 таймера и т.д. Вообще таймер 4 на Atmega32u4 это наверно самый нафаршированный таймер с которым сталкивался.
     
  9. Onkel

    Onkel Гуру

    а на "стандартной" ардуине разве не atmega328, какой 4 таймер? Если шим 8 бит, то и смотреть надо 8битные таймеры.
     
  10. Alex19

    Alex19 Гуру

    На стандартной ардуине (Atmega328) нет 4 таймера, он есть на Leonardo (Atmega32u4). Почему речь пошла именно о Leonardo (Atmega32u4)...
    Не совсем понял, нужно получить определенную частоту, с определенным режимом, какая разница какой таймер использовать 8, 10, 16 бит. Может я что-то не понимаю, поясните.

    UPD. А так как я сам изучаю сейчас Atmega32u4, то решил совместить приятное с полезным, сейчас как раз читаю pdf на Atmega32u4.

     
  11. Толик Иванов

    Толик Иванов Administrator Администратор

    Спасибо большое! Да, я делал тему с вентилятором, и там в видео описывался пример с 328 контроллером. я сейчас отложил в сторону леонардо и перенес скетч на iskra mini, в ней 328р, соберу устройство на ней и попробую установить частоту как показано в том видео. если остальные функции будут неизменно работать- оставлю поект на iskra mini, а если вдруг что и не смогу разобраться- верну леонардо (вместо леонардо использую iskra neo)
     
  12. perdman

    perdman Нуб

    Всем здравствуйте! Я так понял никто не смог изменить частоту шим на Atmega32u4???
     
  13. b707

    b707 Гуру

    "не смог" - это сильно сказано. Частота ШИМ на всех атмега меняется одинаково - достаточно сменить предделитель соответвующего таймера.
    Просто, похоже, никому это особенно не нужно на атмеге32
     
  14. perdman

    perdman Нуб

    По моему опыту, небольшой конденсатор делает совершенно одинаковый выход что 500 гц, что 60 кгц
     
    Последнее редактирование: 10 окт 2021
  15. b707

    b707 Гуру

    Это вы мне написали?
    я рад. конечно, но зачем мне это?
     
  16. perdman

    perdman Нуб

    ну если на этом форуме только мы вдвоем, то вам. Просто столкнулся с ситуацией, когда увеличение шим не дает нужного эффекта, ЦАП ставить не удобно и терпимое решение получилось с помощью конденсатора, я подумал может кому будет нужно...
     
  17. b707

    b707 Гуру

    "мц" - это что? мегагерцы?
    и на каком же контроллере вы проверяли свои выводы на ШИМ 500 МГц?
     
  18. perdman

    perdman Нуб

    мг - Это моя ошибка. спасибо что подправили. Я вижу вы интеллигентный и очень опытный схемотехник, поэтому если не сложно прокомментируйте мой опыт решения проблемы. В моем случае нужно было управлять контроллером мотор-колеса, там изначально педаль газа предполагалась на датчике холла.
     
  19. b707

    b707 Гуру

    если датчик холла аналоговый (скорее всего), то значит его выходной сигнал - это напряжение.
    В этом случае ШИМ (независимо от частоты) для замены этого датчика не подойдет, так как имеет дискретную структуру
    Преобразовать его в аналог можно многими способами, одна из простейших это RC-фильтр. Ваш конденсатор - это вырожденная модель RC-фильтра, так что вы на правильном пути. Но характеристики вашего фильтра можно улучшить.

    А подробнее можете почитать вот эту ветку:
    http://arduino.ru/forum/apparatnye-voprosy/iz-shima-arduino-v-analog-0-10v-0
     
    perdman нравится это.
  20. parovoZZ

    parovoZZ Гуру

    извини, но это вовсе не опыт.