Forum: Digitale Signalverarbeitung / DSP / Machine Learning A/D-Wandlung per Software beim TMS320F2812 DSP


von Markus Rehn (Gast)


Lesenswert?

Hallo Leute,

Ich möchte mit meinem TMS320F2812 DSP-Board einen Analogwert einlesen,
diesen in Matlab-Simulink A/D-wandeln und dann auf 14 Pins wieder
ausgeben.
Kann mir jemand dabei behilflich sein, denn mir fehlen dazu noch einige
Grundkenntnisse.
Herzlichen Dank für jede Hilfe!

von Thomas (Gast)


Lesenswert?

Bei TI gibt es die Beispielprogramme für den 2812. DAs ist eigentlich ne
gute Grundlage.

Gruß Thomas

von hebel23 (Gast)


Lesenswert?

Hi!

>mit meinem TMS320F2812 DSP-Board einen Analogwert einlesen,
>diesen in Matlab-Simulink A/D-wandeln

Der A/D-Wandler im DSP wandelt bereits von Analog nach Digital (sonst
würde er ja nicht so heißen). Was willst Du da mit Matlab noch
wandeln?

Gruß Andreas

von Jürgen Schuhmacher (Gast)


Lesenswert?

ROTFL - das wollte ich auch gerade sagen!  Die Vorstellung ist aber sehr
verbreitet: Ich hatte während meiner Zeit an der Uni einen Studenten,
der auch der Ansicht war, daß man mit Software AD-Wandeln kann,
schließlich kann man mit Software ja auch Filtern. Hier gibt es mehr
Infos zu Softwarefiltern:

http://www.software.org/tools/math/filter/coffee/arabica-beans.fft

von Markus Rehn (Gast)


Lesenswert?

Hallo Andreas,

du hast natürlich recht, dass das DSP-Board bereits eigenen A/D-Wandler
besitzt.
Es besitzt aber keine D/A-Wandler und genau das ist mein Problem.

Um in meiner Aufgabe einen Servocontroller anzusteuern, brauche ich
einen möglichst genauen Analogwert. Dabei möchte ich den eingelesenen
A/D-Wert in Simulink durch eine Reglerschaltung schicken (z.B. PID) und
anschließend auf einem externen D/A-Wandler wieder analogisieren, bevor
er auf den Steuereingang des Servocontrollers gegeben wird.

Um den externen D/A-Wandler zu testen will ich momentan erstmal einen
Binärwert ausgeben. Dabei kam der Gedanke den Wert mit mehreren
Schiebeoperationen zu schieben, so dass die jeweiligen Bits auf
verschiedene Ausgängen gegeben werden können.

Möglicherweise würde das auch funktionieren, aber leider weis ich
nicht, wie ich den Dezimalwert der Konstante in einen Binärwert wandeln
kann, um ihn dann zu schieben, Bsp:

Analogwert --> Binärwert
11d        --> 1011b

Gruß, Markus

von WiWil (Gast)


Lesenswert?

Verstehe ich das richtig, dass du einen 14bit Wert (entnehme ich deinen
14 Pins) auf eben 14Pins des Controllers ausgeben willst?

Dann schicke doch einfach den Analogwert des AD-Wandlerregisters auf
das Portregister des TMS. Oder zum Testen halt auch einen beliebigen
Konstantwert. Wenn deine Pins in richtiger Reihenfolge zum gleichen
Port gehören, funktioniert das automatisch.

Oder meinst du das anders?

Gruß
Andreas

von Patrick (Gast)


Lesenswert?

Hallo Markus,

>> Analogwert --> Binärwert
>> 11d        --> 1011b

da brauchst du nichts umzuwandeln, dass sind nur Darstellungsformen
(Hexadezimal, Dezimal oder binär)
Leg einfach deinen Wert von 11d auf dein Datenregister (z.B. GPIO Port
A):

GpioDataRegs.GPADAT.bit.all == 11;

genauso Hexadezimal:
GpioDataRegs.GPADAT.bit.all == 0xB;

binär wüsste ichs spontan nicht aber diese beiden Zeilen haben dieselbe
Wirkung!
Ich hoffe das bringt dich weiter, ansonsten verstehe ich deine Probleme
nicht!

Gruß
Patrick

von Patrick (Gast)


Lesenswert?

!Anmerkung!

Ich meine natürlich:
GpioDataRegs.GPADAT.bit.all = 11;

und:
GpioDataRegs.GPADAT.bit.all = 0xB;

das oben wäre ein Vergleich und KEINE Zuweisung!

Gruß Patrick

von Thomas (Gast)


Lesenswert?

Wie kommst du eigentlich mit den Daten zu Simulink rein bzw. raus ?

Gruß Thomas

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
Noch kein Account? Hier anmelden.