Управлять вентилятором 12 В 4-pin pwm через arduino UNO

Всем привет, нужно сделать управление вентилятором Noctua NF-A15 PWM (NF-A15 PWM) - 140mm с arduino UNO читал что из-за того что 16 МГц а вентиляторов 25-86 МГЦ на минимальные обороты выставить не получится, есть инструкция для чайников?
Датаshit который нашёл:

Может вы где-то не внимательно читали? Может 86Гц?А какие вам минимальные обороты надо?

а в аппаратных что тема делает?

Так ТС дохтур, сейчас всё на аппаратах лечат.)))

2 лайка

Ничего сложного. Частота 25кГц

• Target frequency: 25kHz, acceptable range 21kHz to 28kHz
• Maximum voltage for logic low: VIL=0,8V
• Absolute maximum current sourced: Imax=5mA (short circuit current)
• Absolute maximum voltage level: VMax=5,25V (open circuit voltage)
• Allowed duty-cycle range 0% to 100%

P.S. То есть , обычный analogWrite() с дефолтными настройками не подойдёт.
Почитайте на тему “ШИМ Ардуино” всё разжёвано.
Сигнальный пин ардуинки подключайте через резистор 1.5 -2кОм

Да, не совсем так. Всё же сложновато для начинающего будет.25КГц не так просто на ардуино НАНО/УНО сделать
Варианты:

  1. Взять ATtiny и нужный кварц( 12МГц подходит для 23.529КГц)
  2. Использовать библиотеку, хотя-бы того-же Гайвера

ардуина тут явно лишняя

А чего там не простого? Вот, пожалуйста – ровно 25 кГц, на пине D9 (Uno/Nano и т.п. с 16МГц), управление от 0 до 320.

#include <bitmask.h>

//
// ШИМ на пине 9
//	25kHz
//	Управление от 0 до 320
//
void initTimer1(void) {
	DDRB |= bitMask(PB1);
	TCCR1A = bitMask(COM1A1);
	OCR1A = 0;
	ICR1 = 320;
	TCCR1B = bitMask(WGM13, CS10);
}

//
// Управление ШИМ на пине 9 от 0 до 320
//	Если хочется 0-100, то это закомментировать и открыть функцию ниже
//
inline void setPWMDuty(const uint16_t duty) {
	OCR1A = duty;
}

//
// Управление ШИМ на пине 9 от 0 до 100
//	(вообще-то от 0 до 320)
//
// inline void setPWMDuty(const uint16_t duty) {
// 	OCR1A = (duty * 320u + 50u) / 100u;
// }


void setup(void) {
	initTimer1();
	setPWMDuty(80);
}

void loop(void) {}

Используется “библиотека” bitmask,

вот она
#ifndef	BITMASK_H
#define	BITMASK_H

inline constexpr uint8_t bitMask(const uint8_t m1) { return 1 << m1; }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2) { return bitMask(m1) | bitMask(m2); }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2, const uint8_t m3) { return bitMask(m2, m3) | bitMask(m1); }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2, const uint8_t m3, const uint8_t m4) { return bitMask(m2, m3, m4) | bitMask(m1); }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2, const uint8_t m3, const uint8_t m4, const uint8_t m5) { return bitMask(m2, m3, m4, m5) | bitMask(m1); }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2, const uint8_t m3, const uint8_t m4, const uint8_t m5, const uint8_t m6) { return bitMask(m2, m3, m4, m5, m6) | bitMask(m1); }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2, const uint8_t m3, const uint8_t m4, const uint8_t m5, const uint8_t m6, const uint8_t m7) { return bitMask(m2, m3, m4, m5, m6, m7) | bitMask(m1); }
inline constexpr uint8_t bitMask(const uint8_t m1, const uint8_t m2, const uint8_t m3, const uint8_t m4, const uint8_t m5, const uint8_t m6, const uint8_t m7, const uint8_t m8) { return bitMask(m2, m3, m4, m5, m6, m7, m8) | bitMask(m1); }

#endif	//		BITMASK_H

@НАШ_СЛОН , пользуйтесь на здоровье.

3 лайка

Вот это надо! У меня, кстати, есть!

я потом подумал, что может у него уже есть ардуина и надо на ней, хотя на таймере (555) и проще и точней (чистый ламповый звук аднака)

Не думаю, что точнее. RC-цепочка против кварца … ну, не думаю.

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

ну почему, КСО группы Г и многооборотный резистор из константана, ну как там обычно в приборах делали, хотя разрешение в 320 ему будет за глаза, но, там жеж программировать не надо, хотя всё выложено на блюдечке, а вот если ему надо что-то автоматизировать и этот ШИМ будет задействован, тогда вступает работу его величество микроконтроллер, хотя на жёсткой логике тоже можно сделать (делали же до микроконтроллеров), но проще - программно

Эта фраза имеет и другую трактовку (“на” в смысле “для улучшения”, т.е. “на здоровье” == “чтоб быть здоровым”). Я трактую её именно так.

Ну, вот, началось :frowning:

пусть ставит какие есть, всё одно точности там за глаза
PS может для этого вентилятора линейное приращение длительности совсем не катит, кто ж знает, кто ж знает

Спасибо, попробую отпишу

Кстати, в книге Шелестова я видел вот такую схему с кварцем. В натуре я её не собирал, но в протеусе работать отказалась :frowning:

должен работать, тут исследование генератора на логике Кварцевый генератор на логическом инверторе 74HC04 | Записки программиста