Я таки не понял, а шо теперь новая задача? ТС написал, что у него полный комплект, а там скорость обновления в десять раз круче его хотелок.
по даташиту разные скорости можно установить даже полсекунды, сколько у него там история умалчивает
PS датчик имеет три настраиваемых компаратора, можно приспособить для его задачи установки датчика в оптимальную зону измерений - 4 - 6 мм, это сильно улучшит измерения, раза в четыре
В моем случае частота колебаний, которые надо записывать ориентировочно 20 Гц.
Скрин из старого АЦП (умер по независящим от меня причин…). Период снятия показаний был 0,2 мсек
По ADS1115 при 860SPS это на 1 период будет примерно 40 точек, что предполагаю вполне достаточно + возможность интерполяции на ПК. В случае нехватки уже будет смысл рассматривать другие АЦП. Сейчас не говорю про шумы - здесь к сожалению оценить можно только методом проб и ошибок, а приобретать новые модули и тем более в них еще плюсом разбираться необходимо только в случае неудовлетворения старым. Как итог: не попробуешь - не узнаешь. Если не перегрузят работой, то в ближайшее время испытаю
Это чисто попытка понять, как работать в домашних условиях, т.к. все остальные “ингредиентов” лежали на работе (достало их домой таскать). Время для конечного результата конечно нужно для определения частоты колебания, но при явной частоте получения данных погрешности крайне не существенны, как следствие на вывод его подавать не собираюсь
Да, тоже смотрел на другие. Есть в наличии ESP32. По памяти должно хватить с запасом. Но пока есть желание во время испытания получать графическую зависимость на ПК, а не грузить в память и выгружать после
Для построения графиков на экране достаточно 8 битов на отсчет. А уж 10-разрядного АЦП Атмеги 328 за глаза хватит.
1600 милливольт/10000 = 160 микровольт (цена деления датчика) - атмега тут и рядом не валялась со своими шумами
Откуда число 10000?
Человеку нужно отобразить график на экране. В осциллографах для этого используются 8-разрядные АЦП. Зачем больше?
из даташита 0 - 10мм с нарезкой 1 микрон
Из какого даташита?
на его датчик
думаешь он просто так больше 10 килорублей заморских стоит?
При чем тут датчик?
У него стоит задача:
И в том же самом сообщении он приводит осциллограмму с устройства которое испортилось, и которое нужно заменить.
Исходить нужно из задачи, а не из даташита на устройство, которое по неграмотности выбрал пользователь, путающий между собой разрядность CPU и разрядность ADC.
Если стоит задача использовать конкретный датчик по максимуму (а это совсем другая задача), то, как уже было отмечено выше, следует искать у этого датчика цифровой выход. А ежели такого не обнаружится, в выход исключительно аналоговый, нужно быть готовым выложить за АЦП сумму сопоставимую с ценой датчика. Чудес не бывает.
И тут самое время спросить ТС, что же ему нужно:
- Получить приемлемую картинку на экране ПК с наименьшими затратами.
- Не считаясь с затратами (по порядку - цена датчика, но может быть и больше) получить от конкретного датчика результат на максимуме возможностей последнего.
нету у него цифрового выхода, есть только токовая петля и три компаратора, чтобы вогнать (установить) в диапазон измеряемых величин, то-есть если вибрации не превышают ±0.5 мм, то можно использовать ADC на самых малых опорных напряжениях, с высокой долей вероятности ADS1256 ему хватит, ну может добавить хорошую опору, итого 2т.р. и прямые руки
Для графика 8-10 бит достаточно, но для постобработки не хватает. График только технически отображает, что происходит. Постобработка происходит по массиву данных (не графика, а числа). Извиняюсь, не указал последующую обработку ране. Плюсом к тому же, если брать колебания в некотором диапазон, то они пойдут условно от 5,000 мм (условно 2,5 вольт аналога), до опять же условно ±0,500 мм. Нужно на выходе в цифре получить 2-3 цифру после запятой (колебания не такие большие). При этом начальное положение может по мм/вольтам варьироваться в зависимости от точности установки датчика. Поэтому 10 бит не хватает точно. Конечно можно попробовать “делителем” осуществить, но точность тогда меньше будет. А про шумы уже писал)
Хотя до того, как начал работать в свое время с АЦП графики обрабатывали линейкой - точности и в 10 бит бы хватило)) Но видимо я гонюсь за точностью и хочу более качественно данные получать просто. З - зануда)
У самого датчика нет. Но к нему идёт коммуникационный модуль, который преобразует аналоговый сигнал в цифровой. Причем раз это родной модуль, то можно надеятся что преобразует он оптимальным способом.
Вы , как мне кажется, не на том концентрируетесь. Вы для начала научитесь получать данные с АЦП хотя бы 100sps и правильно передавать их на комп. Если забыли, вы пришли сюда с проблемой, что у вас датчик читал только 10 отсчётов в секунду.
Я видел, что вы написали, что теперь результат стал лучше. Но почти уверен, что только изменения скорости порта для этого будет мало.
Вы понимаете, что если вам для решения задачи хватало аппроксимации линейкой графика, то повторить “линейку” на постобработке - это всего лишь вопрос вашей математической квалификации? Теорема Котельникова для начала.
Можно тратить кучу сил на реализацию аппаратной части в той задаче, где наука дает решение на более простой аппаратной базе.
Отчасти понимаю. Но есть одно но: колебания затухающие могут быть:
-
медленные, т.е. амплитуда падает меееедленно и здесь имеет значение величина амплитуды более точно;
-
Быстрозатухающие - амплитуда падает быстро. При этом точность “вершинки” синусоиды имеет значение.
То что было раньше по моему мнению чуть “вилами на воде писано”. Поэтому и хочу точности. Но сейчас реально не в этом суть
Вопрос появился. Если я в порт подаю по два байта возможен ли вариант, что подключив ардуинку к порту и начав собирать данные могу упереться, что первым считанным байтом будет не старший, а младший? Надо ли программно сделать какую-то “контрольную точку” перед считыванием показания?
Пока скетч такой. Вроде работает
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads;
void setup() {
Serial.begin(115200); // Инициализация последовательного порта на 115200 бод
Wire.begin(); // Запускаем библиотеку Wire для I2C
ads.begin(); // Инициализация ADS1115
ads.setGain(GAIN_ONE); // Установка усиления (можно изменить в зависимости от вашего датчика)
ads.setDataRate(RATE_ADS1115_860SPS); // Установка скорости выборки 860 SPS
}
void loop() {
int16_t adc = ads.readADC_SingleEnded(0); // Читаем значение с первого канала (A0)
// Передача данных через UART
uint8_t highByte = (adc >> 8) & 0xFF; // Старший байт
uint8_t lowByte = adc & 0xFF; // Младший байт
// Преобразуем 16-разрядное значение в два байта
Serial.write(highByte); // Отправляем старший байт
Serial.write(lowByte); // Отправляем младший байт
delay(1000); // Задержка. Стоит временно
}
И еще вопрос: а где-то есть кроме файла с расширением *.h (например Adafruit_ADS1X15.h) описание списка команд библиотек? Понимаю, что есть примеры, но они скудные. В других местах пишут, что только через этот файл
