Hallo zusammen Ich habe einen AD7767 über SPI angeschlossen und bekomme dort reproduzierbar 'komische' Werte. Der Wertebereich scheint nicht linear. Besonders bei kleinem Wertebereich fällt dies auf. Ein Bild von einem gesampelten Sinus schicke Ich mit. Rückwirkungen aus meiner Hardware schliesse Ich eigentlich aus. Dazu ist das Ganze zu gut reproduzierbar. Die 4 verschiedenen SPI-Möglichkeiten habe Ich ausprobiert, ohne Erfolg. Die Dateiübertragung über SPI scheint mir richtig. Der AD7767 sendet MSB first 24 Bit. Ich warte auf ein low auf /DRDY, dann hole Ich die neuen Daten in 3*8Bit ab, da das SPI des Sam7x nur maximal 16Bit kann. Zwischen den 3 Bytes ist jeweils eine kurze Pause die aber bei SPI keine Auswirkung haben sollte. Meine Übertragung ist abgeschlossen bevor der AD7767 mit einem high-Pegel auf /DRDY den nächsten fertigen Wert anzeigt. Das sieht auf dem Ossi gut aus. Einen mathematischen Fehler, der mir so eine komische Werte-Verbiegung produziert kann Ich mir (noch) nicht vorstellen. Eigentlich bin Ich mit meinen Werten nicht so weit vom Ziel entfernt. Bei grossen Wertebereichen sieht man nur kleine Dellen. Vielleicht ist im Code noch etwas was Ich nicht sehe. mReceivedValues ist mein uint32_t Speicher für die Werte. Dieser ist vor dem Empfang auf 0 gesetzt worden. --so werden die SPI-Daten gespeichert uint8_t *rxp = ((uint8_t*)&mReceivedValues[aktSpeicherIndex])+1; --an dieser Stelle werden die eintrudelnden Bytes aufsteigend gesichert -- hier die Umrechnung der SPI-Daten auf int32 uint32_t value = mReceivedValues[aktSpeicherIndex]; // bisher bestehen die empfangenen Daten aus [leer, MSB, MidByte, LSB] value = ByteSwap(value); // dreht alle 4 Bytes if(value&0x00800000){ value |= 0xff000000; // negativ, mit 0xff auffuellen } mReceivedValues[aktSpeicherIndex] = value; // jetzt haben wir [LSB, MidByte, MSB, leer] Diese Werte werden dann als int32 interpretiert und z.B in dem mitgeschickten Diagram angezeigt. Ich bin etwas ratlos.... Hat jemand so etwas schon mal beobachtet? Irgendeine Idee wie Ich da weiter kommen könnte? Vielen Dank schon mal Gruß Klaus
Hi! Könntest du in dem Diagramm noch die Y-Achse beschriften? Und die X-Achse mit den Zeitpunkten. Wie of samplest du? Das sieht ein bißchen nach der Netzfrequenz von 50 Hz bzw. Störungen von 100 Hz aus... Gruß PP
Komik ist etwas anderes. Es handelt sich um das Resultat deines Meisterwerkes ;-)
Hier noch das Bild mit Y-Achsen Beschriftung. Das hatte Ich dummerweise abgeschnitten. Der Wertebereich ist aber relativ unwichtig. Das Verhalten lässt sich auch in anderen Wertebereichen reproduzieren. Ich habe den AD7767-2, der samplet mit 32kSPS. Gruß Klaus
Hi, kannst du den Schaltplan posten? Kannst du ein Bild vom Aufbau posten? Kannst du ein Oszibild des Signals posten? Welche Massen sind miteinander verbunden? Wie hoch ist die Spannung an V_Ref? Wie hoch ist die Spannung an AV_DD? Wie hoch ist die Spannung an DV_DD? Wie hoch ist die maximale Spannung von V_in+? Wie hoch ist die minimale Spannung von V_in+? Wie hoch ist die maximale Spannung von V_in-? Wie hoch ist die minimale Spannung von V_in-? Wie hoch ist die Signalfrequenz?
Hmmm.... Musst du eigentlich nicht zuerst auf <0 prüfen und dann die Bytes swappen?
1 | if(value&0x00800000){ |
2 | value |= 0xff000000; // negativ, mit 0xff auffuellen |
3 | }
|
4 | value = ByteSwap(value); // dreht alle 4 Bytes |
Wie sieht es mit Little und Big Endian aus? Gruß PP
Hallo PP Nach dem Empfang über SPI liegen die 24 Bit so aufsteigend im Speicher; [0x00, MSB, MidByte, LSB] Der Ethernut verwendet meinen SAM7x als LittleEndian. Deshalb erst drehen, dann pruefen ob das 24te Bit (das Vorzeichen) gesetzt ist und das MSB evtl. verändern. Sollte stimmen. Testweise habe Ich auch die Reihenfolge geändert, das führt zu Unfug. Das Setzen des Vorzeichens kommt bei meinen aktuellen Werten kaum vor. Meine aktuellen Probleme pruefe Ich im rein positiven Bereich. Ich bin dabei nochmal alles zu prüfen und Bilder von den einzelnen Stufen zu machen. Hier schon mal der Schaltplan und Aufbau. J1 und J2 sind geschlossen. Der AD-Wandler ist schon 2 mal getauscht. Das 'komische' Verhalten ist vom Bauteil unabhängig. Was mir jetzt schon aufgefallen ist: Bei ganz kleinen AC-Signalen (bis 20uV am AD7767) ist alles ok. Bei einer weiteren Erhöhung sehe ich das die Messwerte auf der negativen Seite schlechter werden und in ein Rauschen übergehen. Der DC-Anteil hat daran einen Einfluss. Dieses Verhalten kann Ich bei DC=2,5V und DC=0,9V (allerdings invertiert, der positive Teil der Sinus-Welle wird schlecht) sehen. Zwischen diesen DC-Spannungen kann Ich alle Formen der Signal-Verstümmelung in den Messwerten sehen. Schon mal vielen Dank für die Gedanken. Gruß Klaus
Hallo Hier die zwei auffällige Punkte: DC = 2,5V, AC = 20mVss (nicht uV wie im vorherigen Beitrag falsch beschrieben) ergibt bei den Messwerten einen richtigen Sinus. DC = 2,5V, AC = 40mVss ergibt den abgeschnittenen Sinus. Bei der Spannung am AD-Wandler kann Ich keine Unterschiede erkennen. Auf dem mitgeschickten Ossi-Bild sind gelb In+, blau ist In- und Rot ist die errechnete Differenz. Die AC-Messungen (20/40mV) sind auf der Eingangsseite des AD8220 gemacht. V_Ref = 5V, AV_DD = 2,5V DV_DD = 2,5V. Digitale und analoge Masse sind getrennt zu einem ca 5cm entfernten Punkt gezogen und dort mit allen Massen verbunden. Die Frequenz ist ca 160Hz. Das Problem tritt genauso bei anderen Frequenzen auf. Gruß Klaus
Hmmm... Bin mir nicht sicher, ob ich die Schaltung richtig verstanden habe. Was machen die zwei AD8220? Wie hoch ist denn die DC Spannung an VIN- und VIN+ des AD7767? Stellt sich da nicht VRef vom AD7767 ein?
Hallo Die Schaltung mit den beiden AD8220 kommt aus dem Datenblatt zum AD8222. Die entsprechende Seite schicke Ich mit. Die Schaltung erzeugt auf einem Pegel von VREF/2 ein symetrisches gegenphasiges Signal. VIN+ und VIN- sind auf dem Ossi-Bild sichtbar und etwa 3,8V und 1,2V, also 1,3V um die Mitte (2,5V) entfernt. Bei 0V am Eingang des A7 ergibt sich VIN+ und VIN- zu 2,5V (also VRef/2). Das kann Ich auch messen. Gruß Klaus
Servus Klaus, bist Du dem Problem schon auf die Schliche gekommen? Ich kämpfe auch mit einem AD7767... Grüße Franz
ja, meiner macht jetzt das was er soll. Bei mir waren falsch bestückte Vorwiderstände an IN+,IN- 15k statt 15R das Problem. Gruß Klaus
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.