Управление 4pin-вентилятором ШИМ 25 Khz

kovit
Offline
Зарегистрирован: 16.03.2017

Возникла необходимость регулировки оборотов 4-х пинового вентилятора с помощью ардуино.

По даташиту http://www.formfactors.org/developer/specs/4_Wire_PWM_Spec.pdf 

требуется ШИМ с частотой от 21 до 28 кГц.

Нашел пример получения 25 кГц https://forum.arduino.cc/index.php?topic=415167.0

Загрузил скетч :

01#include <Wire.h>
02 
03word VentPin = 3;
04 
05void setup() {
06  Wire.begin();
07  pinMode(VentPin, OUTPUT);
08  pwm25kHzBegin();
09}
10 
11void loop() {
12 
13  pwmDuty(19); // 25% (range = 0-79 = 1.25-100%)
14  delay(5000);
15  pwmDuty(39); // 50% (range = 0-79 = 1.25-100%)
16  delay (5000);
17  pwmDuty(59); // 75% (range = 0-79 = 1.25-100%)
18  delay (5000);
19  pwmDuty(79); // 100% (range = 0-79 = 1.25-100%)
20  delay (5000);
21}
22 
23void pwm25kHzBegin() {
24  TCCR2A = 0; // TC2 Control Register A
25  TCCR2B = 0; // TC2 Control Register B
26  TIMSK2 = 0; // TC2 Interrupt Mask Register
27  TIFR2 = 0; // TC2 Interrupt Flag Register
28  TCCR2A |= (1 << COM2B1) | (1 << WGM21) | (1 << WGM20); // OC2B cleared/set on match when up/down counting, fast PWM
29  TCCR2B |= (1 << WGM22) | (1 << CS21); // prescaler 8
30  OCR2A = 79; // TOP overflow value (Hz)
31  OCR2B = 0;
32}
33 
34void pwmDuty(byte ocrb) {
35  OCR2B = ocrb; // PWM Width (duty)
36}

Работает, но получена ли требуемая частота в реале, проверить не могу -  к сожалению, не имею доступа к соответствующей измерительной аппаратуре.

Если счастливые обладатели осциллографа помогут - буду благодарен.

Волшебник
Offline
Зарегистрирован: 22.12.2016

А кто мешает запустить в том же скетче частотомер? Соедините два пина и экспериментируйте, пока 25к не побежит. 

kovit
Offline
Зарегистрирован: 16.03.2017

Спасибо за идею, Волшебник!

Загрузил на вторую ардуинку скетч, взятый с этого форума, законнектил платки.

На скрине результат - искомые 25 кГц.