Hi Leute, ich stehe aktuell vor der Aufgabe, messtechnisch die Impedanz zu ermitteln bei 50kHz und einem Sinusförmigen Strom von 0,8 mA. Dabei hänge ich an der Ermittlung des Phasenwinkels. Folgendes habe ich bereits konzipiert, simuliert und aufgebaut: „Wien-Robinson Oszillator“ zur Erzeugung einer 50kHz Sinusschwingung Das Ausgangssignal wird über ein Potentiometer an eine spannungsgesteuert Stromquelle gegeben, in diesem Fall eine „Howland current pump“. Somit kann ich mit Hilfe des Potis den Ausgangsstrom variabel einstellen die Schaltung so kalibrieren, dass ich einen Ausgangsstrom mit einer Amplitude von 0,8 mA bekomme. Die über die Impedanz abfallende Spannung wird über zwei Messleitungen abgegriffen, Hochpass gefiltert, verstärkt und anschließen gleichgerichtet. Somit kann erhalt ich ein Spannung die proportional zu meiner Spannungsamplitude von meinem Messsignal ist und damit proportional zum Realteil der Impedanz. Für die Bestimmung des Phasenwinkels, greife ich einmal das Ausganssignal des Sinusgenerators ab, gebe das Signal auf einen Impedanzwandler und anschließen auf einen Hochpass mit nachgeschaltetem Schmitt-Trigger um die Nulldurchgänge zu bestimmen. Ähnlich verfahre ich bei dem Messsignal, das ich nach dem Verstärker abgreife, auch noch einmal Hochpass filtere und ebenfalls zur Bestimmung des Nulldurchgangs auf einen Schmitt-Trigger gebe. Von den Ausgangssignalen der Schmitt-Trigger nehme ich die positive Halbwelle und gebe diese auf ein XOR Gatter, wodurch ich ein High-Signal bekomme, das der Zeit der Phasenverschiebung entspricht und somit eine PWM-Signal, dessen Tastverhältnis proportional zur Phasenverschiebung ist. Der Einfachheit halber glätte ich das PWM-Signal um einen DC Spannung zu bekomme die proportional zur Phasenverschiebung ist. Beide Spannungen werden über einen ADC an einen Mikrocontroller zur Verarbeitung weiter gegeben. Später soll die Bestimmung des PWM-Signals noch über einen externen Zähler realisiert werden. Nun zu meinem Problem: Sobald ich die Impedanz (Im aktuellen Testfall rein ohmsch) verändere, wird logischer Weise des Messsignal in seiner Amplitude kleiner und die feste Hysterese des Schmitt-Triggers sorgt für eine Spätere Erkennung des Messsignals. Somit ist das Ausgangssignal des XOR-Gatters kürzer auf High und somit verringert sich das Tastverhältnis, obwohl keine Änderung des Phasenwinkels vorliegt. Eine Überlegung ist nun einen spannungsgesteuerte Hysterese zu realisieren, die abhängig von der Amplitude des Signals, die Hysterese verändert. Bevor ich mich hier aber in irgendetwas verrenne und total auf dem Schlauch stehe wollte ich euch Fragen ob ihr noch andere Ideen habt. Viele Dank für eure Hilfe und Viele Grüße
Claas H. schrieb: > Bevor ich mich hier aber in irgendetwas verrenne und total auf dem > Schlauch stehe wollte ich euch Fragen ob ihr noch andere Ideen habt. Den Phasenwinkel kannst du rauschärmer messen, indem du den Mittelwert über eine längere Zeit bestimmst. Zwei Synchrongleichrichter, die mit dem Originalsignal bzw. mit dem 90° phasenverschobenen Signal arbeiten und das gleichgerichtete Signal anschließen durch einen Tiefpass schicken, wären geeignet, um die beiden ortogonalen Komponenten zu bestimmen.
Vermutlich sollte man das ganze anders angehen: - mit einer anderen Hardware: Das Anregungssignal kann man gut per PWM und low pass Filter erzeugen. Sofern der µC es hergibt alternativ auch per DDS in SOftware. Wenn das Signal kein perfekter Sinus ist, stört dies nicht so sehr - vor allem wenn man bei der detection vor allem die Grundwelle detektiert. Sofern der ADC im µC schnell genug ist, notfalls mit Unterabtastung, würde ich eher den ADC direkt das Wechselspannungssignal erfassen lassen. Das Signal kann man dann ähnlich wie beim Lockin Verstärker auswerten. Damit erhält man mehr oder weniger direkt den Real- und Imaginärteil der Spannung und damit der Impedanz. Für den Abgleich der Phase wird man einmal einen Widerstand oder verlustarmen Kondensator vermessen müssen. P.s. die Willson Stromquelle ist vermutlich auch keine so gute Wahl bei der hohen Frequenz. Man kann da gut einen kleinen HF Transformator nutzen, um den Strom auch gegen Masse messen zu können.
in welcher Größenordnung liegen denn die zu messenden Impedanzen? Wenn du bei sub-mA Signalen auf die Nulldurchgänge starrst, wirst du immer mit Dreckeffekten kämpfen. Der Vorschlag von Thomas W. passt (LCR-Meter machen das häufig so, wobei nicht nur der Spannungsabfall komplex zerlegt wird sondern auch der anregende Strom). Vielleicht wäre auch der AD5933 eine Komplettlösung für dein Problem: http://www.analog.com/en/products/rf-microwave/direct-digital-synthesis-modulators/ad5933.html#product-overview
Claas H. schrieb: > Bevor ich mich hier aber in irgendetwas verrenne und > total auf dem Schlauch stehe In der Hoffnung, dass Du mir das nicht übelnimmst: Moderater Irrsinn, würde ich sagen :) > wollte ich euch Fragen ob ihr noch andere Ideen habt. Viele Wege führen nach Rom; in diesem Fall unterstütze ich den, den Lurchi vorgeschlagen hat. Also: Signalerzeugung synchronisiert mit dem µC, d.h. Timer-Ausgang und Filter. Freilaufende WIEN-Brücke würde ich nicht machen. Gibt viele Wege dafür; 50:50-Rechteck und Tiefpass ist der einfachste. Unterabtastung finde ich eine sehr gute Idee; dazu würde ich vielleicht zwei Sample&Hold-Glieder verwenden und die statt des Gleichrichters/Tiefpasses einsetzen. Die Sampling-Pulse sollte man vom µC-Timer ableiten; dadurch hast Du zwingend eine feste Phasenbeziehung zwischen Sender- und Empfängerseite. Ach so: Natürlich Sende- UND Empfangsseite erfassen, wegen der Phasenmessung. Ach so: Ist zwingend vorgegeben, dass Du den Strom einspeisen und die Spannung messen musst? Ansonsten könntest Du eine stellbare Spannungsquelle benutzen, den Strom messen und die Spannung mit dem µC so einstellen, dass genau 0.8 mA fließen. Die Forderung, bei 0.8mA zu messen, ist dadurch auch erfüllt, aber es ist einfacher, eine Spannung einzuspeisen und den Strom zu messen als andersrum.
Wenn es denn rein analog sein soll ist die Synchrongleichrichtung ja schon genannt worden. Ansonsten würde ich Strom und Spannung mit der Soundkarte messen, jeweils Sinus anfitten und die Phase ausrechnen. Wenn die Soundkarte resp. deren Verstärker auch noch 50kHz schafft, braucht es nur noch einen bekannten Widerstand :) und der Sinusfit ist besonders einfach, da die Frequenz genau bekannt ist. (DAC und ADC haben den gleichen Takt) AC Stromquelle:http://www.edn.com/design/analog/4324499/Bipolar-current-source-maintains-high-output-impedance-at-high-frequencies Ansonsten mal schauen ob es nicht billiger, schneller und genauer damit geht: http://www.sourcetronic.com/shop/de/lcr-meter/
:
Bearbeitet durch User
Hi, vielen Dank für die vielen Antworten. Jetzt habe ich noch ein paar Fragen zu den einzelnen Vorschlägen: Zu Lurchi: Signalerzeugung ist mir soweit klar, genauso wie die Unterabtastung, aber wie bekomme ich die Geschwindigkeit vom ADC heraus? Als uC nutze ich den ATMega328p mit einem Takt von 16Mhz. Ich nutze den internen 10-Bit ADC. Den Takt des ADC kann ich über Prescale vorgeben, nur wie bekomme ich die Anzahl der benötigten Takte für die Wandlung raus (mit Worst Case Abschätzung) und wie verändert sich die Genauigkeit der Messung, da diese ja bei steigender Frequenz abnimmt. Und ist die Willson Stromquelle ein Synonym für die Howland Current Pump? Und wie ist das prinzipielle Vorgehen bei der Realisierung mit einem HF Transformator? Zu Achim: Der Realteil der Impedanz liegt zwischen 100-1300 Ohm und der Phasenwinkel im Bereich von 0-25°. Zum Vorschlag von Thomas werde ich mich heute noch ein wenig einlesen. Zu Possetitjel: Meinst du den Gleichrichter + Tiefpass zur Bestimmung der Amplitude? Wenn ich zwei Sample & Hold verwende, würde es Sinn machen zwei externe ADC zu verwenden um das Signal schneller abtasten zu können? Und falls ja, welche ADC würde ihr empfehlen? Die Variante mit der Spannungsquelle und messen des Stroms finde ich auch interessant, werde ich aber erstmal hinten anstellen. Zu Hendrik: Die Nutzung der Soundkarte zur Bestimmung des Signals hört sich auch gut an, welche würdest du verwenden und kennst du Projekte die mittels uC und Soundkarte bereits eine Signalerfassung realisieren? Viele Grüße
Claas H. schrieb: > Zu Possetitjel: > Meinst du den Gleichrichter + Tiefpass zur Bestimmung > der Amplitude? Ja, genau. > Wenn ich zwei Sample & Hold verwende, würde es Sinn > machen zwei externe ADC zu verwenden um das Signal > schneller abtasten zu können? Das kannst Du natürlich auch machen. - Die ADCs haben ja in der Regel schon Track/Hold-Schaltungen auf dem Chip. Du musst halt nur beide Kanäle synchron starten.
Claas H. schrieb: > Die Nutzung der Soundkarte zur Bestimmung des Signals hört sich auch gut > an, welche würdest du verwenden und kennst du Projekte die mittels uC > und Soundkarte bereits eine Signalerfassung realisieren? Du brauchst für die 50kHz eine Soundkarte mit 192kHz Samplerate, ob nun 16 oder 24bit ist eigentlich egal. Zum Spielen an der Soundkarte nehm ich gerne Specrumlab http://www.qsl.net/dl4yhf/spectra1.html oder ich Klick mir was in LabVIEW ... Frage ist, was DU willst: Schnell die Messungen machen, oder billigst was selber basteln? Und dann : Welche Phasenauflösung schwebt Dir denn vor? Die Messdatenerfassung könnte man auch über ein Scope machen, die Kosten ja auch fast nix mehr und haben alle USB Anschluß. Sind zwar nur 8 bit, aber bei genug Punkten und Sinusfit kommt man da auch schon sehr weit.
Die AVRs brauchen im freilaufenden Modus 13 Zyklen des ADC taktes für eine Wandlung. Ein Problem gibt es ggf. durch den Bezug auf den ADC Takt - der Vorteiler ist nicht so einfach synchron zu bekommen. Was aber geht, ist den ADC einen interrupt auslösen zu lassen und dann zu der AD Wandlung die Zeit / Phase des Oszillators zu bestimmen. Durch mitteln über mehr Werte bekommt man damit den Fehler auch sehr klein. Der ADC des AVRs ist gerade etwas langsam um ein 50 kHz Signal direkt abzutasten - da sind knapp 40 kHz als analoge Bandbreite angegeben. Wie sich das genau beim Subsampling verhält weiss ich jetzt nicht. Die Chancen stehen gut das man dies noch direkt mit dem µC machen kann, ggf. mit realtiv hohem ADC Takt (z.B. 250 kHz), ggf. auch etwas oberhalb des sonst optimalen Bereichs. Beim AVR würde ich auch eher zu PWM Signal vom Timer und Bandpass / Teifpass tendieren. So gut muss der Sinus zur Anregung meist nicht sein. Sofern man keinen so stabilen Strom braucht, könnte man das Testobjekt über einen Widerstand in Reihe mit Spannung versorgen. Mit dem Transformator kann man dann Wahlweise die Spannung am Vergleichswiderstand oder dem DUT je weils gegen Masse, mit dem gleichen Verfahren messen. Damit würden Phasenfehler oder eine variable Amplitude vom Filter herausfallen - man braucht aber halt etwas länger für die Messung. Als 1:1 HF Transformator könnte etwa eine Stromkompensierte Drossel dienen. Für nur Werte in einem Bereich 1:15 kommt man wohl auch noch ohne eine umschaltbare Verstärkung aus.
Hi, also ich habe mich jetzt noch ein wenig mit dem AD5933 beschäftigt, diese biete aber nicht, dass der Messstrom auf 0,8mA begrenzt wird sonder dieser ist abhängig von der angehängten Last. Daher werde ich deisen Chip leider nicht verwenden können, außer ich habe etwas übersehen und ihr belehrt mich eines besseren ;-) Die Soundkarte schließe ich auch erstmal aus, da das Gerät nacher mittels uC gesteuert werden soll und auch möglichst klein werden soll. Da ich keine zusätzlichen Komponenten wie einen PC verwenden möchte. Daher werde ich mich auf die Variante mit dem PWM -> Sinus -> Stromquelle -> Impedanz -> ADC mit intertupt konzentrieren. Jetzt habe ich mal kurz Überschlagen, das ich bei einem 8bit PWM Signal bei einem uC Takt von 16Mhz eine maximale PWM Frequenz von 16/256Mhz -> 62,5kHz bekomme. Daher macht eine PWM Signal keinen Sinn sondern ich erhalte ein Rechtecksignal mit 50kHz und muss diese filtern, oder habe ich einen Denkfehler? Ich habe auch noch nicht ganz verstanden, warum die Howland Current Pump nicht geeignet ist für die Anwendung, bzw. wo die Nachteile liegen. Besten Dank schon einmal für die super Hilfe von alle! :-)
Claas H. schrieb: > Daher macht eine PWM Signal keinen Sinn sondern > ich erhalte ein Rechtecksignal mit 50kHz und muss > diese filtern, Ja, genauso war das gemeint. > oder habe ich einen Denkfehler? Nein. > Ich habe auch noch nicht ganz verstanden, warum die > Howland Current Pump nicht geeignet ist für die > Anwendung, bzw. wo die Nachteile liegen. Die Howland-Schaltung enthält eine MITKOPPLUNG und hat daher eine Schwingneigung. Das macht sie bei manchen Leuten (z.B. bei mir) unbeliebt.
Nabend alle zusammen, ich habe es jetzt soweit, das ich mir ein Rechtecksignal am Ausgangspin erzeuge, indem ich den 8 Bit Timer2 verwenden und bei 16Mhz bis 160 zählen lasse, durch den CompareA wird der OC2A Pin mit 100kHz gewechselt, somit erhalte ich ein 50:50 PWM mit 50kHz. Diese schicke ich vorerst durch einen Butterworth Filter 8. Ordnung mit einer Grenzfrequenz von 51kHz. Dadurch erhalte ich das Ergebnis (Siehe Anhang) Rot ist der Ausgang an PB3 vom uC und Gelb das Signal nach dem Filter. Soweit hat alles gut geklappt, jetzt hänge ich aber ein wenig am Subsampling. Um den ADC immer zu einem definierten Zeitpunkt zu starten, habe ich einen weiteren Compare zum Timer2 hinzugefügt. Der Plan ist den Comparewert von 0-160 zu variieren und bei einem CompareB Match die AD-Wandlung zu starten. Somit erhalte ich wenn ich dies jeweils für den Zeitpunkt durchführe wo der Ausgang von PB3 0 bzw. 1 ist, 320 Werte pro Periode. Den Takt vom ADC habe ich vorerst auf den maximalen Takt von 1MHz gesetzt und erhalte damit 76,9kSPS. Für einen ersten Testlauf habe ich die Werte vom CompareB in 8er Schritten erhöht und die Werte aus dem ADC in ein Array geschrieben. Zudem habe ich diese öfters wiederholt um die Werte zu mitteln. Leider bekomme ich dabei keine sinnvollen Werte raus, sobald ich mir diese Werte ausgeben lasse und plotte. Da ich erst seit knapp 2 Wochen uC programmiere, bin ich für jeden Tipp dankbar um meine Programmierung zu verbessern.
1 | #include <avr/io.h> |
2 | #include "messen.h" |
3 | #include <avr/interrupt.h> |
4 | #include <util/delay.h> |
5 | #include <stdlib.h> |
6 | #include <stdio.h> |
7 | |
8 | volatile uint16_t convert = 0; |
9 | volatile uint8_t adc_aktiv = 0, sin_pin_value = 0, signal_half = 0; |
10 | volatile uint16_t adc_messwerte[40][2]; |
11 | |
12 | void sin_sig_init( void ) |
13 | {
|
14 | TCCR2A = (1<<COM2A0)|(1<<WGM21); //OC2A auf toggle bei Compar Match setzen, Modus 2 wählen (CTC) |
15 | OCR2A = F_CPU/(2*F_SIN)-1; //Zähler einstellen, bis zu dem gezählt werden soll |
16 | DDRB |= 1<<PB3; //Pin PB3 als Ausgang definieren (OCRA mapped on PB3) |
17 | }
|
18 | |
19 | void sin_sig_start( void ) |
20 | {
|
21 | TCCR2B = 1<<CS20; //Prescale auf "No Prescaling" |
22 | }
|
23 | |
24 | void sin_sig_stop( void ) |
25 | {
|
26 | TCCR2B = 0; //Prescale auf 0 -> Timer deaktivieren |
27 | }
|
28 | |
29 | void adc_init(void) |
30 | {
|
31 | ADMUX = (1<<REFS0); //Analog Refferenz auf extern VCC |
32 | ADMUX |= (1<<ADLAR); //linksbündig ausgerichtet um einfacher die obersten 8Bit auszulesen |
33 | ADCSRA = (1<<ADEN); //ADC einschalten |
34 | ADCSRA |= (1<<ADPS2); //Prescale der Systemclock auf 16 setzen (16MHz/16=1MHz) |
35 | |
36 | }
|
37 | |
38 | void adc_set_pin (uint8_t pin) |
39 | {
|
40 | ADMUX &= (1<<REFS1)|(1<<REFS0)|(1<<ADLAR); //MUX3..0 auf 0 setzen |
41 | ADMUX |= pin; //MUX3..0 auf den jeweiligen Eingangspin setzten |
42 | }
|
43 | |
44 | void adc_stop(void) |
45 | {
|
46 | if(adc_aktiv) adc_aktiv = 0; //falls noch nicht gestoppt wurde, auf stoppen setzen |
47 | ADCSRA &= ~(1<<ADSC); //stoppen der Analog-Digital Umwandlung |
48 | }
|
49 | |
50 | void adc_start(void) |
51 | {
|
52 | adc_aktiv = 1; //auf starten setzten |
53 | signal_half = 0; //auf die erste Singalhälfte setzen |
54 | ADCSRA |= (1<<ADIE); //Interrupt einschalten |
55 | OCR2B = 16; //Compare Wert für Timer2CompareB setzen |
56 | TIMSK2 |= (1<<OCIE2B); //Compare Interrupt aktivieren |
57 | }
|
58 | |
59 | void adc_dummy_read(void) |
60 | {
|
61 | adc_aktiv = 0; |
62 | ADCSRA |= (1<<ADIE); //Interrupt einschalten |
63 | ADCSRA |= 1<<ADSC; //Starten der Analog-Digital Umwandlung |
64 | _delay_ms(2); //Warten bis die Werte ausgelesen wurden |
65 | }
|
66 | |
67 | uint16_t adc_read (uint8_t zeile, uint8_t spalte) |
68 | {
|
69 | return adc_messwerte[zeile][spalte]; |
70 | }
|
71 | |
72 | ISR(TIMER2_COMPB_vect) |
73 | {
|
74 | sin_pin_value = (PINB & (1<<PB3))>>PB3; //Speichern des aktuellen Zustands von Pin PB3 |
75 | if(!(ADCSRA&(1<<ADIF)) && !((ADCSRA)&(1<<ADSC)) && sin_pin_value==signal_half) |
76 | {
|
77 | ADCSRA |= 1<<ADSC; //Starten der Analog-Digital Umwandlung |
78 | }
|
79 | }
|
80 | |
81 | ISR(ADC_vect) |
82 | {
|
83 | TIMSK2 &= ~(1<<OCIE2B); //Compare Interrupt deaktivieren |
84 | uint8_t temp = ((OCR2B+4)/8); |
85 | if(adc_aktiv && signal_half) |
86 | {
|
87 | adc_messwerte[temp+19][0] = (adc_messwerte[temp+9][0]+(ADCH))/2; //Speichern des Wertes der AD Wandlung |
88 | adc_messwerte[temp+19][1] = OCR2B +160; //Startzeitpunkt der Wandlung speichern |
89 | if(OCR2B >= 156) |
90 | {
|
91 | //adc_aktiv=0; //Wenn die zweite Signalhälfte auch abgetastet ist die Messung deaktivieren
|
92 | signal_half = 0; |
93 | OCR2B = 4; |
94 | }
|
95 | else OCR2B += 8; //Falls noch nicht vollständig abgetastet Compare2B auf den nächst höheren setzen |
96 | }
|
97 | else if(adc_aktiv) |
98 | {
|
99 | adc_messwerte[temp-1][0] = (adc_messwerte[temp-1][0]+(ADCH))/2; //Speichern des Wertes der AD Wandlung |
100 | adc_messwerte[temp-1][1] = OCR2B; //Startzeitpunkt der Wandlung speichern |
101 | if(OCR2B >= 156) |
102 | { //wenn 144 erreicht ist (5 Abtastungen der ersten Hälfte) |
103 | signal_half = 1; //Auf die zweite Hälfte des Signals stelle |
104 | OCR2B = 4; //Compare2B Werte zurücksetzen auf 16 |
105 | }else OCR2B += 8; //Falls noch nicht vollständig abgetastet Compare2B auf den nächst höheren setzen |
106 | |
107 | }
|
108 | else convert = (ADCL)|(ADCH<<8); //Werte aus dem ADC speichern |
109 | //if(start) ADCSRA |= 1<<ADSC; //erneut starten der Analog-Digital Umwandlung
|
110 | //else ADCSRA &= ~(1<<ADIE); //Interrupt ausschalten
|
111 | if(adc_aktiv) TIMSK2 |= (1<<OCIE2B); //Compare Interrupt einschalten |
112 | }
|
Zudem hier noch der Teil in der Main Methode:
1 | int main(void) |
2 | {
|
3 | adc_init(); |
4 | adc_set_pin(PHASE_PIN); |
5 | adc_dummy_read(); |
6 | sin_sig_init(); |
7 | sin_sig_start(); |
8 | _delay_ms(5); |
9 | adc_start(); |
10 | |
11 | do
|
12 | {
|
13 | sprintf(zeile1, "S:%04d ", adc_read(ebene,0)); |
14 | sprintf(zeile1+7, "T:%04d", adc_read(ebene,1)); |
15 | display_update(); |
16 | if(minute==1) adc_stop(); |
17 | }while(1); |
18 | }
|
Teilweise habe ich Abschnitte in der Main ausgelassen, die Tastendrücke auswerten und eine Zeitbasis, über die ich die Minute hochzähle. Der Einfachheit halber lasse ich mir die Werte aufm Display anzeigen und kann durch das Array durchschalten per Tastendruck. Demnächst setze ich mich noch an die Ausgabe per UART. Nur leider ergeben die Werte wenn ich diese Plotte keinen Sinn. Im Anhang ein Auszug von den Werten in dem Array. Vielen Dank für die bestimmt kommende Hilfe :-) So und nun gute Nacht.
Claas H. schrieb: > Nun zu meinem Problem: Sobald ich die Impedanz (Im aktuellen Testfall > rein ohmsch) verändere, wird logischer Weise des Messsignal in seiner > Amplitude kleiner und die feste Hysterese des Schmitt-Triggers sorgt für > eine Spätere Erkennung des Messsignals. Somit ist das Ausgangssignal des > XOR-Gatters kürzer auf High und somit verringert sich das > Tastverhältnis, obwohl keine Änderung des Phasenwinkels vorliegt. Kannst du das nicht durch normalisieren indem du "unendlich" verstärkst und dann auf "1" abschneidest?
Du hast den Arduino UNO genommen und solltest den Anrduino Due verwenden. KEin PWM, keine Unterabtastung nötig, da ARM 3. Alternativ eine Messkarte von NI.
Die folgende Zeile kommt mit komisch vor - insbesonder das temp+9 : adc_messwerte[temp+19][0] = (adc_messwerte[temp+9][0]+(ADCH))/2; Das dürfte einiges durcheinander bringen.
Lurchi schrieb: > Die folgende Zeile kommt mit komisch vor - insbesonder das temp+9 : > > adc_messwerte[temp+19][0] = (adc_messwerte[temp+9][0]+(ADCH))/2; > > Das dürfte einiges durcheinander bringen. Ohman, du hast recht, da habe ich vergessen was zu ändern, als ich die Schrittgröße von 16 auf 8 geändert habe. Danke! Das sollte hoffentlich bessere Ergebnisse liefern. >Du hast den Arduino UNO genommen und solltest den Anrduino Due >verwenden. >KEin PWM, keine Unterabtastung nötig, da ARM 3. Klingt interessant, habe mir grade mal das Datenblatt vom ATSAM3X8E Cortex-M3 MCU angeschaut. Wie schwer ist der Umstieg von dem ATMega328p auf diesen Prozessor? Und eine NI-Messkarte kann nicht eingesetzt werden, da das Gerät mobil und ohne externe Hardware, wie einen PC genutzt werden soll. >Claas H. schrieb: >> Nun zu meinem Problem: Sobald ich die Impedanz (Im aktuellen Testfall >> rein ohmsch) verändere, wird logischer Weise des Messsignal in seiner >> Amplitude kleiner und die feste Hysterese des Schmitt-Triggers sorgt für >> eine Spätere Erkennung des Messsignals. Somit ist das Ausgangssignal des >> XOR-Gatters kürzer auf High und somit verringert sich das >> Tastverhältnis, obwohl keine Änderung des Phasenwinkels vorliegt. > >Kannst du das nicht durch normalisieren indem du "unendlich" verstärkst >und dann auf "1" abschneidest? Das ist einen weitere alternative, die ich noch testen werde. Vorerst werde ich aber die Variante mit dem Subsampling versuchen umzusetzen.
Claas Hartmann (black_jacky schreieb: > Klingt interessant, habe mir grade mal das Datenblatt vom ATSAM3X8E > Cortex-M3 MCU angeschaut. Wie schwer ist der Umstieg von dem ATMega328p > auf diesen Prozessor? Dieser Prozessor ann in der Arduino-Sprache programmiert werden. Einmaliige vorgänge ins Setup(), statt main()einfach loop() verwenden. Dann C oder C++ . Es ist damit wirklich der Cross-Compiler realisiert worden. Ich habe damit ein EKG gebaut. Alle 2 ms ein Interrupt und in dieser Zeit wird folgendes ausgeführt: 1. AD Wadlung 2. DA Wandlung (Ausgabe eines Nornsignals) 3. Digitales Medianfilter 3. Digitales Notch mit FIR Methode 4. Digitales Tiefpass mit FIR Methode 5. Zeichnen eines Kurvenzugs auf ein TFT Display 6. Auswertung eines Encoders und einiger Schalter (entprellen)
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.