Hallo, ich habe folgendes Problem: ich will bei einem E-Motor messen, ob er pendelt. Dieses dreht mit ca. 50Hz und gibt in einer Umdrehung 1024 Impulse in geometrisch gleichen Abständen aus. Diese will ich mit einem MC zeitlich messen (Periodenmessung mit etwa 100 Zählschritten) und die Daten anschließend auswerten, um zu sehen, ob die Maschine "rund" läuft. Wenn ich nun eine Sekunde lang die Daten aufzeichne, wären das dann bei je 8Bit etwa 410kB. Ich habe mir überlegt, die Daten entweder im Controller abzuspeicher und anschließend "bequem" auszulesen, oder die Daten in Echtzeit an einen PC zu übertragen. Meine Frage ist nun, ob es für die Speicherung geeignete, schnelle Rams oder EEPROMs gibt, oder welche Schnittstelle für die Echtzeitübertragung am besten geeignet wäre. Außerdem bin ich npch auf der Suche nach einem geeigneten Atmel MC, den ich mit min. 40 MHz takten kann. Ich stehe gerade am Anfag von dem Problem und habe mich noch nicht viel über die in Frage kommenden Komponenten informiert, wäre also für jeden Tipp sehr dankbar. Grüße
Hi, ich würde dir zu einem Mega-AVR von Atmel mit externem Speicherinterface raten. Da kannst du dann max. 64kByte dranhängen, wenn du mit zusätzlichen Pins noch Banking erzeugst auch noch mehr. Allerdings sehe ich grade nicht, wie du auf 410kB kommst. 50 * 1024 ergibt doch "nur" 50kB, würde also noch in den RAM reinpassen. Von der Geschwindigkeit sollte das auch machbar sein, es gibt ja Megas die du bis 20MHz takten kannst. Wenn du das Signal am INTx-Pin (Oder auch ICP) anlegst müsste sich das im Interrupt durchaus messen lassen, der wird dann ja mit gerademal 50kHz ausgelöst. Dann könntest du also bei jedem Interrupt einen Timerwert auslesen und speichern und den Timer anschliessend zurücksetzen. Das ganze dann halt so lange laufen lassen bis der RAM voll ist. Oder versteh' ich irgendwas falsch?
Hi Phillipp, hast mich sehr gut verstanden. auf die 420kB komme ich, da jeder Zeitwert (der sich im Bereich von 100 Zählschritten bewegen sollte) ja aus 8 Bit besteht, also 1024x50x8Bit=409.600Bit (nicht Byte...sorry). Interessanter als die Daten im Controller abzuspeichern wäre allerding, diese zu übertragen, leider finde ich im Internet nicht viel über die USB 2.0 Kommunikation zwischen MC und PC.
Als weiteres Problem, wenn ich die einzelnen Daten ins RAM speicher will,wäre doch auch, dass ich dann im Prinzip 50x1024 Variablen definieren müsste. Um diese danach auszulesen, sollten sie danach ins EEPROM abgespeichert werden. Das würde dann einen eher unschönen Programmcode geben.
Naja,mit der UART und einem MAX232 kommst du schonmal auf 115.2kBaud was immerhin so um die 90kBit/s wären.Mit einer UART-Erweiterungskarte ist eventuell (je nach Chipsatz) noch einiges mehr drin.Dann allerdings nicht mit dem MAX232,gibt allerdings etliche moderne Bustreiber die bis zu 1MBaud abkönnen (Tipp: de.farnell.com ,gibt eine prima Bauteilsuche).Wenn du die Daten erstmal im Controller speicher kannst und dann Zeit zum Übertragen hast wo nix nachkommt,reichen ja 115kBaud auch aus,dauert dann nur eben 1s-2s. Die klassischen FTDI-Chips (Seriell<->USB-Wandler) sind meines Wissens nur bis 115.2kBaud spezifiziert,allerdings soll es auch neuere geben die mehr können.Das dürfte auf jeden Fall einfacher sein als USB per Software zu machen.Weil dann bräuchte man einen Treiber für den PC um das USB-Device ansprechen zu können. Als Speicher wär ein externes SRAM am Mega-AVR schon geeignet,EEPROM dürfte allerdings zu langsam werden.
USB2.0 wird wohl zumindest als Hi-Speed eher nix, brauchst du auch nicht, theoretisch reicht sogar Low-Speed. Es gibt AVRs mit USB-Schnittstelle, siehe http://www.atmel.com/dyn/products/param_table.asp?family_id=655&OrderBy=part_no&Direction=ASC . Einfacher (und vor allem billiger) wirds aber wohl mit dem FT232BM oder so, der bietet auf PC-Seite per Treiber eine virtuelle serielle Schnittstelle (bis zu 1 Megabaud, das sollte reichen), da muss man nur aufpassen, dass die Software mit der virtuellen Schnittstelle geht. Und dann gibts noch die Möglichkeit, USB als Soft-USB direkt ins µC-Programm einzubauen, siehe z.B. hier: http://www.obdev.at/products/avrusb/index.html
Oder einfach auf eine SD-Karte, geht einfach und schnell
> hast mich sehr gut verstanden. auf die 420kB komme ich, da jeder > Zeitwert (der sich im Bereich von 100 Zählschritten bewegen sollte) ja > aus 8 Bit besteht, also 1024x50x8Bit=409.600Bit (nicht Byte...sorry). > Als weiteres Problem, wenn ich die einzelnen Daten ins RAM speicher > will,wäre doch auch, dass ich dann im Prinzip 50x1024 Variablen > definieren müsste. Du hast nicht wirklich Ahnung, über was du hier redest? Da ist wohl erstmal Grundlagen pauken angesagt, vernünftig Proggen solltest du schon können. Du brauchst sicherlich keine 50x1024 Variablen, sondern allenfalls Arrays. Und es werden auch niemals sämtliche Daten von einer Sekunde im Speicher sein. Wie du auf die 1024 und die 50 kommst ist mir ebenfalls schleierhaft... Da happerts bei dir wohl noch gewaltig :-)
Warum wertest du die Daten nicht in Echtzeit im Controller selbst aus und gibst nur noch aus, ob das Ding rundläuft oder nicht (bzw. einen etwas aussagekräftigeren Wert)? So wie ich es verstanden habe, willst du doch nur messen, ob die Zeiten zwischen 2 Pulsen immer in etwa gleich ist. Das bekommt jeder Controller hin. ----, (QuadDash).
Der Motor macht ca. 50 Hz. Wenn du nur die Differenz in Hz haben willst, der bereich von 48 - 52 liegt, also die wert 48 49 50 51 52 vorliegen, dann braucht es kein Byte je Umdrehung, sondern 3 Bits. => die Genauigkeit entscheidet auch dein datenvolumen + Wenn der motor für 1000 werte gut/konstant läuft, dann reicht 48 Hz * 1000 aus (Datenmodell) => interne auswertung. Nur so: Es gab in dert ELEKTOR mal eine schaltung, um eine Festplatte anzuschließen Auch gab es da mal etwas mit ethernet (ISA-Karte) USB 1.1 wäre eine Idee: - reicht vermutlich (nicht?), da da overhead dazu kommt (Software, kontrolle, ob gesendet, etc.) + du die Daten ja sicher weg bekommen mußt etc. Anregung: Ich habe mal 3 uCs in einer Schaltung zusammengefasst (8051): - datenaufnahme - datenauswertung - kommunikation zum PC Das entlastet & schafft ggf. Platz für änderungen
Such mal in der Codesammlung nach Anschalten von DRAM. Beitrag "2MB DRAM an AVR" Ohne die Datenmengen jetzt durchkalkuliert zu haben glaube ich, daß du damit hinkommen müßtest. Das sollte eigentlich schnell genug sein. Brauchbares DRAM kannst von etlichen alten SIMMs auslöten. Anschließend kannst es auf eine SD-Karte schreiben.
@ Mark Struberg >Such mal in der Codesammlung nach Anschalten von DRAM. >Beitrag "2MB DRAM an AVR" Ich würde einfach eine grösseren SRAM nehmen und per Bankswitching die Daten speichern. >Anschließend kannst es auf eine SD-Karte schreiben. Dazu reicht sicher das normale Aufbohren auf 64 kB gemäss Datenblatt. 50kB/s sind für ne SD-Karte ein Klacks. MfG Falk
Der FT245BM hat ein paralleles Interface und macht mis zu 1MBit mit.
Andreas Lang wrote:
> Der FT245BM hat ein paralleles Interface und macht mis zu 1MBit mit.
1MByte/s laut Datenblatt. Gemessen hab ich unter realen Bedingungen
(Terminalprogramm ließt Daten aus) 600kByte/s. Ein FT245BM könnte also
für die Anwendung gehen. Dann sollte er aber direkt am PC hängen (kein
Hub oder wenn dann ein 2.0 FullSpeed da sich sonst die Bandbreite
aufteilt)
Matthias
Wenn Du nur feststellen willst OB und nicht WIE er pendelt - würde es da nicht genügen, immer die Differenz zum letzten Zählwert zu ermitteln, und eine LED anzusteuern, wenn die Differenz größer ist als eine von Dir festzulegende, erträgliche Abweichung?
Das ganze nennt sich Phasenrauschen und dafuer gibt es Standardtechniken.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.