Damit die Fangspiegelheizung nicht immer mit einem ganzen Watt Heizleistung arbeitet, versorgt sie diese Pulsweitensteuerung.
Schaltung der Pulsweitensteuerung
Die Schaltung entkoppelt die Pulsweitensteuerung über C1 und die Schottkydiode D1 vom Rest des Systems. Das reduziert Rückflüsse aus der PWM auf die Eingangstromversorgung, wo ja auch die Astrokamera dranhängt. Die ganze PWM-Steuerung ist über einen ATtiny85 realisiert. Über einen Taster kann man zyklisch 33%, 66% oder 99% der maximalen Heizöeistung anfordern. Die Heizung selber wird über einen MOSFET gesteuert. Die Schaltung soll möglichst robust sein. Deswegen habe ich diesen Transistor so ausgewählt, dass er eigentlich in dieser Schaltung nicht kaputt gehen dürfte (62A / 30V).
Da der USB-Hub des Elektronikmoduls auch noch 5 Volt Versorgungsspannung braucht, habe ich ein passendes Schaltreglermodul gleich mit eingebaut.
ProgrammCode
Der Programmcode für den ATtiny 85 ist nachfolgend gelistet.
/* ###################################################################################### ## PWM-ATTINY.INO ## ## Kleines Programm für ATTINY85 zur Steuerung einer Fangspiegelheizung. Die ## FSP-Heizung muss so ausgelegt sein, dass bei direktem Anschluss an 13 Volt ## etwa 1W Heizleistung entsteht. Die hier vorliegende Steuerung bietet drei ## Stufen: 33, 66 und 99 Prozent. Nach dem Einschalten ist als Default die ## 33% Stufe aktiviert. Drücken des Tasters schaltet zyklisch die Modi durch: ## 33% -> 66% -> 99% -> 33% usw. Je nach aktiviert Stufe blitzt die LED ## unterschiedlich schnell auf: ## 33% : T=2.0s ## 66% : T=1.0s ## 99% : T=0.5s ## ## Kai Wicker, 28.02.2020 ## ## 01.03.2020, V1.0: initial version based on FSP-Heizer-attiny.ino ## 05.03.2020, V1.1: erste lauffähige Version auf Steckbrett, erfolgreiche ## Verifikation der Ausgabewerte per Oszi ## 07.03.2020, V1.2: ein Tastendruck wir jetzt mit hellem Leuchten der LED ## quittiert ## ####################################################################################### */ //#define DEBBUG /* im DEBUG Modus kann ueber IC-Pin2 = PB3 eine serielle Schnitstelle */ /* zum Ausgeben von Debugginginformationen benutzt werden. Hier wird */ /* dann der gleich Wert ausgegeben, der in das PWM-Register */ /* geschrieben wird. */ #ifdef DEBUG #include const int rx = -1; // nicht benutzt const int tx = 3; // Pin 2 = PB3 SoftwareSerial mySerial(rx,tx); #endif #define LED 4 // IC-Pin 3 = PB4 #define PWM 1 // IC-Pin 6 = PB1 #define TASTER 2 // IC-Pin 7 = PB2 // default values for start-up (default): int hell = 1, pause = 1995; int TASTE = 3, PWM_WERT = 33; volatile unsigned long alteZeit = 0, entprellZeit = 20; void setup() { #ifdef DEBUG pinMode(rx,INPUT); pinMode(tx,OUTPUT); mySerial.begin(9600); #endif pinMode(LED, OUTPUT); pinMode(TASTER, INPUT); pinMode(PWM, OUTPUT); attachInterrupt(0, interruptRoutine, LOW); digitalWrite(LED, HIGH); delay (5000); digitalWrite(LED, LOW); } void loop() { #ifdef DEBUG mySerial.println(PWM_WERT/100.0*255); #endif timing (pause, hell); analogWrite(PWM,PWM_WERT/100.0*255) ; digitalWrite(LED, HIGH); delay (hell); digitalWrite(LED, LOW); delay (pause); } void interruptRoutine() { digitalWrite(LED, HIGH); if((millis() - alteZeit) > entprellZeit) { TASTE = TASTE -1; if (TASTE==0) TASTE = 3 ; alteZeit = millis(); } } void timing (int &pause, int &hell) { switch (TASTE) { case(1): pause = 495; hell = 1; PWM_WERT = 99; break; case(2): pause = 995; hell = 1; PWM_WERT = 66; break; case(3): pause = 1995; hell = 1; PWM_WERT = 33; break; default: pause = 1995; hell = 1; PWM_WERT = 33; break; } }