78

Arduino. Регулировка частоты ШИМ настройками таймера - счетчика

Понадобилось мне недавно установить частоту ШИМ у Arduino на 20кГц, с возможностью менять скважность (отношение периода повторения импульсов к длительности импульса). Хотелось это сделать без использования библиотек - настройками таймера счетчика. Убив на это два дня, перелопатив кучу форумов, перепробовав кучу вариантов(хз, это я такой тупой или выложены нерабочие коды) удалось найти на ютубе рабочий вариант на канале: "микроконтроллеры с нуля!" в видео с номером 26. Решил поделиться этим на Пикабу, вдруг кому пригодится.

Сам код:

cli(); //запрет прерываний

//режим вывода не инверсный
TCCR1A|=(1<<COM1A1);  //1
TCCR1A&=~(1<<COM1A0);  //0

//режим шим c точной фазой и частотой
TCCR1A&=~(1<<WGM10);  //0
TCCR1A&=~(1<<WGM11);  //0
TCCR1B&=~(1<<WGM12);  //0
TCCR1B|=(1<<WGM13);  //1

//предделитель 8
TCCR1B|=(1<<CS11);  //1
TCCR1B&=~((1<<CS10)|(1<<CS12));  //0 0

OCR1A =25;  // 50% длительность импульса
ICR1=50;  // 20кГц

sei(); //разрешение прерываний

Код нужно добавить в Setup. Настраивается таймер - счетчик 1, только канал А, соответственно нужный сигнал будет только на пине D9. Частота задается значением в регистре ICR1. Ниже представлены протестированные значения и соответствующая им частота.
ICR1=10; // 100 кГц
ICR1=20; // 50 кГц
ICR1=30; // 33 кГц
ICR1=40; // 25 кГц
ICR1=50; // 20 кГц
ICR1=60; // 16,6 кГц
ICR1=70; // 14,3 кГц
ICR1=80; // 12,5 кГц
ICR1=90; // 11,1 кГц
ICR1=100; // 10 кГц

Если изменить предделитель, то частоты будут другие, например при предделителе 64 и ICR1=50, частота будет 2,5 кГц.

Скважность регулируется значением в регистре OCR1A, она зависит от значения в ICR1, таким образом, что максимальное значение OCR1A равно значению в ICR1, если они равны получится постоянный сигнал. При значении OCR1A = ICR1 / 2 получится меандр (длительность импульса и длительность паузы между импульсами равны). Еще пример: при ICR1 = 50 (20кГц) и OCR1A = 10, длительность импульса будет 20%.

В loop можно менять значение OCR1A и соответственно будет меняться скважность.

Протестировано в Proteus, затем было выполнено на Arduino Nano, все работает.

P.S. Если кто - то знает еще рабочие способы изменения частоты шим и скважности, особенно на таймере - счетчике 2 буду благодарен за информацию.

Arduino. Регулировка частоты ШИМ настройками таймера - счетчика Arduino, Шим, Длиннопост

UPD: Еще один вариант

Arduino & Pi

1.2K постов19.4K подписчиков

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Подробнее
Лучшие посты за сегодня
9326

Друзья познаются в беде

9084

Смена работы. Фиаско

8777

Раньше было лучше

Раньше было лучше
8557

Род. Комитет без пыток

В фонд не входят:
Подарки на Новый год;
Траты на выпускной;
Поздравления воспитателей с праздниками (дни рождения, новый год, 8марта);

Вы можете перевести всю сумму сразу, а можно разделить на несколько переводов (желательно в течение 2-3 месяцев);

Реквизиты для перевода

В комментариях укажите имя и фамилию ребенка за кого перевод.
Отписываться о переводе в чате не нужно - раз в день я буду публиковать все приходы списком"
3. Как я веду учёт денег:
на Гугл.Таблицах у меня соответственно таблица, с пунктами приход, расход, остаток. Ссылка на таблицу закрепляю в чате, и любой родитель, в любое удобное время может посмотреть сколько осталось, и сколько потрачено.
Дам вам ссылку на таблицу, которую вы можете забрать себе (доступ и экспорт, создать копию)

https://docs.google.com/spreadsheets/d/1mC_5Nrd3-0gDr-1C0ZLo...

Для хранения бюджета у меня открыт счет, куда я скидываю все приходы. Приходы получаю на отдельную карту (у меня карта для всяких интернет-покупок, и денег на ней всегда О, поэтому не путаются средства). Когда нужно что-то купить, просто снимаю/перевожу со счета на карту и использую.


Вот вроде и всё, это основные моменты, которые помогли мне исключить множество раздражающих моментов в род.чате. Возможно, у вас иной подход, свой взгляд и где-то вы со мной не согласны, это нормально) мне удобно, и если кто-то возьмёт на заметку мой опыт, я буду только рада!

Показать полностью
8067

Атеизм

Атеизм
8064

Хороший совет, поможет ли?

Хороший совет, поможет ли? Грань будущего, Том Круз, Мобилизация, Картинка с текстом, Юмор
Показать полностью 1
7696

А может без ёлки?

А может без ёлки? Политика, Челябинск, Мобилизация, Новый Год, Частичная мобилизация, СВО, Новости
7155

Ответ на пост «Стоматологи»

6981

Всё ещё едем

6650

Карта метро Токио

Карта метро Токио Япония, Токио, Метро, Общественный транспорт, Железная дорога
6332

Теперь всё стало ясно...

Теперь всё стало ясно...
6299

Чистка дуршлага

6223

В России зарегистрировали первый иск об оспаривании призыва в рамках мобилизации



В России зарегистрировали первый иск об оспаривании призыва в рамках мобилизации Мобилизация, Частичная мобилизация, Суд, Иск
Показать полностью 1
6095

Бывает

Бывает
6048

В мире животных

В мире животных
5964

Да просто люди еб@нулись

Да просто люди еб@нулись Юмор, Комментарии на Пикабу, Скриншот, Комментарии, Мат
5876

Неудобно получилось

Неудобно получилось Юмор, Картинка с текстом, Видеочат, Бритье
Показать полностью 1
5803

Джонни, смотри на руки!

Джонни, смотри на руки! Нейронные сети, Компьютерная графика, Арт, Девушки, Мимик, Длиннопост, Скриншот, Юмор
Джонни, смотри на руки! Нейронные сети, Компьютерная графика, Арт, Девушки, Мимик, Длиннопост, Скриншот, Юмор
Джонни, смотри на руки! Нейронные сети, Компьютерная графика, Арт, Девушки, Мимик, Длиннопост, Скриншот, Юмор
Показать полностью 3
5782

Эх

Эх
5311

Том Харди делает селфи с маленькими фанатами

Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: