Hallo !
ich möchte mit einem ATMEGA32 ein PWM signbal erzeugen,
ich hab diese Übertragungsfunktion:
Y= 2,5 X - 0,75
Y: PWM Duty Cycle
0% PWM = 0,3 < Y < 100% PWM = 0,7
X: Sensorspannung
kann mir bitte jemand helfen ??
Merci
Druckbare Version
Hallo !
ich möchte mit einem ATMEGA32 ein PWM signbal erzeugen,
ich hab diese Übertragungsfunktion:
Y= 2,5 X - 0,75
Y: PWM Duty Cycle
0% PWM = 0,3 < Y < 100% PWM = 0,7
X: Sensorspannung
kann mir bitte jemand helfen ??
Merci
Die PWM Funktion läuft normalerweise im Timer 1 des ATMEGA32 und erwartet dort Werte zwischen 0 und (2^16)-1 für 0 bis 100% Duty Cycle.
Wenn Du also deine Formel mit einem Multiplikator von (2^16/100) versiehst sollte das eigentlich passen, obwohl ich den zweiten Teil deiner Formel nicht ganz verstehe.
meinst du die -0,75 ??
Nein ich meinte die zweite FormelZitat:
meinst du die -0,75 ??
0% PWM = 0,3 < Y < 100% PWM = 0,7 ????
Mit der Information über das Comparematchregister solltest Du aber trotzdem die nötigen Werte berechnen können.
achso , ich möchte einen Fan Management Bauteil ersetzen (MIC502) die werte habew ich vom Datasheet genommen.
kannst du mir bitte eklären was du mit 2^16/100 meinst und comparematchregister meinst, bin beginner :(
Also noch mal ganz von vorne.
Man bringt den Timer 1 in einen der verschiedenen PWM Modi.
Welchen PWM Mode Du brauchst musst Du anhand des Datenblattes selber rausfinden.
Dann wird ein Comparematchregister z.B. Comp1A mit einem Wert zwischen 0 und 65535 gefüttert.
Der Wert steht dann im direkten Zusammenhang mit der ausgegebenen Pulsbreite. Also 0 ist dauerhaft Low 65536 ist dauerhaft High.
Man kann aber auch invertet PWM machen die Puls Pausen verhältnisse sind dann umgekehrt.
Die Werte dazwischen produzieren dann die entsprechende Pulsweite.
Das ganze Spiel läuft nach der Konfiguration Hardwaremäßig ab und ist im Datenblatt des Controllers wirklich gut und umfangreich beschrieben.
Die Impulse kommen dann üblicherweise am OC1A Pin des Controllers raus.
Zum Ändern der Pulsweite muss das COMP1A dann nur wieder mit neuen Werten belegt werden. Auch dabei kann es zu sog. Glitches = Phasenfehlern kommen (Steht auch im Datenblatt). Wenn dich das aber nicht stört musst Du dagegen auch nichts unternehmen.
Als Tipp aus der Praxis kann ich Dir noch mitgeben, das Du an deinen Controller keine Großen Lasten hängst (LED's usw.) . Sonst wird je nach Belastung des Controllers die PWM Spannung schwanken.
Ist es trotzdem nötig höhere Lasen zu schalten solltest Du auf jeden Fall Treiber z.B. Mos Fet's oder integrierte Treiberbausteine verwenden.
@wkrug,
merci, ich werde die Datenblatt nochmal lesen und versuchen
laut der Datenblatt des FAN-Bauteil MIC502:
Vt = 0,7 Vcc = Vpwm max ( 100 % dutyCycle)
Vt = 0,3 Vcc = Vpwm min ( 0% duty Cycle )
Vt = die digitale Spannung die vom Sensor kommt
Vcc= 5 V
wie kann ich bitte das in c schreiben
bin total durcheinander :-s
Also die Spannung die vom Sensor kommt liegt zwischen 0,3 und 0,7V
diesen Wert solltest Du auf einen A/D Wandler legen, von denen der ATMEGA 32 8 Stück on Bord hat.
Der ATMEGA 32 hat eine interne Referenzspannungsquelle die 2,56V hat.
Also liefert eine Spannung von 2,56V einen A/D Wandlerwert von 1023.
Eine Spannung von 0,3V dürfte einen Wandlerwert 120 erzeugen.
Eine Spannung von 0,7V liefert einen Wandlerwert von 280.
Also du nimmst die werte vom A/D Wandler und ziehst 120 ab.
Nun teilst Du 65536 durch 280-120 und kommst damit auf den Skalierungsfaktor von ca. 410.
Also lautet deine Formel
PWM_Wert=(A/D_Wandlerwert-120)*410
Mit diesem Wert fütterst du das COMP1A Register und die Sache ist erledigt.
Du musst dann nur noch Wandler Werte <120 und PWM Werte über 65535 abfangen (if Abfragen) und dann sollte alles passen.
Was mich dabei noch ein wenig stört ist die etws grobe Abstufung der einzelnen Schritte - 160 insgesamt.
Aber wenn ich mich recht entsinne haben die A/D Wandler einen integrierten Vorverstärker mit dem man die 0,7V auf 1,4 oder gleich 2,1 V bringen könnte, was einer Verdopplung bzw. Verdreifachung der Auflösung bedeutet.
Mit dem ins Datenblatt schauen hab ich eigentlich das Datenblatt des ATMEGA 32 gemeint.
Ein komplettes C-Programm kann ich Dir jetzt nicht liefern.
Erstens Progge ich in Codevision AVR.
Zweitens ist mir das jetzt auch zu viel Arbeit.
@wkrug:
vielen Dank für Deine Antwort
Also der Sensor liefert eine Spannung die zwischen 0,5 und 4,5 V
ich will diese Spannung in Digital umwandeln, als refrenz Spannung habe ich Vcc genommen und die beträgt 5V
Dann
wenn Der Result vom ADC adc_result / VCC = 0,7 --> PWM Duty cycle = 100%
wenn ADC_result / VCC = 0,3 ---> PWM Duty cycle = 0%
dh 0.3 < ( adc_result / VCC) < 0,7
so muss das PWM Signal erzeugt
PWM frequenz soll 300 Hz sein
ich hoffe dass ich gut erklären konnte
Viele Grüße