Seiten: [1] 2 3 4
|
 |
|
Autor
|
Thema: Atmel und 4 PWMs (Gelesen 25744 mal)
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
hoi. ich will mir ne lĂŒftersteuerung basierend auf nem atmega16 bauen. dabei sollen 4 kanĂ€le per PWM angesteuert werden. der chip hat diese 4 PWMs, aber ich werd aus den DatenblĂ€ttern net schlau (google gibt garnichts her), wie ich die richtig einstell. ich verwende assembler, darum bringen mir die topics hier auch nix, da die alle in basic gemacht sind. Hat da jemand ne ahnung wie ich die ansteuer, oder ist es besser das irgentwie extern zu realisieren?!
cu philipp
|
|
|
Gespeichert
|
|
|
|
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
ok, thx. aber wie stell ich die timer ein? du hast das doch schonmal gemacht, oder? haste nen beispiel-code fĂŒr mich? ich find einfach nix dazu  die sekĂŒndliche abfrage der temperatursensoren werde ich wohl mit nem 555er und normalem interrupt machen 
edit: auserdem hat der mega16 - wie ich gerade bemerkt habe nur 3 timer (2x8bit 1x16bit). der einzige der 4 timer hÀtte wÀre der 162er und der ist a) 2⏠teurer und b) hat er keine ad-wandler die ich ja zur temperaturbestimmung brauche...
|
|
« Letzte Änderung: Februar 7, 2005, 19:01:18 von philipp.ni »
|
Gespeichert
|
|
|
|
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
damit wir uns richtig verstehen: also muss ich den timer so einstellen, dass er alle 1/100 sek. jumpt und dann dort vllt. anhand eines runterzÀhlenden registers die pwms setzt?! und dann nochmal die frage, WIE setze ich den timer?
|
|
|
Gespeichert
|
|
|
|
|
Freak5
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 139

|
Kann man die Spannung aus dem PWM nicht mit einer Spule soweit glĂ€tten, dass immer eine Grundspannung vorhanden ist, mit der der LĂŒfter auch seine Elektronik laufen lassen kann?
|
|
|
Gespeichert
|
|
|
|
b0nze
Gast
|
Du könntest einfach nen Kondi hinten ran hauen, wobei du dann aber ne normale Spannung hÀttest.
Kommt ganz drauf an, warum du die PWM ĂŒberhaupt einsetzt (Keine Verluste/ Niedrige Drehzahlen).
Zur PWM-Frequenz (bei Software): CPU-Takt / (TimerTakt*Auflösung)
b0nze
|
|
|
Gespeichert
|
|
|
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
die pwm setze ich ein um die lĂŒfter zu steuern wobei mir das steuern wichtiger ist als die verluste... also 5-10% wĂ€ren mir am ende au egal. ich sollte wohl noch sagen, dass das mein erstes projekt mit mikrocontrolern ist, und ich daher auch noch recht unbeholfen mit den datenblĂ€ttern bin - mein englisch ist auch nicht das beste (9. Klasse gymnasium eben). das mit dem kondi bringt mich auf eine idee - ich könnte (um eine digitale frequenz zu kriegen) einfach nen 555er auf nen interrupt legen - dann hab ich meine frequenz und das problem mit den timern hab ich auch nicht mehr. wie ich das aus den datenblĂ€ttern braucht man ja eh nen externen zeitgeber... die sache mit dem register runterzĂ€hlen gefĂ€llt mir von mal zu mal besser - bei 50% Fan hab ich dann bei 20khz frequenz 100steps an und danach 100steps aus. damit ist auch ganz einfach rechenbar (ich hab das einstellen in 10%-schritten geplant) 
wenn ihr nen guten grund dagegen wisst bin ich natĂŒrlich immer offen 
thx und cu philipp
|
|
|
Gespeichert
|
|
|
|
b0nze
Gast
|
wie ich das aus den datenblÀttern braucht man ja eh nen externen zeitgeber...
Zeitgeber ist nen schlechtes Wort Du brauchst ne Taktquelle, mit der der Mikrocontroller arbeitet, einen Quarz mit xMhz. Das braucht man aber immer mit nem MC, höchstens du hast einen der AVR-Mega-Typen oder Tiny, die haben einen eingebauten RC-Oszillator. Der Timer selbst ist einfach nen Ding, dass dir alle xxxTakte nen Interrupt auslöst.
FĂŒr ne SoftwarePWM hast du einen ZĂ€hler. Der ZĂ€hler wird in jedem Interrupt heruntergezĂ€hlt. Dann hast du deine Werte der KanĂ€le. Ich machs so: Pins auf 0 und den ZĂ€hler auf das Max laden (PWM-Auflösung) Bei jeder ISR (Interrupt Service Routine) den ZĂ€hler eins runterzĂ€hlen und schauen, ob einer der Werte gleich ist wie der ZĂ€hler, wenn ja, dann setze den Pin. ... gleiche gleiche gleiche gleiche bis du bei ZĂ€hler=0 bist, dann wieder oben anfangen.
Alternativ könnteste nen DA Wandler nehmen... TDA8444 (8 KanÀle).
Um die LĂŒfter ansteuern zu können brauchste aber noch ne Endstufe. Entweder machste ne analoge Spannung aus der PWM und modifizierst etwas ne NoDrop oder direkt an nen MosFet (gut sind High-Side-Switches, dazu kann Olaf berichten)
b0nze
|
|
|
Gespeichert
|
|
|
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
ich verwende nen mega16, werde aber trotzdem n externes Quarz verwenden.
Ich hab jetzt was sehr gutes ĂŒber timer timer gefunden. ich nehm nen takt von 16MHz und dann erstmal nen prescaler von 8 (TCCR0 auf 0x02) dann mĂŒssen es genau 100 schritte bis zum interrupt sein. nur, wie sag ich dem timer wann der counter overflowed ist? Einfach TCNT0 auf 0x64 (dez.: 100) setzen? zu der Endstufe: vertragen die lĂŒfter keine PWM oder wie? ich dachte da einfach an nen transistor, der die 5V vom ”C in die 12V fĂŒr den lĂŒfter umwandelt.
|
|
« Letzte Änderung: Februar 9, 2005, 11:27:54 von philipp.ni »
|
Gespeichert
|
|
|
|
b0nze
Gast
|
Such dir erstmal ne Frequenz aus, mit der der Timer anspringen soll. Besser noch Takte. Du musst ja zwischendrin noch Taster etc. abfragen. Da kommt natĂŒrlich die Frage auf, ob du mit Assembler oder C programmierst. Olaf und ich haben in Assembler programmiert und das ist um Massen schneller als C in solchen Sachen. Die ISR muss möglichst kurz sein und das andre sollte natĂŒrlich auch nicht lange dauern.
Der Timer hat einmal die Ăberlauf (Overflow) und einmal die Compare Match Funktion. FĂŒr das wĂŒrde ich der Einfachheitshalber einfach den Compare Match nehmen (CTC = Clear Timer on Compare Match). Da schreibste nen Wert ins OC-Register (OCR0, OCR1AH:L etc.) und dann den richtigen Modus in den Control-Registern einstelllen und dann zĂ€hlt der Timer mit dem Prescaler immer bis zu dem Wert hoch und löst den IRQ aus und resettet sich. Mit Overflow mĂŒsstest du halt immer in jeder ISR einen Preload machen, und zwar bei den 8bittern 256-[gewĂŒnschter Wert], damit er nur noch x-Schritte hochzĂ€hlen muss.
wenn du ne 10%-Auflösung hast, dann sind das ja 10 Schritte. Ich denke 20 wÀren OK. 16Mhz / 8 = 2Mhz, 2Mhz / 100Hz = 20kHz, 20kHz / 20 Schritte = 1000;
FĂŒr nen 8-Bit-Timer brauchste also nen höheren Prescaler.
FĂŒr die Ansteuerung kannste auch ne PWM nehmen. Da sind solche HighSideSwitches (teure MosFets) sehr gut. Olaf beim Werkeln
b0nze
|
|
|
Gespeichert
|
|
|
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
ich programmier wie oben schon erwÀhnt in assembler.
was sind die 1000? ich dachte das so: 16Mhz / 8 = 2Mhz, 2Mhz / 100 = 20khz, 20khz / 200 Schritte = 100
d.h. ich nehm die gespeicherte %-zahl mal 2 dann hab ich die possition ab der der port auf 1 geschalten werden muss. dann zĂ€hl ich bei jedem interrupt den software-counter runter ("dec fancount") und wenn fancount == fanswitch schalt ich auf 1. damit hab ich theoretisch ne auflöĂung von 0.5% aber die frage ist ja immer wie ichs dem user prĂ€sentier. wenn ich bei jedem erhöhen +10 und bei jedem erniedrigen -10 rechne sinds wieder 5% schritte. ich denke, das ist die einfachste möglichkeit. wenn ich nen prescaler von 256 nehm darf ich bei 10% Fan bei 25.6 umschalten
|
|
|
Gespeichert
|
|
|
|
b0nze
Gast
|
Warum willst du unbedingt auf 0,5%? (5 ProMille ) Olaf hat halt sein LĂ€mpchen und da hatter halt 200 genommen. Aber nen LĂŒfter da denke ich sind 25-30 Maximal drin...
Wenn man dann mit 20 statt 200 rechnet, ist der Wert, der in das OC-Register geschrieben wird nĂ€mlich zu groĂ fĂŒr nen 8-bit.
Aber is nur ne Kleinigkeit.
b0nze
|
|
|
Gespeichert
|
|
|
|
philipp.ni
Dremelfreund

Karma: +0/-0
Offline
Geschlecht: 
Beiträge: 100

Ich liebe dieses Forum!
|
wie gesagt ist es mit nem prescaler von 8 spÀter leichter zu rechnen als mit 256 oder 1024 o.À. was spricht denn gegen 200?
noch was: sind die 5V vom pc-netzteil stabiel genug, oder soll ich 12V und nen 7805er nehmen?
|
|
|
Gespeichert
|
|
|
|
Seiten: [1] 2 3 4
|
|
|
|
|