Управление 4-pin кулером на Arduino Nano
- Войдите на сайт для отправки комментариев
Всем доброго времени суток.
Вообщем понадобилось управлять 4-pin кулером на Arduino Nano.
Решил все сделать на втором таймере(3 pin PWM - OC2B). Сделал его настройки :
//Настройка таймера 2 //Сбрасываем регистры и обнуляем таймер TCCR2A = 0; TCCR2B = 0; TCNT2 = 0; TCCR2A = _BV(COM2B1) // не инвертированный выход на канале b | _BV(WGM20); // пятый тип:с корректировкой фазы №5, TOP = OCR2A TCCR2B = _BV(WGM22) // | _BV(CS20); // пределитель = 1 OCR2A = 160;//Максимум //Определяем 3 пин , как выход pinMode(3, OUTPUT); // OCR2B
У меня нет осцилогрофа и поэтому меня не покидают сомнения. Мне нужны 25кГц, для корректного управления вентилятором. Почитав форумы , я понял, что для меня лучший выбор Phase correct PWM(ШИМ с точной фазой) с отсечкой по OCR2A.
Но, у меня закрались сомнения по поводу расчета частоты для него , есть формула :
fOC0x=fclkI/O / N*512 где N - коефициент деления предделителя (1, 8, 64, 256, 1024).
Поправьте меня , если я не прав.
Число - 512 получается в формуле для Phase correct PWM - получается, так как он считает сначало от 0..255 , а потом и обратно 255..0. Соответственно, если я отсечку заменяю на свои 160, то получается для меня формула будет выглядеть, так :
fOC0x=fclkI/O / N*2*0CR2A -> fOC0x=fclkI/O / N*2*160 где N - коефициент деления предделителя (1, 8, 64, 256, 1024).
Или я что-то упустил или не правильно понял?
Извините , если это глупый вопрос. Появилась необходимость сделать собственный гигрометр, поэтому выбор пал на Arduino, с которой раньше знаком не был.
А в даташите почему-то другая. Для phase correct там написано
там ошибка?
Петрович,
это ты перекурил с утра. ТС имел в виду не скважность, а как раз установку частоты через неполный выбор диапазона ШИМ, примерно как ты делал вот здесь.
w1nn1ep00h,
1.
у тебя левая формула. И, в любом случае надо ставить скоюки, иначе у тебя сейчас неверная последовательность операция (твои 512 в числителе, а не в знаменателе).
2.
пример как делать ШИМ на любую частоту см по ссылке, что я дал выше, там на 40 кГц сделано. Если чего непонятно, спрашивай.
Смотрел по Phase Correct PWM здесь - http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html , там автор поясняет различие между быстрым PWM и точной фазой. А именно :
На основе чего , я и предположил, что 512(510) - это ни что иное , как проход до максимума и обратно, т.е. 255*2 = 510. Соответственно , если я меняю величину, то и частота возрастет, так как данное число стоит в знаменателе -
Просто , если 512 в числителе, то частота PWM будет выше частоты самого системного таймера, что быть априори не может.
Например - fOC0x = 8000000/1 * 512 = 8000000*512 = 4,096 ГГц - что быть не может, если 512 в числителе, как вы говорите. А если оно в знаменателе, тогда все сходится - 8000000/512 = 15625 = 15,625 кГц.
Ну и соответственно, если 512 - это 2 прохода до максимума, и изменив точку срабатывания на свою, например - 160, то получим -> fOC0x = 8000000/(1 * 2 * 160) = 25000 = 25 кГц.
Смотрел по Phase Correct PWM здесь - http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html
Смотрите лучше в даташите - это надёжнее. В #1 я привёл Вам формулу именно оттуда.
Я говорил по сути, так как 510 или 512 для знаменателя особо погоду не сделают.
Можете дать ссылку на оригинал даташита, если вас не затруднит? Чтобы опять не найти не совсем корректные данные.
От чё пиндосы проклятые творят! Ещё одного в Гугле забаили! Низашто нипрошто!
https://www.microchip.com/wwwproducts/en/ATmega328p#datasheet-toggle
тебе нужОн тот, што ATmega328P Automotive - Complete Datasheet
Благодарствую.