mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik hohe Datenmenge in Echtzeit übertragen oder speicher


Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johannes Slotta (johanness)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?... 
. 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

Autor: ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder einfach auf eine SD-Karte, geht einfach und schnell

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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 :-)

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Christian (Guest) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mark Struberg (struberg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Andreas Lang (andi84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der FT245BM hat ein paralleles Interface und macht mis zu 1MBit mit.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze nennt sich Phasenrauschen und dafuer gibt es 
Standardtechniken.

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.