Питание MPU-6050 с помощью цифровых контактов Arduino

Я пытался использовать MPU-6050 (в частности, GY-521) с Arduino Nano v3.0, но не получаю никаких показаний, когда пытаюсь включить MPU-6050 с VCC и GND, подключенными к цифровым контактам на Arduino. .

Когда у меня есть VCC и GND, подключенные к 5V или 3V3 и GND на Arduino, я могу получать показания с гироскопа/акселерометра. Когда я подключаю их к цифровым контактам, я получаю показания, но все они равны нулю, и даже когда датчик встряхивается, значения остаются равными нулю. Код, который я использую в настройках цифровых контактов, выглядит следующим образом:

pinMode(powerpin, OUTPUT);
pinMode(groundpin, OUTPUT);
digitalWrite(powerpin, HIGH);
digitalWrite(groundpin, LOW);

Когда я подключаю акселерометр ADXL377 к тем же контактам, я без проблем получаю показания. Это проблема с количеством тока, который может быть пропущен через цифровые контакты? Кажется, что цифровые контакты на Nano могут выдать максимум 40 мА, а MPU-6050 требуется всего около 3 мА, поэтому я предполагаю, что ток не является проблемой. Любая помощь будет здорово.


person yoshi    schedule 31.03.2015    source источник
comment
Вы можете и должны подключить MPU GND к Arduino GND. Вам не нужно делать это с цифровым пин-кодом, не так ли? Думаю, я понял вашу идею о включении/выключении питания с помощью цифрового вывода питания, и это нормально, но контакт GND может работать не так, как вы хотите.   -  person eventHandler    schedule 31.03.2015
comment
Кроме того, если вы по ошибке установите groundpin=HIGH и powerpin=LOW, вы снабдите MPU значением -5V, что может быть рискованно.   -  person eventHandler    schedule 31.03.2015


Ответы (1)


У меня была такая же проблема, вот почему это была проблема. Прежде всего, хорошей идеей будет подключение LOW к GND. Еще одно: когда вы устанавливаете свой пин ВЫСОКИМ:

pinMode(powerpin, OUTPUT);
digitalWrite(powerpin, HIGH);

через некоторое время он станет высоким, поэтому вы должны установить некоторую задержку между:

pinMode(powerpin, OUTPUT);
digitalWrite(powerpin, HIGH);

delay(10);

Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x6B);  // PWR_MGMT_1 register
Wire.write(0);     // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);

Итак, вам нужно получить питание, а затем разбудить устройство. Аб. 10 мс - хорошее значение.

После этого вы можете читать как обычно (и хорошей идеей будет перевести устройство в спящий режим, если вы не читаете с него слишком часто).

person Nulen    schedule 01.04.2015
comment
Спасибо! Это все исправило! Никогда не знал, что для включения питания Arduino требуется немного времени. - person yoshi; 05.04.2015