Scott Vincent / temp_fan
Committer:
khaiminhvn
Date:
Wed Mar 17 14:20:14 2021 +0000
Revision:
1:1faa8c2f5507
Parent:
0:c8b4d53dbed4
Child:
2:1158cc58bf61
Edited to be implemented into the main code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tsmith10 0:c8b4d53dbed4 1 #include "mbed.h"
tsmith10 0:c8b4d53dbed4 2 #include "temp_fans.h"
khaiminhvn 1:1faa8c2f5507 3 #include "Defs_Sett.h"
khaiminhvn 1:1faa8c2f5507 4 #include "PinAssignment.h"
tsmith10 0:c8b4d53dbed4 5
tsmith10 0:c8b4d53dbed4 6
khaiminhvn 1:1faa8c2f5507 7 temp_fans::temp_fans():LM35(PIN_LM35),fan(PIN_FAN){
khaiminhvn 1:1faa8c2f5507 8 flag = 0;
khaiminhvn 1:1faa8c2f5507 9 }
khaiminhvn 1:1faa8c2f5507 10
khaiminhvn 1:1faa8c2f5507 11 float checkTemp();
tsmith10 0:c8b4d53dbed4 12
khaiminhvn 1:1faa8c2f5507 13 void temp_fans::checkTemp(int* mode) {
khaiminhvn 1:1faa8c2f5507 14 float temp, duty_cycle;
khaiminhvn 1:1faa8c2f5507 15 fan.period_us(TEMP_PERIOD); // 40 micro second period (25KHz) for fan PWM
khaiminhvn 1:1faa8c2f5507 16
khaiminhvn 1:1faa8c2f5507 17 temp = getTemp();
tsmith10 0:c8b4d53dbed4 18
khaiminhvn 1:1faa8c2f5507 19 float m = 1/(TEMP_HIGH-TEMP_LOW);
khaiminhvn 1:1faa8c2f5507 20 duty_cycle = (temp<TEMP_LOW) ? 0: (temp>TEMP_HIGH) ? 1: m*temp+(-TEMP_LOW/(TEMP_HIGH-TEMP_LOW));
khaiminhvn 1:1faa8c2f5507 21 if(*mode == OP_NORMAL || *mode == OP_WIND || *mode == OP_OVERHEAT)
khaiminhvn 1:1faa8c2f5507 22 *mode = (temp >= TEMP_HIGH) ? OP_OVERHEAT : *mode;
khaiminhvn 1:1faa8c2f5507 23 else
khaiminhvn 1:1faa8c2f5507 24 *mode = (temp >= TEMP_HIGH) ? OP_OVERHEAT_MAN : *mode;
khaiminhvn 1:1faa8c2f5507 25 *mode = (*mode == OP_OVERHEAT && temp <= (TEMP_HIGH - TEMP_HYST))? OP_NORMAL: *mode;
tsmith10 0:c8b4d53dbed4 26
khaiminhvn 1:1faa8c2f5507 27 fan.write(duty_cycle); // Duty cycle (relative to period)
khaiminhvn 1:1faa8c2f5507 28 }
khaiminhvn 1:1faa8c2f5507 29
khaiminhvn 1:1faa8c2f5507 30 float temp_fans::getTemp(){
khaiminhvn 1:1faa8c2f5507 31 float temp = 0;
khaiminhvn 1:1faa8c2f5507 32
khaiminhvn 1:1faa8c2f5507 33 for(int i=0; i<TEMP_AVG; i++) {
khaiminhvn 1:1faa8c2f5507 34 temp += LM35.read();
khaiminhvn 1:1faa8c2f5507 35 wait_us(TEMP_DELAY);
tsmith10 0:c8b4d53dbed4 36 }
tsmith10 0:c8b4d53dbed4 37
khaiminhvn 1:1faa8c2f5507 38 temp=(temp/TEMP_AVG*VCC)*100; //Average & factor for analog to temperature conversion
tsmith10 0:c8b4d53dbed4 39
khaiminhvn 1:1faa8c2f5507 40 return temp;
khaiminhvn 1:1faa8c2f5507 41 }
tsmith10 0:c8b4d53dbed4 42
tsmith10 0:c8b4d53dbed4 43
tsmith10 0:c8b4d53dbed4 44