mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehrere gleichzeitig per AVR messen lassen??


Autor: Samy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend

arbeite gerade an einem größeren AVR Projekt (das erste in dieser
Größe).
Möchte 8 Motoren per AVR regeln --> erste Idee: AVR --> 8Kanal DAC-->
OP --> FET. Da DAC nett leicht zu beschaffen sind und nicht grad billig
sind zweite Idee: AVR Software PWM mit 8Kanälen --> Glättung --> OP -->
FET.
Idee 2 hätte wesentlich mehr Vorteile für mich, aber da kommt eine
kleine Frage in mir auf als AVR "Anfänger".
Der AVR soll SoftwarePWM realisieren mit 8Kanälen --> kein Thema, aber
er soll noch die Drehzahl der 8 Motoren ermitteln (zeitmessung des
Impulsgebers pro Motor und dann daraus Drehzahl berechnen!!!).
So das sollte ja noch machbar sein, aber es sollen noch div.
Temperaturen gemessen werden und dann alle Messdaten
(Drehzahlen,Temperaturen usw.) an Windows übermittelt werden.
Schön die Messung der 8 verschiedenen Drehzahlen dauert schon etwas und
dann soll jede Sekunde Windows neue Messwerte geliefert werden.

Meine Frage ist kurz und bündig: der AVR soll da ziemlich viel auf
eimal erledigen, kann man das hin bekommen???

Herzlichen Dank an alle, man ist halt noch Anfänger.

Wünsche allen noch einen guten rutsch ins neue Jahr.

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Sammy,
da ich heute nichts vorhabe, klappere ich mal eine Threads ab...

ich habe sowas schon mal für drei Motore gemacht. genauer für drei
Lüfter im PC. Die haben den Tachoausgang, der die Drehzahl ausgibt.
Die gehen auf einen Port, den ich ständig abfrage. Über logische EXOR-
und AND Vernüpfungen kann ich dann Änderungen und Flanken für jeden
Tachoimpuls gleichzeitig auswerten. Diese Informationen gehen dann in
die Software-PWM ein.
Ich habe die Drehzahlen und die Temparatur auf einem LCD anzeigen
lassen. (waren wie gesagt nur drei, passte prima drauf) die Info's
kann man aber auch auf der seriellen ausgeben, klar.
Wie in vielen anderen Threads schon besprochen, ist die Regelung von
PC-Lüftern über PWM so eine Sache, da die interne Elektronik der Lüfter
hier stellenweise verrückt spielt, wenn die PWM-Frequenz mit der
Drehzahl interferriert(heisst das so?). Hier muss man etwas mit der
frequenz probieren. Das PWM Signal zu glätten und zu sieben wurde auch
schon mehrfach dikutiert, Vor-und Nachteile sollten abgewägt werden
(Verlustleistungen im Linearen Betrieb der MOSFET's, interfrenzen
PWM/Drehzahl, Anlaufsicherheit der Lüfter).
Prinzipiell aber, rein von der Rechenleistung, stellt es kein Problem
dar, zusätzlich noch andere Sachen zwischendurch zu machen.
Man muss ja nicht den ADC einsetzen, wenn man Angst hat, das dieser zu
langsam ist (isser nicht). Statt dessen gibt es ja auch
I2C-Temparatur"Chips", oder die 1Wire Teile von Maxim/Dallas.

AxelR.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Samy,

alles was du dir da vorstellst wird wohl etwas schwierig in einen AVR
zu packen, insbesondere die Drehzahlerfassung für 8 Motoren... Für
einen Einsteiger würde ich empfehlen erst mal die Funktionaltät für
einen Motor in einen kleinen Tiny XX z.B. Tiny15 oder 26 zu packen.
Danach kann man sehen ob man die SW für 8 Einheiten auf einen Chip
packen kann.

Robert

Autor: Samy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abend

@ AxelR.

Sagen wir mal so --> es handelt sich um 8 PC-Lüfter.
Ah könntest du vielleicht bei Gelegenheit näher auf die Auswertung der
Drehzahl bei deiner Steuerung eingehen -> da überlege ich schon die
ganze Zeit wie ich 8 Drehzahlen messe und das sekündlich + genau!!!
LCD hatte ich auch zu anfang --> bei 8 Lüftern zu unübersichtlich -->
habe mir dann was anderes ausgedacht --> der AVR sendet alles per I2C
an einen USB Controller und von da an einen kleine Win-Software marke
Eigenbau.
Zum Thema PWM --> habe ewig probiert --> die Drehzahl läßt sich zwar
regeln aber die Lüfter machen Geräusche ( ja ich weiß man kann die
Frequenz optimieren --> die Steuerung soll aber mit jedem Lüfter
funktionieren, somit nix mit optimieren). Fakt ist der Lüfter braucht
ne saubere Gleichspannung!
Das war der Grund für DAC!! Tja die Dinger kosten und sind nicht leicht
zu beschaffen, darum wieder PWM samt Glättung.

Überlege immer noch PWM oder DAC??? Wie gesagt der AVR soll PWM
erzeugen, gleichzeitig Drehzahl messen, Temperaturen erfassen und dann
alles an Win.
Nicht das sich das eine mit dem anderen in die Quere kommt z.b. AVR
ermittelt grad Drehzahl (Zeitmessung der Impulse)--> jetzt kommt ein
Interrupt oder irgendwas anderes hätte gern die Aufmerksamkeit des AVR
--> das verfälscht ja die Zeitmessung und somit Drehzahl!! Hoffe Ihr
versteht auf was ich raus will, weiß nett wie ich es schreiben soll.
Unter Win würde man von Multitasking sprechen.
Wenn ich PWM weg lasse und einen DAC einsetze kann ich das natürlich
entschärfen da der AVR nicht mehr mit 8Kanal SoftwarePWM beschäftigt
ist. Deswegen der Threand hier.

Tja Fragen über Fragen.
Zur Zeit habe ich das Gefühl bei meinem Projekt --> ein Schritt vor und
zwei zurück.


Thanks @ all.

Autor: Samy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry

Habe Freitag,Samstag und Sonntag arbeiten dürfen wobei Samstag und
Sonntag 12 Stunden Schichten waren -> habe mir zur Entspannung ein paar
Bier auf gemacht --> Sorry wegen Rechtschreibung.

Mir kam da grad ne Idee --> nehmen wir mal an ein AVR kommt mit dem
allem nett klar weil er einfach zuviel zur selben Zeit machen muß -->
was ist dann wenn ich statt eines "großen" AVR´s zwei 2 "kleine"
AVR´s nehme??? Der eine macht PWM + Daten an Win und er andere
Drehzahl- und Temperaturerfassung?????
Nur so ein Gedanke in mir!!!

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
du machst den gleichen (Denk)Fehler wie ich, super.
Da ist soo viel Zeit zwischendurch!
den einen port nimmst du für die tachosignale. alle 1ms (timerint)
fragst Du die ab. um jetzt festzustellen, welcher pin sich geändert
hat, vergleichst den alten portzustand mit deinem aktuellen
aenderung=port_aktuell eor port_alt. wenn hier das ergebniss >0 ist,
dann springst Du in eine schleife und klapperst das ergebnis ab.
erst aenderung AND 1, dann aenderung AND 2, aenderung AND 4, AND 8 usw.
Diese einzelnen Abfragen speichserts Du und hast für Lüfter 0-7 je das
dazugehörige Bit isoliert. Im SRAM machst Du dir acht korespondierende
Variablen, die Du ebenfalls in dieser Schleife hochzählst. Nach 1000
Timerinterrupts nimmst du die Ergebnisse der einzelnen SRAM-Variablen,
multiplizierst mit 60,schreibst das Ergebnis zurück, gibst die
Ergebnisse über die UART an deinen FTDI Chip und löschst die Variablen.
In dieser Zeit ist dein 1ms Timer gesperrt, damit nichts abgefragt
und/oder hochgezählt wird. Wenn Du alles ausgesendet hast, gibts du den
ms-Interrupt wieder frei und die Messerei geht von vorne los. Du kannst
doch nach 1000ms ruhig eine Pause in der Zeit machen, wo deine
Ergebnisse ausgewertet werden. In dieser Pause kannst Du dann noch in
aller Ruhe deine 8ADC's abklappern, die Tabelleneinträge für die
NTC's abgrasen und dise Info's auch noch mit ausgeben.
Der PWM-Zyklus ist davon unberührt: du hast ja nich einen timer.
Das ist dann aber ein andere Geschichte...

Die Art und Weise, wie du die Temparatur messen willst, sollte klar
sein. Nimmst du NTC's, must Du obacht geben, das der Strom durch diese
nicht zu groß wird! Sonst erwärmen sich diese selbst ein wenig und
verfälschen dein Messergebins erheblich. Im Forum ist die Messerei mit
diesem Dallas 1Wire Chip schon ausführlich durchgekaut worden. Kannst
aber auch einige LM76 verwenden.

Die PWM Frequenz muss nur ca 10x höher sein, als deine schnellste
gewünschte Änderung der Drehzahl. Da Du sowieso nur minimum alle
Sekunde die Drehzahl ändern kannst, reichen 100Hz PWM (locker) aus. 10K
in Reihe und dahinter 22uF gegen Masse gibts Du auf die Basis von
irgenteinem NPN, Kollektor an VCC(5V?) und Emitter über 1K nach Masse.
Dann hast Du am Emitter bei 100%PWM ca. 4.2V anliegen bei 50% ca. 2V.
Damit sollte sich was anfangen lassen. Etweder mit OPV und Faktor 3
verstärken, oder mit einem 2ten Transistor (V ebenfalls=3
Gegenkopplung!). Das ist das kleinste Problem!

Ich habe mit Absicht keinen Codeschnipsel reingestellt -gemein, ich
weis-.

AxelR.

Autor: Samy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ AxelR.

Danke für deine Antwort. Das mit dem Codeschnipsel ist ok --> will es
ja selber schreiben bzw. was lernen bei!!
Eine Sache wirft aber Fragen in mir auf -->

>>Der PWM-Zyklus ist davon unberührt: du hast ja nich einen timer.
>>Das ist dann aber ein andere Geschichte...

>PWM ohne timer???? Wie soll das gehen???

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht nur einen Timer... ;-)

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, nicht nur einen Timer, kannst also den timer2 hernehmen, wobei
der oc2 interrupt ziemlich weit hinten liegt in der Tabelle, glaube
ich. Aber bei den geringen Refreshraten, egal. Auf 100 U/min kommts
sowieso nicht an. Merkt keiner...

Autor: Samy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen

Als erstes mal herzlichen Dank an alle User für die schnelle Hilfe.

@AxelR

Noch ne ganz kleine aber wichtige Frage

"10K in Reihe und dahinter 22uF gegen Masse"

Ah wie kommst du auf diese Werte?? Bei meinen Schaltungen ist es mir
wichtig das alles sauber berechnet wird und alles Hand und Fuß hat -->
so Dinger wie "hauen wir mal ein Bauteil mit dem Wert xyz rein und
schauen ob`s funtzt" ist nett mein Ding.
Wie berechnet man das ??? RC-Tiefpaß ??? RC-Siebung???

Sorry für die laienhafte Frage --> meine Ausbildung ist schon 8 Jahre
her und seit dem nie mehr gearbeitet in dem Beruf, schade könnte mich
in den Arsch beissen.

Wenn jemand mir das erklären kann, vielen vielen Dank

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tau = R * C      (Zeitkonstante)
50% = 0,7 Tau    (50% Pegeländerung)

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Samy, ich will nicht in Ungnade fallen...;-))

Bei mir wurde auch mal alles berechnet, das gibt sich im Laufe der
Zeit.

10x10E3 * 22x10E-6 = 220 millisekunden
220x0.7 = 154 millisekunden,
sollte also passen
Gruß
Axel

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abonniert

Autor: kinglazee (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Thema Lüfterregelung hab ich auch noch einen Vorschlag:
(Ist nur ne Blitzidee und nicht sehr weit durchdacht)

Man nehme sich einen Port pro Lüfter der geregelt werden soll, der Port
erzeugt eine (für einen uC) geringe Frequenz, diese Frequenz auf einen
IC der Hz proportional zu Volt umwandelt. Die Spannung an einen OVP und
über diese Spannung den Strom regeln.

Würde das Funktionieren?

MFG kinglazee

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.