From 1874cb71a62ee17d720d106a58ab684263abaa20 Mon Sep 17 00:00:00 2001 From: Erik van der Zalm Date: Wed, 2 May 2012 19:26:14 +0200 Subject: [PATCH] Added option to increase the FAN PWM frequency. --- Marlin/Configuration.h | 5 ++- Marlin/Marlin.h | 4 +++ Marlin/Marlin.pde | 71 ++++++++++++++++++++++++++++++++++++++++++ Marlin/temperature.cpp | 3 ++ 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index cd1490a1c7..f15876770e 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -8,7 +8,7 @@ //User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup. //Implementation of an idea by Prof Braino to inform user that any changes made //to THIS file by the user have been successfully uploaded into firmware. -#define STRING_VERSION_CONFIG_H "2012-02-25" //Personal revision number for changes to THIS file. +#define STRING_VERSION_CONFIG_H "2012-05-02" //Personal revision number for changes to THIS file. #define STRING_CONFIG_H_AUTHOR "erik" //Who made the changes. // This determines the communication speed of the printer @@ -230,6 +230,9 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th #endif #endif +// Increase the FAN pwm frequency. Removes the PWM noise but increases heating in the FET/Arduino +#define FAST_PWM_FAN + // M240 Triggers a camera by emulating a Canon RC-1 Remote // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ // #define PHOTOGRAPH_PIN 23 diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index d1169f4ef7..5bb728c6fa 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -170,6 +170,10 @@ bool IsStopped(); void enquecommand(const char *cmd); //put an ascii command at the end of the current buffer. void prepare_arc_move(char isclockwise); +#ifdef FAST_PWM_FAN +void setPwmFrequency(uint8_t pin, int val); +#endif + #ifndef CRITICAL_SECTION_START #define CRITICAL_SECTION_START unsigned char _sreg = SREG; cli(); #define CRITICAL_SECTION_END SREG = _sreg; diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 8be47f8b72..1f29087665 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -36,6 +36,7 @@ #include "watchdog.h" #include "EEPROMwrite.h" #include "language.h" +#include "pins_arduino.h" #define VERSION_STRING "1.0.0 RC2" @@ -1512,4 +1513,74 @@ void Stop() bool IsStopped() { return Stopped; }; +#ifdef FAST_PWM_FAN +void setPwmFrequency(uint8_t pin, int val) +{ + val &= 0x07; + switch(digitalPinToTimer(pin)) + { + + #if defined(TCCR0A) + case TIMER0A: + case TIMER0B: + TCCR0B &= ~(CS00 | CS01 | CS02); + TCCR0B |= val; + break; + #endif + + #if defined(TCCR1A) + case TIMER1A: + case TIMER1B: + TCCR1B &= ~(CS10 | CS11 | CS12); + TCCR1B |= val; + break; + #endif + + #if defined(TCCR2) + case TIMER2: + case TIMER2: + TCCR2 &= ~(CS10 | CS11 | CS12); + TCCR2 |= val; + break; + #endif + + #if defined(TCCR2A) + case TIMER2A: + case TIMER2B: + TCCR2B &= ~(CS20 | CS21 | CS22); + TCCR2B |= val; + break; + #endif + + #if defined(TCCR3A) + case TIMER3A: + case TIMER3B: + case TIMER3C: + TCCR3B &= ~(CS30 | CS31 | CS32); + TCCR3B |= val; + break; + #endif + + #if defined(TCCR4A) + case TIMER4A: + case TIMER4B: + case TIMER4C: + TCCR4B &= ~(CS40 | CS41 | CS42); + TCCR4B |= val; + break; + #endif + + #if defined(TCCR5A) + case TIMER5A: + case TIMER5B: + case TIMER5C: + TCCR5B &= ~(CS50 | CS51 | CS52); + TCCR5B |= val; + break; + #endif + + } +} +#endif + diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 783aa232d8..e21bd2598d 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -559,6 +559,9 @@ void tp_init() #endif #if (FAN_PIN > -1) SET_OUTPUT(FAN_PIN); + #ifdef FAST_PWM_FAN + setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8 + #endif #endif #ifdef HEATER_0_USES_MAX6675