Проблема связи I2C с двумя ведомыми устройствами (atlas Scientific) и одним Nano (официальным)

Я работаю над проектом, используя Arduino Nano (официальный) и два периферийных устройства от Atlas Scientific (pH и DO), обменивающихся данными через i2c. Все работает нормально, когда я использую питание USB, подключенное к ПК или к адаптеру 5 В (обычно зарядное устройство для телефона).

Я хочу использовать батарею 12 В и адаптер 12 В постоянного тока 1,5 А для питания моей системы, но проблема в том, что некоторое время (от 30 до 40 секунд) она работает нормально, а затем у pH начинаются проблемы со связью и светодиод становится красным, а светодиоды TX / RX от Arduino (которые ни к чему не подключены) начинают сходить с ума. Я использую подтягивающие резисторы 4,7 кОм и регулятор напряжения L7805ACV для перехода от 12 к 5 В.

Прикрепите часть схемы системы.

Если у вас есть какие-либо идеи, начинаю терять идеи

EDIT: Вот часть программы, касающаяся связи i2c:

#include "Wire.h"

/*********************************************************************************************************
 *                                               Address
 *********************************************************************************************************
 */
int pH_address = 99;
int DO_address = 97;

/*********************************************************************************************************
 *                                         i2C CONFIGURATION
 ********************************************************************************************************* 
 */

byte received_from_computer = 0;                                                                           
char sensor_data[20];                                                                                      
byte in_char_sensor = 0;                                                                                   
byte j = 0;                                                                                                
byte code = 0;                                                                                             
int time_ = 850;     

void setup()
{
  Wire.begin();
}
void loop()
{
  pH = Get_i2C(pH_address);    
  delay(200);
  DO = Get_i2C(DO_address);
  delay(200);      
}

/**********************************************************************************************************
 *                                                  i2C
 * ********************************************************************************************************
 */

float Get_i2C(int address)
{
  char computerdata = 'R';  
  Wire.beginTransmission(address);
  Wire.write(computerdata);
  Wire.endTransmission();

  delay(time_);

  Wire.requestFrom(address, 16, 1);
  code = Wire.read();
  while (Wire.available())
  {
    in_char_sensor = Wire.read();
    sensor_data[j] = in_char_sensor;
    j += 1;
    if (in_char_sensor == 0)
    {
      j = 0;
      break; 
    }
  }
  return atof(sensor_data);
}                                                                    

, 👍1


1 ответ


Лучший ответ:

1

Две идеи.

1: Подсчитайте свои основания. Если вы считаете больше 1, у вас проблемы. В вашей системе должно быть единое заземление, поэтому ЛЮБОЕ соединение на каждом компоненте с маркировкой GND должно быть подключено к земле.

Причина, по которой множественное заземление является проблемой, заключается в том, что ваши сигналы (кроме дифференциальных сигналов) измеряются относительно земли, поэтому, если два компонента имеют разные представления о том, что такое «земля», они начинают расходиться во мнениях относительно того, что составляет 1 и 0.

2: Выберите источник питания. Убедитесь, что ваш источник питания 5 В по-прежнему обеспечивает 5 В. Возможно (хотя и маловероятно), что L7805ACV не может обеспечить достаточный ток, и ваша система выходит из строя. Если возможно, посмотрите с помощью осциллографа, чтобы проверить наличие шума в источнике питания 5 В.

На ваших платах уже должны быть развязывающие конденсаторы, но добавление еще одного не повредит, поэтому попробуйте также добавить конденсатор 0,1 мкФ между 5 В и GND, чтобы устранить любые помехи.

,

Спасибо за ваш ответ. Для первой идеи: каждая земля соединена вместе. Что касается второго, я тоже об этом подумал, поэтому теперь я питаю свой nano от 12 В для адаптера, а два i2C являются источниками питания с 5 В от nano. Остальное CO2 + HC05 с 5V L7805ACV., @Hugo Vernier-Lambert

И все еще есть проблема ... я могу попробовать добавить развязывающий конденсатор. Что-то действительно странное заключается в том, что светодиоды TX / RX начинают мигать, но к ним ничего не подключено, когда возникает проблема., @Hugo Vernier-Lambert

@HugoVernier-Lambert Это действительно странно. Все, что я могу предложить, это удалять детали, пока вы не увидите решение проблемы. Это может, по крайней мере, дать вам представление о том, в какой части может быть проблема. В противном случае исследуйте каждый сигнал. Вы также можете предоставить нам копию своего кода. Звучит маловероятно, но что-то там может быть., @ForgeMonkey

Я отредактировал вопрос с помощью программы i2c., @Hugo Vernier-Lambert

Я попытался добавить немного развязывающего конденсатора или перейти с 5 В Arduino на 3,3 В, у которого уже больше развязывающего конденсатора, чем у 5 В, но ничего, все та же проблема., @Hugo Vernier-Lambert

Проблема связана с модулем pH (красный), но я прокомментировал периферийное устройство DO i2C, и модуль pH работал нормально при любом источнике питания. И то же самое, если я прокомментирую периферийное устройство pH i2C, DO работает нормально. Проблема в том, что я использую его "одновременно", на самом деле один за другим, но оба подключены и используются программой., @Hugo Vernier-Lambert

Обсуждая проблему с другим инженером-электронщиком, он сказал мне, что L7805ACV перегревается, вызывая некоторое падение напряжения, что приводит к перезагрузке Arduino снова и снова. И поскольку светодиоды TX/RX мигают один раз при перезагрузке при запуске, мы видим, что они мигают все быстрее и быстрее. Я попытаюсь получить радиатор, чтобы охладить этот регулятор напряжения., @Hugo Vernier-Lambert