Познавательная страничка. Все знают, что ШИМ на стандартной Ардуине (16МГц) работает на частоте все го лишь около 500Гц. Для 99% задач этого хватает, но для тех кому вдруг потребуется поднять частоту в несколько раз (как мне), копипащу сюда следующую информацию: Взято здесь. Проверено, работает.
"Все тайминги и частоты приведены для штатной частоты 16Мгц микроконтроллера ATMEGA328", а для леонардо есть такая возможность? там другой микроконтроллер.
у меня на 6м пине подключен вентилятор, с изменяемой скоростью вращения через шим, и есть писк естественно, конденсатор помогает но изменения вращения становятся нелинейными, хочу убрать конденсатор и использовать повышенную частоту
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 таймер).
Таймеры на всех AVR приблизительно одинаковые и бывают двух видов: 8 и 16 разрядные. Разбираться с ними лучше по инструкции здесь: http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/start.htm После чего читать даташит на конкретный МК не более чем на предмет где какие ноги. Хотя настоящие джедаи обязательно найдут ссылку где уже все сделано за них.
В общем и целом да, но нюансов хватает. К примеру таймер 4 на Atmega32u4 10 битный (с пометкой таймер высокой скорости, еще не понял за что его так гордо именуют). Так же таймеры различаются по режимам работы, у одного и того же микропроцессора разные таймеры будут поддерживать не все режимы Normal, CTC, Fast PWM, PFC PWM Mode и т.д., а 4 таймер на Atmega32u4 имеет режимы, которые не встречал к примеру у Atmega328p, а именно Single-Slope PWM6, Dual-Slope PWM6 Mode. Кол-ву контролируемых выводов, кол-ву поддерживаемых прерываний. Могут иметь так же Как и регистры которые не встречаются у других таймеров тот же DT4, у 4 таймера и т.д. Вообще таймер 4 на Atmega32u4 это наверно самый нафаршированный таймер с которым сталкивался.
а на "стандартной" ардуине разве не atmega328, какой 4 таймер? Если шим 8 бит, то и смотреть надо 8битные таймеры.
На стандартной ардуине (Atmega328) нет 4 таймера, он есть на Leonardo (Atmega32u4). Почему речь пошла именно о Leonardo (Atmega32u4)... Не совсем понял, нужно получить определенную частоту, с определенным режимом, какая разница какой таймер использовать 8, 10, 16 бит. Может я что-то не понимаю, поясните. UPD. А так как я сам изучаю сейчас Atmega32u4, то решил совместить приятное с полезным, сейчас как раз читаю pdf на Atmega32u4.
Спасибо большое! Да, я делал тему с вентилятором, и там в видео описывался пример с 328 контроллером. я сейчас отложил в сторону леонардо и перенес скетч на iskra mini, в ней 328р, соберу устройство на ней и попробую установить частоту как показано в том видео. если остальные функции будут неизменно работать- оставлю поект на iskra mini, а если вдруг что и не смогу разобраться- верну леонардо (вместо леонардо использую iskra neo)
"не смог" - это сильно сказано. Частота ШИМ на всех атмега меняется одинаково - достаточно сменить предделитель соответвующего таймера. Просто, похоже, никому это особенно не нужно на атмеге32
ну если на этом форуме только мы вдвоем, то вам. Просто столкнулся с ситуацией, когда увеличение шим не дает нужного эффекта, ЦАП ставить не удобно и терпимое решение получилось с помощью конденсатора, я подумал может кому будет нужно...
мг - Это моя ошибка. спасибо что подправили. Я вижу вы интеллигентный и очень опытный схемотехник, поэтому если не сложно прокомментируйте мой опыт решения проблемы. В моем случае нужно было управлять контроллером мотор-колеса, там изначально педаль газа предполагалась на датчике холла.
если датчик холла аналоговый (скорее всего), то значит его выходной сигнал - это напряжение. В этом случае ШИМ (независимо от частоты) для замены этого датчика не подойдет, так как имеет дискретную структуру Преобразовать его в аналог можно многими способами, одна из простейших это RC-фильтр. Ваш конденсатор - это вырожденная модель RC-фильтра, так что вы на правильном пути. Но характеристики вашего фильтра можно улучшить. А подробнее можете почитать вот эту ветку: http://arduino.ru/forum/apparatnye-voprosy/iz-shima-arduino-v-analog-0-10v-0