Переполнение буфера в ads1115 при низкой частоте дискретизации - PullRequest
0 голосов
/ 15 ноября 2018

Я делаю систему сбора данных для аналоговых датчиков (давление воды и мутность воды) с использованием Raspberry Pi 3B и АЦП (ADS1115).

Проблема, с которой я сталкиваюсь, заключается в том, что время от временибуфер (или что-то еще) заполняется, и ads1115 дает ноль показания.

Чем ниже скорость передачи данных (или что-то еще), тем чаще встречаются нули.

Здесь я показываю графики, которые у меня есть:

СКОРОСТЬ ДАННЫХ = 8 сП

8 сП

СКОРОСТЬ ДАННЫХ = 16 сП

16 с / с

Падения, при которых мутность падает до нуля, а давление до отрицательных значений являются следствием нулевых показаний в АЦП.

Есть ли способ очиститьбуфер (или что-то еще) АЦП?Или вы думаете, что проблема в другом?

Все соединения, которые у меня есть, находятся в репозитории GitHub: https://github.com/Ricardosgeral/relier/blob/master/README.md

Код для чтения ADS1115 находится в этом файле https://github.com/Ricardosgeral/relier/blob/master/analogsensor_thread.py

Я быоцените некоторые направления здесь.

Спасибо

1 Ответ

0 голосов
/ 02 апреля 2019

Я занимаюсь разработкой некоторых встраиваемых устройств ads1115 и raspbery pi на ядре Windows 10 iot, это мои шаги, я хочу помочь вам.

private I2cDevice _converter1;

вот мои установочные биты для ads1115

var i2CSettings1 = new I2cConnectionSettings(0x48)
                {
                    BusSpeed = I2cBusSpeed.FastMode,
                    SharingMode = I2cSharingMode.Shared
                };

                var i2C1 = I2cDevice.GetDeviceSelector("I2C1");
                var devices = await DeviceInformation.FindAllAsync(i2C1);
                var gpio = GpioController.GetDefault();

                _converter1 = await I2cDevice.FromIdAsync(devices[0].Id, i2CSettings1);
                _converter1.Write(new byte[] { 0x01, 0xc4, 0x60 });
                _converter1.Write(new byte[] { 0x02, 0x00, 0x00 }); //rate
                _converter1.Write(new byte[] { 0x03, 0xff, 0xff });

после настройки, возможно, я смогу использовать пин-код для рекламы ads1115, я соединяю пин-код оповещения с пи-цифровым пин-кодом и запускаю мой код чтения, иногда я читаю в цикле, для цикла вы должны ждать 20 миллисекунд вот мой код чтения

_converter1.WriteRead(new byte[] { 0x0 }, bytearray1);
                            if (BitConverter.IsLittleEndian)
                                Array.Reverse(bytearray1);
                            var value1 = BitConverter.ToInt16(bytearray1, 0);

Referance напряжение очень очень важно, я использую raspbery PI 3.3 VCC для Referance напряжения и других важных вещей в raspbery есть линия 2 входного напряжение один из USB и другой 5-вольтовый контакт VCC.

линия порта USB регулируется, но Контакт Vcc на 5 вольт НЕ РЕГУЛИРУЕТСЯ

если вы используете 5-вольтовый контакт VCC для распечатки рекламы1115 не читается четко,

с этим кодом я могу прочитать любую ситуацию

...