Autor |
A/D Konfiguration Optimieren |
|
|
|
|
BID = 360224
Marino Gelegenheitsposter
 
Beiträge: 85
|
|
Hallo Zusammen,
hierzu habe ich keine gute Lösung gefunden und möchte Euch fragen, vielleicht hat jemand eine bessere Lösung für mich.
Das Problem: Beim konvertieren mehrere Signale mit dem A/D Wandler des dsPIC30F (2011 bzw. 3012) beeinflusst jedes Signal den Nachfolger (Crosstalk).
Die Ursache ist offensichtlich: Ein einziger A/D Modul (SAR Architektur) bedient alle Eingangssignale. Signal 1 wird in einem Kondensator gespeichert und konvertiert, dann wird Signal 2 an dem gleichen Kondensator geleitet und konvertiert, usw. Die Ladung des Kondensators ist offensichtlich noch nicht vollständig verschwunden bevor das nachfolge Signal gekommen ist.
Meine Lösung ist Zurzeit einen 0 Signal zwischen alle meiner Signale zu schieben. Also, AN0 ist mit der Masse verbunden, AN1 ist das erste Signal, AN2 ist Masse, AN3 ist das zweite Signal usw. Es funktioniert und der Crosstalk verschwindet, dadurch verliere ich aber viele AN Beine und die hälfte des A/D Buffers.
Meine erste Versuche waren die Werte in ADCON2 (ADCS) (Die Dauer der Konvertierung) zu verändern und das hat nicht wirklich geholfen. Zurzeit habe ich die empfohlene 667 nsec.
Hierzu habe ich eine weitere Frage: Um die ADCS ideal Werte zu berechnen benötigt man die Zeitdauer der Instruction-Cycle TCY. TCY ist 33,33 nsec (30 MIPS) bei 120 MHz (7,5 MHz Quarz und PLL16). Wie berechnet man die TCY eigentlich? Wie hoch ist TCY bei z.B. 80 MHz (10 MHz und PLL8)?
Vielen Dank in Voraus
Marino |
|
BID = 360242
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
|
So, wie Du die Sache beschreibst, liegt nicht die falsche Konvertierungsdauer vor, sondern Du lässt dem Kondensator zu wenig Zeit (acquisition time).
Sind Deine Signalquellen niederohmig genug?
Dem Kondensator vor jeder Wandlung eine Null aufzuzwingen, ist nur an den Symptomen gedoktort. Damit hat er den eigentlichen Wert auch nicht besser eingenommen, sondern bekommt im Idealfalle immer den gleichen Fehler. Dazu müsste es theoretisch genügen, dem AD-Wandler immer von dem selben Kanal die Null zu geben. Aber schön ist das nicht. Deine Lösung ist doch eher was gegen Übersprechen im Multiplexer und nicht für das Umladungsproblem.
Verlängere mal die acquisition time.
Ein Blick in das Datenblatt der dsPIC30-Familie (ich habe mit denen noch nie was gemacht) zeigt mir, dass es wohl welche mit mehreren S&H-Stufen gibt. Damit ließe sich der eine AD-Kanal schon mal "vorbereiten", während der vorige schon wandelt - glaube ich.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor) |
|
BID = 360283
Marino Gelegenheitsposter
 
Beiträge: 85
|
Ja die Signalquellen sind niederohmig.
Eigentlich kann man mit dem ADCON2 (ADCS) den TAD bestimmen.
Die Sampling Time = Acquisition Time + Conversion Time. Acquisition Time = 1 TAD und Conversion Time = 14 TAD. Also, die Sampling Time = 15 TAD = 15 X 667nsec. Ein Minimum TAD von 667nsec wird empfohlen. Deshalb kann man nicht höher als 100 kHz sampeln.
Den TAD habe ich auch versucht zu erhöhen. Das waren die ersten Versuche und die haben nicht wirklich viel geholfen. Deshalb habe ich das mit dem 0-Signal ausprobiert. Aber wie Du gesagt hast: Damit habe ich wirklich nur an den Symptomen gedoktort.
Okay, ich werde jetzt mit dem TAD Wert etwas mehr experimentieren. Kann mir jemand sagen, wie man den TCY (Zeitdauer der Instruction-Cycle) eigentlich berechnet. Den TCY Wert habe ich aus irgendwelchen Beispielen. Ich möchte alles komplett selber neu berechnen.
PS: Den AD-Wandler habe ich eine Null aus unterschiedlichen Kanälen gegeben, weil ich gerne erst den Buffer voll mache und dann die Daten hole (Auto Couvert). Das ist aber alles keine Lösung, ich muss die A/D Konfiguration neu berechnen.
Vielen Dank
Marino
|
BID = 360285
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
An den Konfigurationen zu drehen bringt Dir überhaupt nichts!
Du musst eine Warteschleife einbauen. Im Absatz "A/D Acquisition Requirements" ist das in Worten beschrieben. Schau spaßeshalber mal in die Datenblätter der "kleinen" PICs (z.B. PIC12F629/675) dort sind auch Formeln zur Berechnung der Zeit. Da kommen leicht mal ein paar µs extra zusammen.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 360308
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Hast Du das Datenblatt "dsPIC30 Family"? Das gehört dazu und da steht es auch drin (Table 24-14). Ich dachte mir das schon, es ist genau wie bei den normalen PICs: TCY=4/Fosc, bzw. mit PLL natürlich entsprechend TCY=4/(Fosc * PLLx).
Wer lesen kann, ist klar im Vorteil!
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 360319
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| dadurch verliere ich aber viele AN Beine |
Um den Haltekondensator zu entladen reicht es doch einen Kanal auf Masse zu legen und den immer wieder anzuwählen.
Wenn du tatsächlich zwischen den Messignalen liegende Pins physisch auf Masse legen musst, findet das Übersprechen schon auf der Platine statt, und du solltest dein Layout korrigieren, z.B. mit GND-Traces zwischen den Signalen.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 360324
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Dass auch ein einzelner "Dummy-Kanal" reichen sollte, schrub ich bereits. Was ich davon halte, auch...
Wenn soviel Zeit ist, einen Dummy-Kanal zwischendurch anzusprechen, würde ich dem aktuellen Kanal lieber diese vergeudete Zeit zum Einschwingen schenken. Das Ergebnis kann nur besser sein!
Und wenn es mit ausreichender Einschwingzeit (ausrechnen!) trotzdem Übersprechen gibt, dann ist tatsächlich ein Redesign erforderlich.
Mir scheint's beim Überfliegen der Datenblätter, dass bei den dsPICs viele Grundlagen vorausgesetzt werden...
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 360352
Marino Gelegenheitsposter
 
Beiträge: 85
|
Alles ist noch in der Testphase. Ich habe es so getestet, weil ich gerne den Auto Convert Funktion nutzen möchte, bzw. an dem Code nicht viel verändern wollte. Alles ist nur provisorisch gelötet, Ich habe noch keinen ordentlichen Code und keine ordentliche Leiterplatte und das könnte natürlich auch ein weiterer Grund für das Übersprechen sein. Das Übersprechen ist aber durch diese dumme provisorische Beschaltung weg. Ausreichend weg. Diese Beschaltung ist keine Lösung, ist nur zum testen da.
Das mit dem Layout ist ein großes Problem bei mir. Meine Leiterplatten empfangen immer viel zuviele Störungen. Perl, Was meinst Du mit GND-Traces zwischen den Signalen?
|
BID = 360353
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Bin ganz deiner Meinung.
Am Schluss stellt sich dann vielleicht noch heraus, daß 15 Signale über einen 16-poligen Hosenträger kommen, die farbige Ader ist "Masse"
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 360359
Marino Gelegenheitsposter
 
Beiträge: 85
|
Wie gesagt, diese dumme Beschaltung ist nur zum testen provisorisch gelötet. Wenn ich nur einen Kanal als "Dummy-Kanal" mit Masse verbunden hätte, dann hätte ich die Code Struktur komplett verändern müssen. Zum Testen habe ich jeden zweiten Kanal entfernt und mit Masse Verbunden.
|
BID = 360421
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Zitat :
Marino hat am 15 Aug 2006 22:51 geschrieben :
|
...Ich habe noch keinen ordentlichen Code ...
|
Zitat :
|
...dann hätte ich die Code Struktur komplett verändern müssen...
|
Hä? Was denn nun?
Die Struktur eines "nicht ordentlichen Codes" ändern zu müssen, dürfte kein Problem darstellen. Du widersprichst Dir selbst! Auf der einen Seite stellst Du es als Problem dar, dass die vielen schönen AD-Kanäle verbraucht sind, magst aber die Code-Struktur nicht ändern, die eigentlich noch garnicht wirklich existiert.
Die naheliegenden Ansatzpunkte scheinst Du zu ignorieren bzw. nicht zu verstehen.
In Absatz 16.2 "Conversion Operation" (Datenblatt des dsPIC30F2011)ist der Ablauf der AD-Wandlung Punkt für Punkt aufgezählt. An Punkt 4. "Wait the required acqusition time" schiebst Du eine Warteschleife ein, die genau die Zeit verbraucht wie die Dummy-Wandlungen, die dafür wegfallen.
Dann sehen wir weiter.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 360505
Marino Gelegenheitsposter
 
Beiträge: 85
|
Zitat :
| Die naheliegenden Ansatzpunkte scheinst Du zu ignorieren bzw. nicht zu verstehen. |
Vielen Dank Ltof
Wie ich bereits gesagt habe nutze ich den Auto Convert Funktion. Ich hole die Daten erst nach dem der Buffer voll ist. Zum Testen habe ich jeden zweiten Kanal entfernt und mit Masse Verbunden. Keine Warteschleife.
Und wie ich auch bereits gesagt habe, werde ich jetzt mit dem TAD Wert etwas mehr experimentieren.
Und dann sehen wir weiter
Vielen Dank
Marino
|
BID = 360537
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Zitat :
Marino hat am 16 Aug 2006 13:55 geschrieben :
|
Wie ich bereits gesagt habe nutze ich den Auto Convert Funktion.
|
Die im Datenblatt "Auto-Start mode" genannt wird. Der Begriff "Auto Convert" kommt überhaupt nicht vor.
Egal - geht also nicht mit Warteschleife. Na dann rechne doch endlich mal Deine "reqired acquisition time" aus! Wenn diese länger ist als die maximale TAD, wird es so also nix. Von der Krücke mit den Nullen zwischdurch würde ich mich jedenfalls ganz schnell verabschieden. Damit handelst Du Dir unter Umständen Temperaturfehler ein.
Welche Impedanz haben Deine Signalquellen eigentlich?
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 360624
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
Eine abstruse Idee:
Statt die Dummy-Kanäle mit GND zu belegen, legst Du das zu messende Signal auf zwei benachbarte Kanäle. Damit verdoppelst Du mindestens die Einschwingzeit - oder mehr! Nur jeweils die zweite Messung davon wird als gültig angenommen.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 360682
Marino Gelegenheitsposter
 
Beiträge: 85
|
Ltof, die Idee ist nicht schlecht, Heute habe ich leider nicht viel machen können, ich will mich aber schnell mal melden und bedanken für Deine Fragen mit der Impedanz, ohne Deine Fragen hätte ich wahrscheinlich nicht danach geforscht. Ich habe gedacht, dass eine Impedanz von 10k oder mehr für einen uC Eingang mehr als Ausreichend ist. Nach dem ich mich nun belesen habe, weis ich jetzt dass der A/D Eingang weniger als 10k braucht. Zwischen den OP Ausgang und A/D-Eingang schalte ich ganze 10k und manchmal sogar mehr, das ist sicherlich zuviel.
Obwohl die Diskussion Gestern sich hauptsächlich auf die Sinnlosigkeit meiner Testkrücke gerichtet war, muss ich mich bei Euch für die Hinweise bedanken, die mir wahrscheinlich viel Arbeit in die falsche Richtung gespart haben.
Besten Dank auch für die Hinweise mit dem Layout, darauf muss ich ja wirklich achten, wenn ich dann meine richtige Leiterplatte entwerfe, zumal, wenn Preise für schlechte Layouts geben würde, dann hätte ich bestimmt ständig den ersten Preis gewonnen. Meine Leiterplatten sind sehr gute RF-Rausch Empfänger und wahrscheinlich auch Absender. Wie macht Ihr Eure Layouts. Ich versuche immer die Masse so groß wie möglich zu machen und die Leiterzüge so nah wie möglich an der Masse zu führen, oder ist das gerade mein Fehler. Ich verbinde die masse auch oft an verschiedenen Stellen. Ist das auch ein Fehler?
Gruß
Marino
|