PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3D Beschleunigungsmesser DE-ACCM3D2 - Wer hat Erfahrung mit dem Bauteil?



RobotDesign
22.04.2012, 22:24
Hallo Experten,
beim Versuch die Beschleunigungswerte des DE-ACCM3D2 mit einem Arduino auszulesen komme ich nicht wirklich weiter:
Das Signal ist so "verrauscht" dass die Werte nicht sinnvoll verwendbar sind. :confused:

Wie in dem Datenblatt angegeben habe ich VCC auf den Arduino 5V Ausgang gelegt, GND mit GND verbunden. Die x,y,z Pins habe ich mit den Analog-In-Pins 0,1,2 des Arduino verbunden. Nachdem, was ich dazu im Datenblatt finde sollte das funktionieren:

General Description
The DE-ACCM3D2 is a complete 3D ±2g analog accelerometer solution. It features integrated op amp buffers for direct connection to a microcontroller’s analog inputs, or for driving heavier loads.

[...]

Output buffers
A bare accelerometer chip has an output impedance of 110kΩ, which is unsuitable for obtaining reliable measurements when connected to an analog to digital converter. On the DE-ACCM3D2, a quad rail to rail operational amplifier buffers the outputs from the LIS344ALH, greatly reducing output impedance. The absolute maximum load beyond which accuracy begins to seriously suffer is 3.3mA, or 500Ω.

Supply filtering
A 1uF ceramic bypass capacitor on the DE-ACCM3D2 provides excellent power supply decoupling. No
external capacitors are necessary between Vcc and GND.

Output filtering and noise
A pair of 10nF capacitors limit the noise figure of the DE-ACCM3D2, without overly sacrificing bandwidth.
RMS noise is typically 7.3mg, and output bandwidth is 500Hz - making it suitable for high frequency sampling of acceleration.

Hier der Arduino- Code:


//3D Accelleration Sensor Test

int ADCX=0;
int ADCY=1;
int ADCZ=2;

int valueX;
int valueY;
int valueZ;

float Gx;
float Gy;
float Gz;

void setup()
{
Serial.begin(9600);
delay (2000);
}



void loop()
{
Serial.print("G");
delay (2);
valueX=analogRead(ADCX);
Serial.print(valueX);
Serial.print(";");

valueY=analogRead(ADCY);
Serial.print(valueY);
Serial.print(";");

valueZ=analogRead(ADCZ);
Serial.print(valueZ);
Serial.println(";");
}


Mein Problem ist, dass die Werte für x,y,z immer nahezu gleich sind - auch wenn ich das Bauteil (mit dem angeschlossenen Arduino) drehe oder den Sensor ruckartig in einer Fläche bewege. Die im Datenblatt angegebenen Rechenbeispiele legen etwas anderes nahe.
Die Pins für Gx,GY,Gz sind nicht elektrisch miteinander verbunden. (Das Bauteil habe ich gesockelt - insofern konnte ich das nachprüfen.)

Mein zweites Problem ist, dass die Sensordaten auch dann stark rauschen, wenn der Arduino mit dem Bauteil auf dem Tisch liegen.

Wenn ich delay (2) auf höhere Werte lege (100-500) sieht man deutlich, dass das Signal rhytmisch schwankt mit -geschätzten- 1 Hz. Bei delay (2) [Millisekunden] sind die Signale unbrauchbar.

Die Signale habe ich per seriellem Kabel ausgelesen. Den Arduino habe ich über einen USB- Verteiler (mit seperater Stromversorgung) und auch direkt mit dem Rechner verbunden. Alternativ habe ich es auch mit einem geregelten Labornetzteil und einem Bluetooth - Shield versucht. Allerdings hatte das keinen Effekt auf das Messergebnis.

Hat einer von Euch Erfahrungen mit dem Bauteil? Sind die 500 Ohm das Problem?

BerndJM
23.04.2012, 03:15
Hi,

auf den ersten Blick gefällt mir deine Definition der Analogeingänge irgendwie nicht,
müßte das nicht so aussehen:


int ADCX=A0;
int ADCY=A1;
int ADCZ=A2;
:confused:

Grüßle Bernd

RobotDesign
23.04.2012, 10:54
Hallo Bernd,
ich habe noch mal nachgeschlagen: http://arduino.cc/en/Reference/analogRead

Example

int analogPin = 3; // potentiometer wiper (middle terminal) connected to analog pin 3 outside leads to ground and +5V
int val = 0; // variable to store the value read

void setup()
{
Serial.begin(9600); // setup serial
}

void loop()
{
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
}

... das sollte demnach passen.

BerndJM
23.04.2012, 16:29
Ok, ok,

ich hatte mich an den Tutorials (z.B.: http://arduino.cc/en/Tutorial/AnalogInOutSerial) und den mitgelieferten Beispielen orientiert.

const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
Habs grade ausprobiert, es funktionieren beide Varianten. Sorry für den "Fehlalarm".

Grüßle Bernd

RobotDesign
25.04.2012, 21:56
Habe heute den Sensor an ein Labornetzteil angeschlossen und die x/y/z Signale (nacheinander) mit einem Oszilloskopen betrachtet:
Ergebnis: Das Signal rauscht überhaupt nicht! Und je nach Neigung verändern sich auch die Signale - so wie es eigentlich sein soll.
Am Sensor liegt es also nicht. ;)

Aber warum kann man die Signale nicht mit den Arduino- Eingängen vernünftig messen?
Die Anschlüsse habe ich nicht verwechselt (bereits geprüft).
Hat von Euch einer eine Idee?