Официальный сайт компании Arduino по адресу arduino.cc
регулятор оборотов 3-x(4-x) проводного вентилятора
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 28/01/2018 - 16:33
Сделал себе жидкостное ожлаждение проца и 2-х видях, работа вентиляторов от мамки неустроила, а потому сделал регулятор от температуры теплоносителя. на 328 залил нановскую прошивку.
ШИМ работает на 25кГц
монитор порта через TTL адаптер показывает температуру, шим, заданную температуру, также через адаптер можно перепрошить.
также через монитор порта можно ввести заданную температуру
да, сделано через делей, ибо лень, а быстрее мне не надо.
код
#include <EEPROM.h> word pwmA = 60; // 50% duty (0-320 = 0-100% duty cycle) word pwmB = 60; // 90% duty (0-320 = 0-100% duty cycle) #define datchik A0 unsigned long temp = 0; unsigned long temp1 = 0; int Tzad = 300; int pwmA1 = 0; void setup() { Serial.begin(9600); pinMode(datchik, INPUT); pinMode(9, OUTPUT); //pwmA pinMode(10, OUTPUT); //pwmB byte xx[] = {EEPROM.read(0), EEPROM.read(1)}; int *y = (int *)&xx; Tzad = y[0]; } void loop() { if (Serial.available() > 0) { Tzad = Serial.parseInt(); byte *x = (byte *)&Tzad; EEPROM.write(0, x[0]); EEPROM.write(1, x[1]); } pwmA1=pwmA; if(temp<=Tzad){pwmA = 1;pwmB = 1;} if(temp>Tzad){pwmA = 80;pwmB = 80;} if(temp>Tzad+10){pwmA = 100;pwmB = 100;} if(temp>Tzad+13){pwmA = 120;pwmB = 120;} if(temp>Tzad+16){pwmA = 140;pwmB = 140;} if(temp>Tzad+19){pwmA = 160;pwmB = 160;} if(temp>Tzad+22){pwmA = 180;pwmB = 180;} if(temp>Tzad+25){pwmA = 200;pwmB = 200;} if(temp>Tzad+28){pwmA = 220;pwmB = 220;} if(temp>Tzad+31){pwmA = 240;pwmB = 240;} if(temp>Tzad+34){pwmA = 260;pwmB = 260;} if(temp>Tzad+37){pwmA = 280;pwmB = 280;} if(temp>Tzad+41){pwmA = 300;pwmB = 300;} if(temp>Tzad+44){pwmA = 320;pwmB = 320;} if(pwmA1!=pwmA){aaaa();} readtemp(); Serial.println(Tzad); Serial.println(temp); Serial.println(pwmA); Serial.println(" "); delay(1000); } //--------------------------------------------------------------------------------------------------------------------------------------------------------------- void readtemp() { temp1=0; for (int i=0; i <= 150; i++){ temp =( analogRead(datchik)/1023.0 )*5000; temp1=temp1+temp; delay(5); } temp=temp1/150; } void aaaa() { TCCR1A = 0; //clear timer registers TCCR1B = 0; TCNT1 = 0; TCCR1B |= _BV(CS10); //no prescaler ICR1 = 320; //PWM mode counts up 320 then down 320 counts (25kHz) OCR1A = pwmA; //0-320 = 0-100% duty cycle TCCR1A |= _BV(COM1A1); //output A clear rising/set falling OCR1B = pwmB; //0-320 = 0-100% duty cycle TCCR1A |= _BV(COM1B1); //output B clear rising/set falling TCCR1B |= _BV(WGM13); //PWM mode with ICR1 Mode 10 TCCR1A |= _BV(WGM11); //WGM13:WGM10 set 1010 }
файлы протеуса и трафарета лут
https://drive.google.com/open?id=1GsBqYYh5u7eZOc5mfkStr_XSIFF8BrEf
Круто!
Это про Вас на лурке писали: «Цифровик. … Радиолюбитель, осознавший всю мощь микроконтроллеров и старающийся впихнуть их даже туда, где можно обойтись одним транзистором»??? :))))
неа, и вообще написал просто чтобы как всегда не протерять прошивку при очередной сносе винды)))
кстати обманул, можно управлять только 4-х проводными вентиляторами