sorry,Zitat von jar
hier nochmal eine Beschreibung als pdf
nö, hab kein Wort verstanden, aber ein funktionierendes PWM hab ichZitat von karthago
LED Hintergrundbeleuchtung fürs Display + Kontrasteinstellung
Hz weiss ich nicht mal (100Hz?) müsste ich am Di auf dem Oszi schauen
OCRA1 macht LED über Treibertrasi
OCR1B macht D/A Wandlung über R/C auf Vo Display -> Kontrast
eingestellt wird es noch per RC5, später Taster oder Touchscreenfolie
eingestellt werden können natürlich beide einzeln, wobei mr bis jetzt Kontrast max am besten gefällt, nahe 0V, und der ADC0 misst die Ub, Ref LM4040 1%, Teiler von Ub 24k/12k = 1/3 gibt bei 5V und 1023max um 670 mul mit Scaler 0,07xxxx und mul mit 100 gibt schöne 500 integer für 5V , nun noch den Dezimalpunkt per Stringfunktion einfügen, irgendwie ist dieses C nicht wirklich mathe tauglich , habe mit float und double in ftoa kein richtigen Erflg gehabt, aber so gehts auch D)
sorry,Zitat von jar
hier nochmal eine Beschreibung als pdf
Wie Du dann auf die Formel 0.3 < ( adc_result / VCC) < 0,7 kommst ist mir zwar schleierhaft, aber ich muß ja nicht alles verstehen.Also der Sensor liefert eine Spannung die zwischen 0,5 und 4,5 V
Die PWM Frequenz ergibt sich aus der (Taktfrequenz / 65536)/ eingestellten Prescale Faktor. Das Alles für Timer 1.
Hau mich jetzt nicht wenns nicht stimmt - kann auch sein das man noch durch 2 teilen muß.
Die PWM Frequenz ist also bei hardwaremässiger Ansteuerung nicht frei einstellbar ! Näherungsweise solltest Du aber hinkommen.
Durch geschickte Auswahl des Quarzes sollte es auch möglich sein, die gewünschte PWM Frequenz genau zu treffen.
Hallo Kathargo,
ich glaube du hast da etwas falsch verstanden. Ich habe das Datenblatt kurz überflogen. So wie ich das sehe, regelt der Lüfter sich selbst und zwar per pwm.
Das Regelsignal selbst ist kein pwm-signal! sondern gleichstrom. Dieses kannst du zwar auch per pwm erzeugen, aber musst es noch filtern (und ich finde es sinnlos).
Der Lüfter hat bei 0.3V einen duty cycle von 0%, bei 0.7 sind es 100%, der Zwischenraum wird linear aufgeteilt. Wenn du diesen Lüfter abhängig von der Temperatur steuern willst, dann lies die letzten Zeilen. Dort wird die Verwendung eines NTC-Sensors angesprochen.
Wenn du einen Lüfter per mikrocontroller regeln willst: Google ist dein Freund. Am interessantesten scheint ein step-down Wandler zu sein, weil moderne Lüfter eine interne Elektronik zum Ansteuern der Spulen haben und es Probleme mit reiner PWM gibt. Dabei regelst du aber die Versorgungsspannung und kannst damit jeden beliebigen Lüfter regeln.
Wenn du wirklich nur diesen einen Lüfter per mikrocontroller regeln möchtest: Schlag nach, wie ein PWM Signal allgemein erzeugt wird. Du hast einen Spielraum von 0V bei 0% duty cycle bis 5V bei 100% duty cycle. Bei 10 Bit = 1024 sind das 5V/1024 = 4,9mV Schritte. Deinen Bereich von 0.3 bis 0.7V kannst du also auf (0.7V-0.3V)/0.0049V = 81 Schritt aufteilen.
In C kannst du Beispielcode für pwm benutzen. Den Bereich, in welchem geregelt wird wirst du wohl anpassen können
Auf die Schnell habe ich https://www.roboternetz.de/wissen/in...LED_blinken%29
gefunden, dort wird wenigstens die Verwendung von Timern erklärt.
Das zweite Problem (welches ich auch noch nicht gelöst habe):
Wenn du den Wert des PWM Signals misst, erhältst du nur Mist. Wenn die Messung im off-Teil erfolgt, misst du 0V, im on-Teil 5V (in der Realität natürlich nie ganz 0V/5V). Deswegen muss das Signal über einen Tiefpass integriert werden (glaube ich! Da scheitere ich im Moment).
Ach ja, warum verwendest du eine Frequenz von 300Hz für die PWM? Das ist unnötig langsam.
Servus Avion
Merci für Deine Antwort,
Eigentlich ich möchte in diesem System :
Bild hier
Bild hier
den Bauteil MIC502 (Fan Management ) durch Atmega32 ersetzen, also der µC übernimmt die Aufgabe.
Laut der Datenblatt vom MIC502, wie ich es verstanden habe wenn Vh/Vcc = 0,7 haben wir 100% duty cycle und wenn Vh/Vcc= 0,3 haben wir 0% duty cycle.
ich möchte die Spannung vom Hall-Sensor (Vh) mit ADC eilesen ( 10 Bit mit Ref Spannung Vcc= 5V)
dann diesen Wert ( adc_result) durch 1024 teilen.
0,7 ~ 716 ( 0,7*1024)
wenn adc_result/1024 =~ 716 habe ich ein 100 % duty cycle
so möchte ich mein PWM signal einstellen
Ich glaub das mit dem ADC hast Du falsch verstanden.
Wenn Du 5V Referenzspannung verwendest hast du 0,7/(5V/1024) und da kommt dann ~ 143 dabei raus.
Wenn Du die interne Referenz des ATMEGA 32 verwendest kommt 0,7/(2,56V/1024) = 280 raus.
Die komplette Auflösung des Knotens hab ich die eigentlich schon ein paar Antworten früher gegeben ?!
Eine bessere Auflösung könntest Du noch kriegen, wenn Du das Gebersignal 0,3...0,7V mit einem Op Amp um den Faktor von 3,5 Verstärkst.
Legst Du am Verstärker einen Offset von 0,3V an, kann die Verstärkung auch etwas mehr als 6 betragen und du nutzt die Volle Bandbreite des A/D Wandlers aus.
Wenn ich ehrlich bin würd ich aber so eine Aufgabe nicht mit einem Microcontroller lösen.
Warum nimmst Du nicht einfach einen Mehrfach Operationsverstärker? Einer Arbeitet als Sägezahngenerator, ein zweiter als Komperator, an dem an einem Pin die Sägezahnspannung im Bereich von 0,3...0,7V und am Anderen die Spannung vom Sensor auch 0,3...0,7V anliegt ?
Die Schaltung reagiert schneller als das ein Microcontroller je könnte und erfordert auch nicht wesentlich mehr Hardwareaufwand.
Erstens:
Wenn am Eingang 0.7V anliegen, dann ist dein ADC-Wert = 0.7V/0.0048V = 146. Wenn am Eingang 0.3V anliegen, dann ist ADC = 0.3/0.0048V = 63.
Zweitens:
Ich weiß nicht wie man das konkret löst. Wenn dein PWM Signal z.B. einen 16Bit Wert erwartet wäre es WAHRSCHEINLICH etwas in dieser Richtung:
PWM = 65536 für 100%, 0 für 0%.
Also soll bei 0.7V = 146 am ADC der Wert 65536 in das Register geschrieben werden, bei 0.3V = 63 dementsprechend 0.
Die Differenz zwischen 146 und 63 ist 83.
Also ist die Funktion PWM = 65536 * (ADC-63)/83
Die 63 musst du von ADC abziehen um die 0.3V als Nullpunkt definieren, dann wird (ADC-63)/83 für ADC==146 eins, bei ADC==63 aber null.
Übrigens hättest du doppelt soviele Schritt, wenn du die interne Referenz statt den 5V (die wahrscheinlich auch noch schwanken) verwendest.
Ich glaube aber, dass du eigentlich etwas ganz anderes möchtest. Aber ich komme nicht drauf... deswegen antworte ich auf das, was du gefragt hast.
Hallo ,
0,7 und 0,3 sind keine Spannung, sie sind das ergebnis vom Vh/Vcc.
ADC = Vh * (1024/Vref)
für Vref= 5V
und wenn ich zb eine Vh von 2,5V hab dann ist ja ADC = 512
Vh/Vcc = 512/1024 = 0,5
= > 0,7 = x / 1024 => 0,7 * 1024 = 716
Das oben geschriebene hat damit aber weiterhin Gültigkeit, nur das sich der Skalierungsfaktor ändert.
Du kriegst also somit Wandlerwerte zwischen 307,2 und 716,8 raus.
Deine Formel für den PWM Wert lautet also:
((X*5V/(5V/1024) - 30* 161
wobei X dann der Faktor von 0,3 bis 0,7 ist.
Die Werte stimmen zwar nicht ganz genau, stellen aber sicher, das 0 bis 100% PWM erreicht werden können.
Werte über 65535 und unter 0 müssen natürlich per Software abgefangen werden.
kannst Du mir bitte erklären wie Du auf 161 gekommen bist ??
Lesezeichen