Управление 4-pin кулером на Arduino Nano

w1nn1ep00h
Offline
Зарегистрирован: 01.04.2020

Всем доброго времени суток.

Вообщем понадобилось управлять 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, с которой раньше знаком не был.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

w1nn1ep00h пишет:
есть формула :

fOC0x=fclkI/O / N*512

где N - коефициент деления предделителя (1, 8, 64, 256, 1024).

А в даташите почему-то другая. Для phase correct там написано

там ошибка?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Петрович,

это ты перекурил с утра. ТС имел в виду не скважность, а как раз установку частоты через неполный выбор диапазона ШИМ, примерно как ты делал вот здесь.

w1nn1ep00h,

1.
у тебя левая формула. И, в любом случае надо ставить скоюки, иначе у тебя сейчас неверная последовательность операция (твои 512 в числителе, а не в знаменателе).

2.
пример как делать ШИМ на любую частоту см по ссылке, что я дал выше, там на 40 кГц сделано. Если чего непонятно, спрашивай.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ворота пишет:
Петрович, это ты перекурил с утра.
Да, действительно. Я убрал свой бред из поста, чтобы мозги никому не выносить. Спасибо, что не "ответил", а то я не смог бы почистить.

w1nn1ep00h
Offline
Зарегистрирован: 01.04.2020

Смотрел по Phase Correct PWM здесь - http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html , там автор поясняет различие между быстрым PWM и точной фазой. А именно :

ШИМ с точной фазой. Работает похоже, но тут счетчик считает несколько по другому.
 Сначала от 0 до 255, потом от 255 до 0. Вывод OCxx при первом совпадении 
сбрасывается, при втором устанавливается.

На основе чего , я и предположил, что 512(510) - это ни что иное , как проход до максимума и обратно, т.е. 255*2 = 510. Соответственно , если я меняю величину,  то и частота возрастет, так как данное число стоит в знаменателе - 

fOC0x=fclkI/O / (N*512)

Просто , если 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 кГц.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

w1nn1ep00h пишет:

Смотрел по Phase Correct PWM здесь - http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html

Смотрите лучше в даташите - это надёжнее. В #1 я привёл Вам формулу именно оттуда.

w1nn1ep00h
Offline
Зарегистрирован: 01.04.2020

Я говорил по сути, так как 510 или 512 для знаменателя особо погоду не сделают. 

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

От чё пиндосы проклятые творят! Ещё одного в Гугле забаили! Низашто нипрошто! 

https://www.microchip.com/wwwproducts/en/ATmega328p#datasheet-toggle

тебе нужОн тот, што ATmega328P Automotive - Complete Datasheet

w1nn1ep00h
Offline
Зарегистрирован: 01.04.2020

Благодарствую.