Написал маленький тест на дифф режим леонардо с помощью приведённой выше библиотеки. Вывод в кодах АЦП. Подключил к мосту и посмотрел как работает внутренний дифф усилитель с АЦП. К сожалению питание грязное, но общая картина понятна. Отлично работает. Милливольты измеряет.
Спасибо, к сожалению поздно увидел сообщение и сегодня проверить не смогу. Если заработает это будет мое спасение!)
Опыты с использованием одного плеча в качестве опорного завершились не очень удачно. Так как напряжения в плечах практически равны, а на пине Меги для внешнего питания висит 32кОм резистор то он сильно просаживает напряжение, если верить тестеру то с 2,38В до 2.2 В. второе плечо получается выше этого диапазона, повесив на второе плечо диод 4007 ситуация не изменилась, хотя при замерах тестером показывал падение до 2, 18В при одном диоде и до 1,6В при 3-х последовательно повешенных диодах, думаю проблема в том что слишком слабый ток протекает в датчике, а при измерении тестером потребление увеличивается. Еще раз напомню что плохо помню электротехнику, и возможно делал глупые вещи, но решил дополнительно повесить светодиод. В итоге получилось добиться понижения напряжения до 930 единиц. Для моей задачи требуется считать отклонение от нулевого сигнала в несколько единиц и выдать аварийный сигнал. На пробной плате разбег показаний при питании от компьютера показал 3-4 единицы, в принципе не то чего хотелось добиться, но все же можно было работать, однако вновь при питании от блока питания размах увеличился до20 единиц. это конечно достижение по сравнению со 100 единицами при двух отдельных измерениях, но все равно ни куда ни годится.
На пробной плате разбег показаний при питании от компьютера показал 3-4 единицы, в принципе не то чего хотелось добиться, но все же можно было работать, однако вновь при питании от блока питания размах увеличился до20 единиц. это конечно достижение по сравнению со 100 единицами при двух отдельных измерениях, но все равно ни куда ни годится.
Это абсолютно ненормально, не выяснив причину этого явления можно получить такой-же вариант и дифференциальными входами.
Для чистоты эксперимента попробуйте следующие варианты:
1 Мост и Ардуино питать от одного БП
2 Мост от БП ардуино от ноутбука, но с питанием от аккумуляторов
Очень похоже на некачественный БП или неудачный монтаж (длинные провода, неудачно подключена земля)
Чудес не бывает, бывают плохие контакты или утечка (КЗ). Больше это ничем объяснить нельзя. А насчет падения напряжения при подключении входа опорного напряжения-это вопрос не принципиальный. Если второе плечо моста не меняет свои параметры, то его можно заменить качественным переменным резистором подключенным к точкам питания моста. И выставить необходимое опорное напряжение. Тогда вносить дополнительные элементы в измерительную цепь (и ухудшать её параметры) не придется. В этом случае можно обеспечить независимость измерений от изменения напряжения питания и максимальную чувствительность (если в мосте нет нелинейных элементов)
Это абсолютно ненормально, не выяснив причину этого явления можно получить такой-же вариант и дифференциальными входами.
Ну когда я промышленный измерительный модуль подключаю показания стоят в пределах 0,5мВ при том же питании от БП. На сколько мне представляется вся нестабильность питания моста которая прямопропорционально меняет выходной сигнал одинаково воздействует на оба плеча и поэтому диф. метод будет максимально независимым от питания.
"" ...Для чистоты эксперимента попробуйте следующие варианты:
1 Мост и Ардуино питать от одного БП - Так и делал, единственное считываю показания через USB, соответственно там плата тоже запитывается, не знаю какой канал в приоритете.
2 Мост от БП ардуино от ноутбука, но с питанием от аккумуляторов -- Так тоже пробовал, Подключение кабеля с внешним питанием увеличивает разброс показаний до +-10 единиц.
"... Очень похоже на некачественный БП .." да блок не думаю что сильно качественный, но так как специализированный модуль даже с ним может считать показание, думаю что его все таки можно использовать, с использованием аналогичного способа измерения на ардуине.
" ...или неудачный монтаж (длинные провода, неудачно подключена земля) провод от датчика до макетки 10 см на установке более метра, но даже на мекетке подключение БП сильно искажает сигнал. Что касается земли, то сама установка, в том числе БП заземлены, не знаю правда куда эта земля уходит, возможно в соседнее помещение, где на неё повесили какой нибудь компрессор...
Чудес не бывает, бывают плохие контакты или утечка (КЗ). Контакты вот такие припаянные к концам провода от датчика , в ардуине сидят хорошо только когда линейкой подключаются, а по одному как у меня очень поршивенький контакт, особенно на заезженной плате, но не знаю как сделать лучше.
"... Если второе плечо моста не меняет свои параметры, то его можно заменить качественным переменным резистором подключенным к точкам питания моста..." Замеры тестером показали изменение напряжения на обоих плечах, соответственно заменяя одно плечо переменным резистором мы скорее всего сильно уменьшаем чувствительность прибора.
Немножко погуглить и библиотека для дифференциального режима леонардо и меги https://www.davidpilling.com/wiki/index.php/DiffADC Можно мегу к мосту подключать и иметь хорошую точность при использовании внутреннего операционного усилителя. Для меги усиление 1, 10 , 200. Для леонардо 1, 10 , 40 , 200.
Кто может подсказать , по приведенной ссылке скачал библиотеку для дифференциальных измерений, но IDE 1.8.1 и 1.8.9 говорят что в данном архиве не существует корректных библиотек, в что может быть проблема? может можно где то ещё более актуальные библиотеки найти?
Это не библиотека в ардуиновском понимании. Для работы достаточно положить файл DifferentialADC.c из архива в папку с программой. Файл Leo_ADC_diff.ino это пример. Несколько строчек из него я взял для тестовой программы. Библиотек для дифф режима АЦП я не встречал. Как я уже говорил, достаточно поменять 1 строку в стандартной analogRead. Как по мне писать для этого целую библиотеку - перебор.
Это не библиотека в ардуиновском понимании. Для работы достаточно положить файл DifferentialADC.c из архива в папку с программой.
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Ну насчет того, что что то коротит, это маловероятно. В таких конструкциях нужно очень грамотно подходить к разводке "земли". Ну и фильтра по питанию, вплоть до LC. Ну и однократные измерения рднозначного результата не дают, хотя-бы сотню и усреднить. Я достаточно упорно пытался сделать приличный мультиметр. При автономном питании без проблем измеряет напряжения от 1 милливольта. При питании от USB или сетевого БП стабильны только десятые, сотые уже скачут. Та-же картина с сопротивлениями от аккумулятора от 0,5 Ома до 50 МОм, а от USB 10 Ом - 2 МОм. Правда у меня проблема усугубляется тем что коммутация всех делителей производится ключами самой 328, а они все-таки нелинейны и обладают сопротивлением около 20 Ом. Если применять механические переключатели то параметры на порядок лучше.
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Просто примите как данность, что когда требуются вменяемые аналоговые измерения, о "первых попавшихся" блоках питания следует сразу забыть. БП следует тщательно подбирать и, скорее всего, он окажется самым дорогим элементом конструкции.
Замеры стабильности блока питания показали милисекундные забросы до +-0,7В с завидной постоянностью, при использовании понижающего трансформатора, сигнал очистился до +-0,1В, разброс показаний датчика на обоих каналах составил 3 единицы, с дифференциальным методом и с усилением единиц 40. Пока возился заметил что появляются редкие выбросы раз в 10 секунд на 100 или даже 200 единиц.
Решил работать с одним из каналов, что бы не усиливать погрешность. Сейчас пытаюсь подобрать фильтр, нашел код для медианного, резкие скачки удалось отфильтровались при выборке из 10, при уменьшении все равно небольшие помехи проскакивают, но теперь на мой взгляд сильно увеличилось время отклика так сказать. Кто подскажет с какой максимальной частотой можно опрашивать аналоговый выход и фильтровать его в дальнейшем. или может кто посоветует более быстрый фильтр?
int sensorPin = A0; // номер аналогового входа
#define DAT A1 // Вывод состояния концевика
// функция считывает аналоговый вход заданное количество раз
// и возвращает отфильтрованное значение
int readMean(int pin, int samples){
// переменная для хранения суммы считанных значений
int sum = 0;
// чтение и складывание значений
for (int i = 0; i < samples; i++){
sum = sum + analogRead(pin);
}
// делим сумму значений на количество измерений
sum = sum/samples;
// возвращаем среднее значение
return sum;
}
// функция считывает аналоговый вход заданное количество раз
// и возвращает медианное отфильтрованное значение
int readMedian (int pin, int samples){
// массив для хранения данных
int raw[samples];
// считываем вход и помещаем величину в ячейки массива
for (int i = 0; i < samples; i++){
raw[i] = analogRead(pin);
}
// сортируем массив по возрастанию значений в ячейках
int temp = 0; // временная переменная
for (int i = 0; i < samples; i++){
for (int j = 0; j < samples - 1; j++){
if (raw[j] > raw[j + 1]){
temp = raw[j];
raw[j] = raw[j + 1];
raw[j + 1] = temp;
}
}
}
// возвращаем значение средней ячейки массива
return raw[samples/2];
}
void setup(){
analogReference(DEFAULT );
Serial.begin(9600);
pinMode(DAT, OUTPUT);
}
void loop(){
if(readMedian(sensorPin, 10)>506){
digitalWrite(DAT, LOW);
Serial.println("konctvik");
}
else if(readMedian(sensorPin, 10)<504);
{
digitalWrite(DAT, LOW);
Serial.println("konctvik");
}
// выводим значение на аналоговом входе в монитор порта
Serial.print(analogRead(sensorPin));
Serial.print(" ");
// выводим среднеизмеренное значение
Serial.print(readMean(sensorPin, 10));
Serial.print(" ");
// выводим медианное отфильтрованное значение
Serial.println(readMedian(sensorPin, 10));
delay(30);
}
1. Наверное, не аналоговый выход, а аналоговый вход... Время одного измерения составляет 112 мкс при использовании Atmel328 с тактовой частотой 16 МГц.
2. Вы используете пузырькоподобную сортировку, только производите там в 2 с лишним раза больше действий, чем это необходимо. Посмотрите, как устроен классический "Пузырек". кстати, смотреть в сторону Хоара и др более быстрых сортировок не рекомендую, - их преимущества сказываются лишь при длине сортируемого массива где-то больше 20.
1. Наверное, не аналоговый выход, а аналоговый вход... Время одного измерения составляет 112 мкс при использовании Atmel328 с тактовой частотой 16 МГц.
Длительность зависить от делителя. Минимальная 13 мкс, но при этом точность страдает. Минимальное время при нормальной точности около 75 мкс. Это для Atмega328. Для вашей должно быть примерно так же.
А вообще, купите ADS1015. Cтот совсем недорого, а получите совсем другое качество. И ардуино мега не нужна будет
Решил работать с одним из каналов, что бы не усиливать погрешность. Сейчас пытаюсь подобрать фильтр, нашел код для медианного, резкие скачки удалось отфильтровались при выборке из 10, при уменьшении все равно небольшие помехи проскакивают, но теперь на мой взгляд сильно увеличилось время отклика так сказать. Кто подскажет с какой максимальной частотой можно опрашивать аналоговый выход и фильтровать его в дальнейшем. или может кто посоветует более быстрый фильтр?
Программные фильтры это хорошо, но аппаратные тоже не стоит забывать. Конденсатор 10-100 нФ с аналогового входа на землю, и измеряемый сигнал подавать через резистор 10-100 КОм. Если не поможет, то и программно можно дофильтровать. Ну и главное монтаж, все "земли" (минимальной длины и хорошего сечения) должны соединяться в одной точке, и никаких разъемов - только пайка. А внешние АЦП для лошадиного сигнала 5-100 мВ, это извращение.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
да и он отлично все компенсирует когда измеряешь специализированным прибором, я конечно предполагаю что методика диференциальных измерений и у ардуино и у того прибора одинаковая, но все же на ардуине за счет усилителя в предложенной программе 4 единицы дребезга превращаются в 40, плюс я думаю он показывает бо'льшую разницу из-за того что измерения все таки не одновременно происходят а с небольшим смещением, ну и мне показалось что нет смысла анализировать и фильтровать большие числа, если в плечах у меня всего на несколько единиц плавает.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
да и он отлично все компенсирует когда измеряешь специализированным прибором, я конечно предполагаю что методика диференциальных измерений и у ардуино и у того прибора одинаковая, но все же на ардуине за счет усилителя в предложенной программе 4 единицы дребезга превращаются в 40, плюс я думаю он показывает бо'льшую разницу из-за того что измерения все таки не одновременно происходят а с небольшим смещением, ну и мне показалось что нет смысла анализировать и фильтровать большие числа, если в плечах у меня всего на несколько единиц плавает.
Ясно. "Я не хочу вынимать ногу из капкана, я хочу чтобы не было так больно"
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
"А мужики-то и не знают". Так и пихают мостовой метод измерения не только в тензометрию, но и вообще куда попало.
"А мужики-то и не знают". Так и пихают мостовой метод измерения не только в тензометрию, но и вообще куда попало.
Пихать куда попало - это извращение.
Да и мосты разные бывают. Если изменяется только один элемент, то ,извините это - не мост, а два делителя напряжения. Мост это огда есть баланс, все остальное - внешне похожие "мостовые схемы".
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
Особенно интересно про "не подавит помеху" и " убрать постоянное смещение". Я согласен, что не сбалансированный мост не подавляет полностью синфазную помеху, но посчитать на сколько ослабляет легко. А постоянное смещение вообще ни как не влият на результат, пока смещение находится внутри рабочей зоны усилителя.
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и (1) дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. (2) И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
1) позвольте поинтересоваться, о какой помехе идет речь? два делителя собирают в мост для стабилизации дрейфа по температуре т.к. такой дрейф одного порядка с сигналом. Устраняют искажения в схеме, вносимые соединительными проводами (у них не нулевое сопротивление). Т.е. минимизируют множество факторов. Если идет речь о помехе по питанию - она в этих расчетах вообще не участвует.
2) Это часть целого и из этой части вообще не понятно, что вы хотели сказать. Т.е. полезной информации в этом тексте НЕТ, текст просто абстрактен и ничего не объясняет.
Особенно интересно про "не подавит помеху" и " убрать постоянное смещение". Я согласен, что не сбалансированный мост не подавляет полностью синфазную помеху, но посчитать на сколько ослабляет легко. А постоянное смещение вообще ни как не влият на результат, пока смещение находится внутри рабочей зоны усилителя.
Я говорю только о том, что применение диф усилителя не даст заметного выигрыша, пока по питанию будет помеха 0,7В при полезном сигнале 0,005-0,1В. При самом плохом раскладе на вход усилителя подается 2,5+0,35+0,1=2,95 В. Куда усиливать? Особенно если питание усилителя 5 В. Теоретически смещение и помеха должны уничтожиться. Но не каждый усилитель справится с импульсной помехой. Гораздо проще убрать её хорошим фильтром по питанию, а затем продолжать эксперименты.
1) позвольте поинтересоваться, о какой помехе идет речь? два делителя собирают в мост для стабилизации дрейфа по температуре т.к. такой дрейф одного порядка с сигналом. Устраняют искажения в схеме, вносимые соединительными проводами (у них не нулевое сопротивление). Т.е. минимизируют множество факторов. Если идет речь о помехе по питанию - она в этих расчетах вообще не участвует.
Именно о помехе по питанию. При питании от ноутбука, у ТС нормальные показания +/- 2-3 единицы младшего разряда. При питании от БП +/- 40. Я не отрицаю некоторые преимущества моста, но зачем ловить блох если можно устранить первопричину этого явления. И по температурному дрейфу, до он минимален если все элемены моста идентичны, если один из них (датчик) имеет другую конструкцию, а возможно и нелинеен, то про компенсацию дрейфа можно забыть.
Особенно интересно про "не подавит помеху" и " убрать постоянное смещение". Я согласен, что не сбалансированный мост не подавляет полностью синфазную помеху, но посчитать на сколько ослабляет легко. А постоянное смещение вообще ни как не влият на результат, пока смещение находится внутри рабочей зоны усилителя.
Я говорю только о том, что применение диф усилителя не даст заметного выигрыша, пока по питанию будет помеха 0,7В при полезном сигнале 0,005-0,1В. При самом плохом раскладе на вход усилителя подается 2,5+0,35+0,1=2,95 В. Куда усиливать? Особенно если питание усилителя 5 В. Теоретически смещение и помеха должны уничтожиться. Но не каждый усилитель справится с импульсной помехой. Гораздо проще убрать её хорошим фильтром по питанию, а затем продолжать эксперименты.
Вы не понимаете дифф режим операционного усилителя. Усиливается не смещение на входе, а разность.
Это при идеальном усилителе, а как тогда трактовать этот результат?
svorog пишет:
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Это при идеальном усилителе, а как тогда трактовать этот результат?
svorog пишет:
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
схемы нет, достаю хрустальный шар (Клапа, прости :) )..... опорное напряжение и питание моста от разных источников - удивительно, что вообще какой-то результат есть
Вот и я об этом. Что за датчик? Тензо резистор? Фоторезистор или фотодиод? Холл? от этого многое зависит. И что в схеме штатного прибора? Возможно там стоит термоэлектрический преобразователь, которому импульсные помехи по барабану. И плюс хороший стабилизатор для питания "моста". ТС вполне адекватный, я думаю разберется.
Это при идеальном усилителе, а как тогда трактовать этот результат?
svorog пишет:
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Это влияние блока питания на АЦП. Референсное напряжение тоже соединено с БП и любые флуктуации питающего напряжения приводят к броскам оцифровки. Мост такие колебания ослабляет на величину бисбаланса. При полном балансе на выходе моста вообще нуль при любых бросках питающего напряжения.
Это влияние блока питания на АЦП. Референсное напряжение тоже соединено с БП и любые флуктуации питающего напряжения приводят к броскам оцифровки. Мост такие колебания ослабляет на величину бисбаланса. При полном балансе на выходе моста вообще нуль при любых бросках питающего напряжения.
Это влияние блока питания на АЦП. Референсное напряжение тоже соединено с БП и любые флуктуации питающего напряжения приводят к броскам оцифровки. Мост такие колебания ослабляет на величину бисбаланса. При полном балансе на выходе моста вообще нуль при любых бросках питающего напряжения.
Вот и я об этом. Что за датчик? Тензо резистор? Фоторезистор или фотодиод? Холл? от этого многое зависит. И что в схеме штатного прибора? Возможно там стоит термоэлектрический преобразователь, которому импульсные помехи по барабану. И плюс хороший стабилизатор для питания "моста". ТС вполне адекватный, я думаю разберется.
Вот и я об этом. Что за датчик? Тензо резистор? Фоторезистор или фотодиод? Холл? от этого многое зависит. И что в схеме штатного прибора? Возможно там стоит термоэлектрический преобразователь, которому импульсные помехи по барабану. И плюс хороший стабилизатор для питания "моста". ТС вполне адекватный, я думаю разберется.
Ставлю на "продолжит темнить"
Я думаю, что ТС не темнит, а просто не придает значение "некоторым мелочам".
Тензо датчик или если быть точнее первичный преобразователь, с которым я мучаюсь, никакой платы не имеет, на сколько я понимаю там на мембрану нанесен слой кремния, из которого сначала травится, а потом балансируется мост: либо подрезкой, либо добавочным сопротивлением.
Плату и датчик я естественно всегда запитывал от одного источника питания, в основном датчик запитывал с самой ардуины, так как там потребление всего несколько мА. ардуину в свою очередь запитывал либо от ноутбука на макетной плате на столе либо от блока питания установки в которую хочу его прицепить в качестве датчика усилия. Но вообще с питанием испробовал разные комбинации, включая подключение опорного напряжения в корпусе dip8 на 4,096В, использовал его чисто в качестве опорного при простом analogread, использовал одновременно его и источником питания для датчика, но всегда при подключении блока питания картина получалась стабильно плохой. Я для себя сделал вывод, как тут уже написали, что эти помехи влияют именно на сам АЦП в ардуине выполняющий измерения и хоть какой бы чистый и стабильный сигнал он при этом не измерял он будет ошибаться, пока сам не будет питаться чистым напряжением.
Тензо датчик или если быть точнее первичный преобразователь, с которым я мучаюсь, никакой платы не имеет, на сколько я понимаю там на мембрану нанесен слой кремния, из которого сначала травится, а потом балансируется мост: либо подрезкой, либо добавочным сопротивлением.
Плату и датчик я естественно всегда запитывал от одного источника питания, в основном датчик запитывал с самой ардуины, так как там потребление всего несколько мА. ардуину в свою очередь запитывал либо от ноутбука на макетной плате на столе либо от блока питания установки в которую хочу его прицепить в качестве датчика усилия. Но вообще с питанием испробовал разные комбинации, включая подключение опорного напряжения в корпусе dip8 на 4,096В, использовал его чисто в качестве опорного при простом analogread, использовал одновременно его и источником питания для датчика, но всегда при подключении блока питания картина получалась стабильно плохой. Я для себя сделал вывод, как тут уже написали, что эти помехи влияют именно на сам АЦП в ардуине выполняющий измерения и хоть какой бы чистый и стабильный сигнал он при этом не измерял он будет ошибаться, пока сам не будет питаться чистым напряжением.
Может быть проблема в том, что датчик имеет связь с корпусом установки. В импульсных БП стоят фильтра по питанию (дроссель и пара конденсаторов), подключенные к защитному заземлению. Кроме того небольшой высоковольтный конденсатор в несколько сотен пФ с "-" низковольтной части на "-" высоковольтной. В этом случае импульсные токи протекающие по земляным проводам могут подпортить картину.
С корпусом конечно датчик связан, но навряд ли в этом дело, потому что когда на макетной плате проверяю там датчик просто кладу на стол, и усиленная помеха появляется именно после подключения кабеля от установки (от БП).
И снова здравствуйте! проблему к сожалению так и не решил. Заказал АЦП на али, но естественно доставка 3-4 недели и вот пока идет экспериментировал с промышленным модулем ввода аналоговых сигналов: точность хорошая, а вот скорость слабоватая, видимо пока модуль прочитает, потом передаст по RS 485 на реле, реле обработает и замкнет контакты.. в общем длинная цепочка получается, и самое главное нет постоянства в этой задержке. На днях в магазине в своем городе наткнулся на такой модуль HX711 https://wiki.iarduino.ru/page/hx_711_with_tenzo/ По идее то что мне надо, стоит 100р- купил. Там же по ссылке взял скетч на пробу, удалил что смог лишнее, (калибровка мне не нужна, единицы измерения меня не интересуют) тестирую на леонардо:
#include "HX711.h" // подключаем библиотеку для работы с тензодатчиком
#define DT A0 // Указываем номер вывода, к которому подключен вывод DT датчика
#define SCK A1 // Указываем номер вывода, к которому подключен вывод SCK датчика
HX711 scale; // создаём объект scale
float units; // задаём переменную для измерений в граммах
float ounces; // задаём переменную для измерений в унциях
void setup() {
Serial.begin(115200); // инициируем работу последовательного порта на скорости 115200 бод
scale.begin(DT, SCK); // инициируем работу с датчиком
scale.set_scale(); // выполняем измерение значения без калибровочного коэффициента
}
void loop() {
for (int i = 0; i < 2; i ++) { // усредняем показания, считав значения датчика 2 раз
units = + scale.get_units(), 2; // суммируем показания 2 замеров
}
ounces = units / 2; // усредняем показания, разделив сумму значений на 10
Serial.println(ounces); // выводим в монитор последовательного порта вес в граммах
}
Подключаю на канал А- А+, точность хорошая, 3-й знак стоит мертво 4-й немного плавает, ни и так далее,т.е нулевой сигнал в 12 мВ он увеличивает до 38000 попугаев.
но проблема в том что без видимых программных задержек и обещанных от 10 /80 измерений в секунду, я получаю только хорошо если 2 измерения в секунду, как настраивается частота измерений тоже не нашел. Может кто подсказать как можно добиться частоты измерений в 80Гц? если усреднение уберу то что нибудь выиграю или проблема в медленной плате обработки? коэффициент усиления играет роль? может перекинуть на канал В?
но проблема в том что без видимых программных задержек и обещанных от 10 /80 измерений в секунду, я получаю только хорошо если 2 измерения в секунду, как настраивается частота измерений тоже не нашел. Может кто подсказать как можно добиться частоты измерений в 80Гц? если усреднение уберу то что нибудь выиграю или проблема в медленной плате обработки? коэффициент усиления играет роль? может перекинуть на канал В?
Cкорость работы определяется только уровнем на ноге RATE, который, судя по фотке модуля, разведен на 0. Что означает 10 измерений в секунду. Канал и услиление на скорость никак не влияют.
Если нужно читать данные без калибровки, то используйте просто read(). Для получения усредненного результата есть метод read_average(byte times)
Кстати используемая вамиget_units() в итоге вызывает read_average()
Cкорость работы определяется только уровнем на ноге RATE, который, судя по фотке модуля, разведен на 0. Что означает 10 измерений в секунду.
Спасибо, нога RATE сейчас как и 13 и 1-я как я понимаю висит в воздухе? то есть я могу к ней перемычку от Vcc поставить и у меня должна частота опроса увеличиться до 80ГЦ? или ногу надо отпаять от подложки и на весу припаять перемычку?
Код немного изменил
#include <Q2HX711.h>
//Инициализируем библиотеку для считывания данных с входов A0 и A1
Q2HX711 hx711(A1, A0);
void setup() {
//Открываем последовательный порт на скорости 230400
Serial.begin(230400);
}
void loop() {
//Пишем в порт число, считанное с HX711
Serial.println(hx711.read());
}
И ещё попутный вопрос: у меня есть плата управления шаговыми двигателями которая должна останавливать двигатели при получении сигнала о превышении допустимого усилия на датчике, плата конечно не сильно загружена, но не хочется интегрировать код в неё, провода перекручивать, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
пост 5 перечитайте и ниже комменты к нему, к примеру пост 10.
А по сути, почитайте инет немного, инфы по теме этой микросхемы вагон с прицепом.
svorog пишет:
И ещё попутный вопрос: у меня есть плата управления шаговыми двигателями которая должна останавливать двигатели при получении сигнала о превышении допустимого усилия на датчике, плата конечно не сильно загружена, но не хочется интегрировать код в неё, провода перекручивать, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
вопрос необходимо рассматривать со стороны длительности получения информации с "весов" (сравнительно быстро), на это время управление ШД будет "подвисать". А если правильно написать код конфликтов не будет. Судя по описанию, вы крутите ШД после определенного веса и если разделить два этих "события" ничто не помешает друг-другу.
и я чего-то не понял в вопросе:
svorog пишет:
плата конечно не сильно загружена, но не хочется интегрировать код в неё, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
судя по вопросу ИМХО вы ничего не выиграете и не проиграете (ШД супер тормоз, плата весов небольшой тормоз - а процессор много быстрее - если алгоритм нормальный)... ну разве что отдельную плату освободите. Уж как понял вопрос...
ИМХО и алгоритм из поста 88 я бы поменял: собрать массив из 10+++ измерений, а потом их оптом отправить в serial. И вообще serial жутко вешает контроллер, он хорош на этапе дебага, но после от него нужно избавляться или оптимизировать его... не знаю, зачем вы так задрали скорость сериал (пост 90)... Просто обратите на это внимание...
пост 5 перечитайте и ниже комменты к нему, к примеру пост 10.
А по сути, почитайте инет немного, инфы по теме этой микросхемы вагон с прицепом.
Да, я примерно помнил что что то подобное предлагали, просто тогда не рассматривал этот вопрос потому что у нас тут все под заказ, а тратить время на доставку не хотелось, думал обойтись тем что есть под рукой, а тут вдруг встретил эту плату в магазине.
Инфы куча я видел, и конечно пару дней сидел знакомился. Проблема в том что везде плата используется для неспешных измерений, а мне надо как можно быстрее. Информации о том как все таки получить 80Гц так и не нашел, если на 15 ножке, которая отвечает за частоту измерений с завода висит логический ноль, то можно ли её перекусить и закоротить с 16 ногой на которой +5В ?
Гриша]</p>
<p>и я чего-то не понял в вопросе:</p>
<p>[quote=svorog пишет:
плата конечно не сильно загружена, но не хочется интегрировать код в неё, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
тут я имел ввиду: у меня двигатель управляется с основной платы и при получении сигнала с вспомогательной платы о превышении значения усилия должен остановиться, получится ли уменьшить задержку остановки двигателя если датчик будет обрабатываться внутри платы, а не ждать дискретного сигнала с другой платы?
не знаю, зачем вы так задрали скорость сериал (пост 90)... Просто обратите на это внимание...
Большой скоростью обмена думал получить более свежие данные о состоянии датчика. Или с такой медленной платой как HX711 это не имеет смысла?
в рабочем скетче вывода в сериал не будет только сравнение полученного значения на предмет выхода за установленные границы и выдача 2-ух дискретных сигналов при выходе за границы.
Большой скоростью обмена думал получить более свежие данные о состоянии датчика. Или с такой медленной платой как HX711 это не имеет смысла?
честно говоря, я больше по железу играюсь, вернее с россыпухой вожусь, а вот с кодами у меня не очень. Выше я предложил алгоритм: запускаем таймер, получаем результаты >=10 результатов измерений... выводим результаты и таймер - вот такой способ оценки времени получения данных более правильный.
по второй части вопроса про подачу на 15 ногу пока ничего не скажу, может найдется тот, кто курил даташит и юзал в таком режиме...
UPD:
" When using the on-chip oscillator, output data rate is typically 10 (RATE=0) or 80SPS (RATE=1). When using external clock or crystal, output data rate is directly proportional to the clock or crystal frequency. Using 11.0592MHz clock or crystal results in an accurate 10 (RTE=0) or 80SPS (RATE=1) output data rate. "
собственно ответ в даташите, но лучше даташит весь прочитать, встречался с таким, что при увеличении скорости, падает разрешение АЦП... переводите и читайте, даташит легко найти по вашей ссылке.
библиотеку не смотрел, есть подозрение, что она универсальная т.е. можно чего-то выкинуть для максимальной скорости опроса под поставленную задачу. - попробуйте найти готовое решение ну или опять таки кто-нибудь подскажет если дала под себя.
вот информация для затравки, прямиком из даташита:
Analog Inputs Channel A differential input is designed to interface directly with a bridge sensor’s differential output. It can be programmed with a gain of 128 or 64. The large gains are needed to accommodate the small output signal from the sensor. When 5V supply is used at the AVDD pin, these gains correspond to a full-scale differential input voltage of ±20mV or ±40mV respectively. Channel B differential input has a fixed gain of 32. The full-scale input voltage range is ±80mV, when 5V supply is used at the AVDD pin.
тут я имел ввиду: у меня двигатель управляется с основной платы и при получении сигнала с вспомогательной платы о превышении значения усилия должен остановиться, получится ли уменьшить задержку остановки двигателя если датчик будет обрабатываться внутри платы, а не ждать дискретного сигнала с другой платы?
1) моторчик работает без перерывов? или в режиме повернулся и жду команды?
2) "...получится ли уменьшить задержку остановки двигателя...?" Читая такой вопрос утверждаю на 99% что у вас не получится... а второй вариант изучив прерывания...
3) я может и пропустил чего, но "дьявол кроется в мелочах" Все начинается с грамотного алгоритма работы устройства... и всякие "регулярные" события имеющие определенную, постоянную "скорость" компенсируются "упреждением"...
Увеличить частоту получилось запитав 15 ногу от +5В предварительно отпаяв и отогнув её. Где то читал что стандартной библиотеке по умолчанию сначала идет опрос 32 показаний и вывод среднего, можно изменить на 1 измерение, но я использую библиотеку Q2HX711.h в ней не нашел ничего подобного. Думаю мне 80Гц будет достаточно.
Написал маленький тест на дифф режим леонардо с помощью приведённой выше библиотеки. Вывод в кодах АЦП. Подключил к мосту и посмотрел как работает внутренний дифф усилитель с АЦП. К сожалению питание грязное, но общая картина понятна. Отлично работает. Милливольты измеряет.
Спасибо, к сожалению поздно увидел сообщение и сегодня проверить не смогу. Если заработает это будет мое спасение!)
Опыты с использованием одного плеча в качестве опорного завершились не очень удачно. Так как напряжения в плечах практически равны, а на пине Меги для внешнего питания висит 32кОм резистор то он сильно просаживает напряжение, если верить тестеру то с 2,38В до 2.2 В. второе плечо получается выше этого диапазона, повесив на второе плечо диод 4007 ситуация не изменилась, хотя при замерах тестером показывал падение до 2, 18В при одном диоде и до 1,6В при 3-х последовательно повешенных диодах, думаю проблема в том что слишком слабый ток протекает в датчике, а при измерении тестером потребление увеличивается. Еще раз напомню что плохо помню электротехнику, и возможно делал глупые вещи, но решил дополнительно повесить светодиод. В итоге получилось добиться понижения напряжения до 930 единиц. Для моей задачи требуется считать отклонение от нулевого сигнала в несколько единиц и выдать аварийный сигнал. На пробной плате разбег показаний при питании от компьютера показал 3-4 единицы, в принципе не то чего хотелось добиться, но все же можно было работать, однако вновь при питании от блока питания размах увеличился до20 единиц. это конечно достижение по сравнению со 100 единицами при двух отдельных измерениях, но все равно ни куда ни годится.
На пробной плате разбег показаний при питании от компьютера показал 3-4 единицы, в принципе не то чего хотелось добиться, но все же можно было работать, однако вновь при питании от блока питания размах увеличился до20 единиц. это конечно достижение по сравнению со 100 единицами при двух отдельных измерениях, но все равно ни куда ни годится.
Это абсолютно ненормально, не выяснив причину этого явления можно получить такой-же вариант и дифференциальными входами.
Для чистоты эксперимента попробуйте следующие варианты:
1 Мост и Ардуино питать от одного БП
2 Мост от БП ардуино от ноутбука, но с питанием от аккумуляторов
Очень похоже на некачественный БП или неудачный монтаж (длинные провода, неудачно подключена земля)
Чудес не бывает, бывают плохие контакты или утечка (КЗ). Больше это ничем объяснить нельзя. А насчет падения напряжения при подключении входа опорного напряжения-это вопрос не принципиальный. Если второе плечо моста не меняет свои параметры, то его можно заменить качественным переменным резистором подключенным к точкам питания моста. И выставить необходимое опорное напряжение. Тогда вносить дополнительные элементы в измерительную цепь (и ухудшать её параметры) не придется. В этом случае можно обеспечить независимость измерений от изменения напряжения питания и максимальную чувствительность (если в мосте нет нелинейных элементов)
Это абсолютно ненормально, не выяснив причину этого явления можно получить такой-же вариант и дифференциальными входами.
Ну когда я промышленный измерительный модуль подключаю показания стоят в пределах 0,5мВ при том же питании от БП. На сколько мне представляется вся нестабильность питания моста которая прямопропорционально меняет выходной сигнал одинаково воздействует на оба плеча и поэтому диф. метод будет максимально независимым от питания.
"" ...Для чистоты эксперимента попробуйте следующие варианты:
1 Мост и Ардуино питать от одного БП - Так и делал, единственное считываю показания через USB, соответственно там плата тоже запитывается, не знаю какой канал в приоритете.
2 Мост от БП ардуино от ноутбука, но с питанием от аккумуляторов -- Так тоже пробовал, Подключение кабеля с внешним питанием увеличивает разброс показаний до +-10 единиц.
"... Очень похоже на некачественный БП .." да блок не думаю что сильно качественный, но так как специализированный модуль даже с ним может считать показание, думаю что его все таки можно использовать, с использованием аналогичного способа измерения на ардуине.
" ...или неудачный монтаж (длинные провода, неудачно подключена земля) провод от датчика до макетки 10 см на установке более метра, но даже на мекетке подключение БП сильно искажает сигнал. Что касается земли, то сама установка, в том числе БП заземлены, не знаю правда куда эта земля уходит, возможно в соседнее помещение, где на неё повесили какой нибудь компрессор...
Чудес не бывает, бывают плохие контакты или утечка (КЗ). Контакты вот такие припаянные к концам провода от датчика
, в ардуине сидят хорошо только когда линейкой подключаются, а по одному как у меня очень поршивенький контакт, особенно на заезженной плате, но не знаю как сделать лучше.
"... Если второе плечо моста не меняет свои параметры, то его можно заменить качественным переменным резистором подключенным к точкам питания моста..." Замеры тестером показали изменение напряжения на обоих плечах, соответственно заменяя одно плечо переменным резистором мы скорее всего сильно уменьшаем чувствительность прибора.
Немножко погуглить и библиотека для дифференциального режима леонардо и меги https://www.davidpilling.com/wiki/index.php/DiffADC Можно мегу к мосту подключать и иметь хорошую точность при использовании внутреннего операционного усилителя. Для меги усиление 1, 10 , 200. Для леонардо 1, 10 , 40 , 200.
Кто может подсказать , по приведенной ссылке скачал библиотеку для дифференциальных измерений, но IDE 1.8.1 и 1.8.9 говорят что в данном архиве не существует корректных библиотек, в что может быть проблема? может можно где то ещё более актуальные библиотеки найти?
https://www.davidpilling.com/wiki/files/DiffADC/DifferentialADC.zip
Это не библиотека в ардуиновском понимании. Для работы достаточно положить файл DifferentialADC.c из архива в папку с программой. Файл Leo_ADC_diff.ino это пример. Несколько строчек из него я взял для тестовой программы. Библиотек для дифф режима АЦП я не встречал. Как я уже говорил, достаточно поменять 1 строку в стандартной analogRead. Как по мне писать для этого целую библиотеку - перебор.
https://www.davidpilling.com/wiki/files/DiffADC/DifferentialADC.zip
Это не библиотека в ардуиновском понимании. Для работы достаточно положить файл DifferentialADC.c из архива в папку с программой.
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Ну насчет того, что что то коротит, это маловероятно. В таких конструкциях нужно очень грамотно подходить к разводке "земли". Ну и фильтра по питанию, вплоть до LC. Ну и однократные измерения рднозначного результата не дают, хотя-бы сотню и усреднить. Я достаточно упорно пытался сделать приличный мультиметр. При автономном питании без проблем измеряет напряжения от 1 милливольта. При питании от USB или сетевого БП стабильны только десятые, сотые уже скачут. Та-же картина с сопротивлениями от аккумулятора от 0,5 Ома до 50 МОм, а от USB 10 Ом - 2 МОм. Правда у меня проблема усугубляется тем что коммутация всех делителей производится ключами самой 328, а они все-таки нелинейны и обладают сопротивлением около 20 Ом. Если применять механические переключатели то параметры на порядок лучше.
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Просто примите как данность, что когда требуются вменяемые аналоговые измерения, о "первых попавшихся" блоках питания следует сразу забыть. БП следует тщательно подбирать и, скорее всего, он окажется самым дорогим элементом конструкции.
Замеры стабильности блока питания показали милисекундные забросы до +-0,7В с завидной постоянностью, при использовании понижающего трансформатора, сигнал очистился до +-0,1В, разброс показаний датчика на обоих каналах составил 3 единицы, с дифференциальным методом и с усилением единиц 40. Пока возился заметил что появляются редкие выбросы раз в 10 секунд на 100 или даже 200 единиц.
Решил работать с одним из каналов, что бы не усиливать погрешность. Сейчас пытаюсь подобрать фильтр, нашел код для медианного, резкие скачки удалось отфильтровались при выборке из 10, при уменьшении все равно небольшие помехи проскакивают, но теперь на мой взгляд сильно увеличилось время отклика так сказать. Кто подскажет с какой максимальной частотой можно опрашивать аналоговый выход и фильтровать его в дальнейшем. или может кто посоветует более быстрый фильтр?
1. Наверное, не аналоговый выход, а аналоговый вход... Время одного измерения составляет 112 мкс при использовании Atmel328 с тактовой частотой 16 МГц.
2. Вы используете пузырькоподобную сортировку, только производите там в 2 с лишним раза больше действий, чем это необходимо. Посмотрите, как устроен классический "Пузырек". кстати, смотреть в сторону Хоара и др более быстрых сортировок не рекомендую, - их преимущества сказываются лишь при длине сортируемого массива где-то больше 20.
1. Наверное, не аналоговый выход, а аналоговый вход... Время одного измерения составляет 112 мкс при использовании Atmel328 с тактовой частотой 16 МГц.
Длительность зависить от делителя. Минимальная 13 мкс, но при этом точность страдает. Минимальное время при нормальной точности около 75 мкс. Это для Atмega328. Для вашей должно быть примерно так же.
А вообще, купите ADS1015. Cтот совсем недорого, а получите совсем другое качество. И ардуино мега не нужна будет
Решил работать с одним из каналов, что бы не усиливать погрешность. Сейчас пытаюсь подобрать фильтр, нашел код для медианного, резкие скачки удалось отфильтровались при выборке из 10, при уменьшении все равно небольшие помехи проскакивают, но теперь на мой взгляд сильно увеличилось время отклика так сказать. Кто подскажет с какой максимальной частотой можно опрашивать аналоговый выход и фильтровать его в дальнейшем. или может кто посоветует более быстрый фильтр?
Программные фильтры это хорошо, но аппаратные тоже не стоит забывать. Конденсатор 10-100 нФ с аналогового входа на землю, и измеряемый сигнал подавать через резистор 10-100 КОм. Если не поможет, то и программно можно дофильтровать. Ну и главное монтаж, все "земли" (минимальной длины и хорошего сечения) должны соединяться в одной точке, и никаких разъемов - только пайка. А внешние АЦП для лошадиного сигнала 5-100 мВ, это извращение.
Решил работать с одним из каналов, что бы не усиливать погрешность. *
1. "измерительная диагональ BD т.е. между этими проводами мне и требуется измерить напряжение"
2. "Вам нужен дифференциальный усилитель с однополюсным выходом. " (#1, Вс, 03/11/2019 - 10:52)
3. "возможно как то одной платой обойтись"
=============================================
Недавно в какой-то ветке цитировал. Но напрашивается повтор:
- У вас капкан на правой ноге, поэтому болит и невозможно ходить.
- При чем тут капкан. Я и до вас знала, что у меня капкан. Я не о нем пришла говорить. Вы меня не понимаете, у меня что-то болит и неудобно ходить.
----------------------------------------------------
- Здравствуйте! У меня нога в капкане. Мне больно и невозможно ходить. Сделайте так, чтобы не было так больно.
- Нужно вынуть ногу из капкана.
- Нет, вы меня не понимаете. Я не хочу вынимать ногу из капкана, я хочу чтобы не было так больно, больше ничего.
=======================
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
да и он отлично все компенсирует когда измеряешь специализированным прибором, я конечно предполагаю что методика диференциальных измерений и у ардуино и у того прибора одинаковая, но все же на ардуине за счет усилителя в предложенной программе 4 единицы дребезга превращаются в 40, плюс я думаю он показывает бо'льшую разницу из-за того что измерения все таки не одновременно происходят а с небольшим смещением, ну и мне показалось что нет смысла анализировать и фильтровать большие числа, если в плечах у меня всего на несколько единиц плавает.
А вообще, купите ADS1015.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
да и он отлично все компенсирует когда измеряешь специализированным прибором, я конечно предполагаю что методика диференциальных измерений и у ардуино и у того прибора одинаковая, но все же на ардуине за счет усилителя в предложенной программе 4 единицы дребезга превращаются в 40, плюс я думаю он показывает бо'льшую разницу из-за того что измерения все таки не одновременно происходят а с небольшим смещением, ну и мне показалось что нет смысла анализировать и фильтровать большие числа, если в плечах у меня всего на несколько единиц плавает.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
* Смысл моста Уитстона - именно "не увеличивать погрешность". Точнее, компенсировать влияние помех и отклонений параметров схемы от расчетных.
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
"А мужики-то и не знают". Так и пихают мостовой метод измерения не только в тензометрию, но и вообще куда попало.
Пихать куда попало - это извращение.
Да и мосты разные бывают. Если изменяется только один элемент, то ,извините это - не мост, а два делителя напряжения. Мост это огда есть баланс, все остальное - внешне похожие "мостовые схемы".
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
Особенно интересно про "не подавит помеху" и " убрать постоянное смещение". Я согласен, что не сбалансированный мост не подавляет полностью синфазную помеху, но посчитать на сколько ослабляет легко. А постоянное смещение вообще ни как не влият на результат, пока смещение находится внутри рабочей зоны усилителя.
Все преимущества моста проявляются когда он сбалансирован. В остальных случаях - это два делителя напряжения и (1) дифференциальный усилитель не подавит помеху, т.к при разбалансе помеха перестает взаимо уничтожаться и применение диф усилителя просто усилит это. В данном случае необходимо убрать постоянное смещение 2,5 В. Это возможно если измеряемое значение изменяется достаточно быстро, для выделения этих изменений можно применить интегрирующие и дифференцирующие цепочки. (2) И если по питанию 5В есть импульсная помеха 0,7 В то на выходе каждого плеча будет 0,35 В, при полезном сигнале 0,005-0,1 В. В любом случае она превышает полезный сигнал. И если ее убрать, то проблем не будет и с АЦП 328 и внешним опорным около 2,5 В.
1) позвольте поинтересоваться, о какой помехе идет речь? два делителя собирают в мост для стабилизации дрейфа по температуре т.к. такой дрейф одного порядка с сигналом. Устраняют искажения в схеме, вносимые соединительными проводами (у них не нулевое сопротивление). Т.е. минимизируют множество факторов. Если идет речь о помехе по питанию - она в этих расчетах вообще не участвует.
2) Это часть целого и из этой части вообще не понятно, что вы хотели сказать. Т.е. полезной информации в этом тексте НЕТ, текст просто абстрактен и ничего не объясняет.
Особенно интересно про "не подавит помеху" и " убрать постоянное смещение". Я согласен, что не сбалансированный мост не подавляет полностью синфазную помеху, но посчитать на сколько ослабляет легко. А постоянное смещение вообще ни как не влият на результат, пока смещение находится внутри рабочей зоны усилителя.
Я говорю только о том, что применение диф усилителя не даст заметного выигрыша, пока по питанию будет помеха 0,7В при полезном сигнале 0,005-0,1В. При самом плохом раскладе на вход усилителя подается 2,5+0,35+0,1=2,95 В. Куда усиливать? Особенно если питание усилителя 5 В. Теоретически смещение и помеха должны уничтожиться. Но не каждый усилитель справится с импульсной помехой. Гораздо проще убрать её хорошим фильтром по питанию, а затем продолжать эксперименты.
1) позвольте поинтересоваться, о какой помехе идет речь? два делителя собирают в мост для стабилизации дрейфа по температуре т.к. такой дрейф одного порядка с сигналом. Устраняют искажения в схеме, вносимые соединительными проводами (у них не нулевое сопротивление). Т.е. минимизируют множество факторов. Если идет речь о помехе по питанию - она в этих расчетах вообще не участвует.
Именно о помехе по питанию. При питании от ноутбука, у ТС нормальные показания +/- 2-3 единицы младшего разряда. При питании от БП +/- 40. Я не отрицаю некоторые преимущества моста, но зачем ловить блох если можно устранить первопричину этого явления. И по температурному дрейфу, до он минимален если все элемены моста идентичны, если один из них (датчик) имеет другую конструкцию, а возможно и нелинеен, то про компенсацию дрейфа можно забыть.
Особенно интересно про "не подавит помеху" и " убрать постоянное смещение". Я согласен, что не сбалансированный мост не подавляет полностью синфазную помеху, но посчитать на сколько ослабляет легко. А постоянное смещение вообще ни как не влият на результат, пока смещение находится внутри рабочей зоны усилителя.
Я говорю только о том, что применение диф усилителя не даст заметного выигрыша, пока по питанию будет помеха 0,7В при полезном сигнале 0,005-0,1В. При самом плохом раскладе на вход усилителя подается 2,5+0,35+0,1=2,95 В. Куда усиливать? Особенно если питание усилителя 5 В. Теоретически смещение и помеха должны уничтожиться. Но не каждый усилитель справится с импульсной помехой. Гораздо проще убрать её хорошим фильтром по питанию, а затем продолжать эксперименты.
Вы не понимаете дифф режим операционного усилителя. Усиливается не смещение на входе, а разность.
Это при идеальном усилителе, а как тогда трактовать этот результат?
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Это при идеальном усилителе, а как тогда трактовать этот результат?
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
схемы нет, достаю хрустальный шар (Клапа, прости :) )..... опорное напряжение и питание моста от разных источников - удивительно, что вообще какой-то результат есть
Вот и я об этом. Что за датчик? Тензо резистор? Фоторезистор или фотодиод? Холл? от этого многое зависит. И что в схеме штатного прибора? Возможно там стоит термоэлектрический преобразователь, которому импульсные помехи по барабану. И плюс хороший стабилизатор для питания "моста". ТС вполне адекватный, я думаю разберется.
Это при идеальном усилителе, а как тогда трактовать этот результат?
Спасибо, программа заработала, при питании от аккумулятора показывала идеальный результат, но мой ужасный блок питания опять все испортил, забросы до 30 единиц и т.д... Надо будет все таки проблему в схеме искать, наверное где то что то коротит.
Это влияние блока питания на АЦП. Референсное напряжение тоже соединено с БП и любые флуктуации питающего напряжения приводят к броскам оцифровки. Мост такие колебания ослабляет на величину бисбаланса. При полном балансе на выходе моста вообще нуль при любых бросках питающего напряжения.
Это влияние блока питания на АЦП. Референсное напряжение тоже соединено с БП и любые флуктуации питающего напряжения приводят к броскам оцифровки. Мост такие колебания ослабляет на величину бисбаланса. При полном балансе на выходе моста вообще нуль при любых бросках питающего напряжения.
Ну, а вывод?
Это влияние блока питания на АЦП. Референсное напряжение тоже соединено с БП и любые флуктуации питающего напряжения приводят к броскам оцифровки. Мост такие колебания ослабляет на величину бисбаланса. При полном балансе на выходе моста вообще нуль при любых бросках питающего напряжения.
Ну, а вывод?
Вот и я об этом. Что за датчик? Тензо резистор? Фоторезистор или фотодиод? Холл? от этого многое зависит. И что в схеме штатного прибора? Возможно там стоит термоэлектрический преобразователь, которому импульсные помехи по барабану. И плюс хороший стабилизатор для питания "моста". ТС вполне адекватный, я думаю разберется.
Трудно возразить.
Вот и я об этом. Что за датчик? Тензо резистор? Фоторезистор или фотодиод? Холл? от этого многое зависит. И что в схеме штатного прибора? Возможно там стоит термоэлектрический преобразователь, которому импульсные помехи по барабану. И плюс хороший стабилизатор для питания "моста". ТС вполне адекватный, я думаю разберется.
Я думаю, что ТС не темнит, а просто не придает значение "некоторым мелочам".
Тензо датчик или если быть точнее первичный преобразователь, с которым я мучаюсь, никакой платы не имеет, на сколько я понимаю там на мембрану нанесен слой кремния, из которого сначала травится, а потом балансируется мост: либо подрезкой, либо добавочным сопротивлением.
Плату и датчик я естественно всегда запитывал от одного источника питания, в основном датчик запитывал с самой ардуины, так как там потребление всего несколько мА. ардуину в свою очередь запитывал либо от ноутбука на макетной плате на столе либо от блока питания установки в которую хочу его прицепить в качестве датчика усилия. Но вообще с питанием испробовал разные комбинации, включая подключение опорного напряжения в корпусе dip8 на 4,096В, использовал его чисто в качестве опорного при простом analogread, использовал одновременно его и источником питания для датчика, но всегда при подключении блока питания картина получалась стабильно плохой. Я для себя сделал вывод, как тут уже написали, что эти помехи влияют именно на сам АЦП в ардуине выполняющий измерения и хоть какой бы чистый и стабильный сигнал он при этом не измерял он будет ошибаться, пока сам не будет питаться чистым напряжением.
Тензо датчик или если быть точнее первичный преобразователь, с которым я мучаюсь, никакой платы не имеет, на сколько я понимаю там на мембрану нанесен слой кремния, из которого сначала травится, а потом балансируется мост: либо подрезкой, либо добавочным сопротивлением.
Плату и датчик я естественно всегда запитывал от одного источника питания, в основном датчик запитывал с самой ардуины, так как там потребление всего несколько мА. ардуину в свою очередь запитывал либо от ноутбука на макетной плате на столе либо от блока питания установки в которую хочу его прицепить в качестве датчика усилия. Но вообще с питанием испробовал разные комбинации, включая подключение опорного напряжения в корпусе dip8 на 4,096В, использовал его чисто в качестве опорного при простом analogread, использовал одновременно его и источником питания для датчика, но всегда при подключении блока питания картина получалась стабильно плохой. Я для себя сделал вывод, как тут уже написали, что эти помехи влияют именно на сам АЦП в ардуине выполняющий измерения и хоть какой бы чистый и стабильный сигнал он при этом не измерял он будет ошибаться, пока сам не будет питаться чистым напряжением.
Может быть проблема в том, что датчик имеет связь с корпусом установки. В импульсных БП стоят фильтра по питанию (дроссель и пара конденсаторов), подключенные к защитному заземлению. Кроме того небольшой высоковольтный конденсатор в несколько сотен пФ с "-" низковольтной части на "-" высоковольтной. В этом случае импульсные токи протекающие по земляным проводам могут подпортить картину.
С корпусом конечно датчик связан, но навряд ли в этом дело, потому что когда на макетной плате проверяю там датчик просто кладу на стол, и усиленная помеха появляется именно после подключения кабеля от установки (от БП).
И снова здравствуйте! проблему к сожалению так и не решил. Заказал АЦП на али, но естественно доставка 3-4 недели и вот пока идет экспериментировал с промышленным модулем ввода аналоговых сигналов: точность хорошая, а вот скорость слабоватая, видимо пока модуль прочитает, потом передаст по RS 485 на реле, реле обработает и замкнет контакты.. в общем длинная цепочка получается, и самое главное нет постоянства в этой задержке. На днях в магазине в своем городе наткнулся на такой модуль HX711 https://wiki.iarduino.ru/page/hx_711_with_tenzo/ По идее то что мне надо, стоит 100р- купил. Там же по ссылке взял скетч на пробу, удалил что смог лишнее, (калибровка мне не нужна, единицы измерения меня не интересуют) тестирую на леонардо:
Подключаю на канал А- А+, точность хорошая, 3-й знак стоит мертво 4-й немного плавает, ни и так далее,т.е нулевой сигнал в 12 мВ он увеличивает до 38000 попугаев.
но проблема в том что без видимых программных задержек и обещанных от 10 /80 измерений в секунду, я получаю только хорошо если 2 измерения в секунду, как настраивается частота измерений тоже не нашел. Может кто подсказать как можно добиться частоты измерений в 80Гц? если усреднение уберу то что нибудь выиграю или проблема в медленной плате обработки? коэффициент усиления играет роль? может перекинуть на канал В?
но проблема в том что без видимых программных задержек и обещанных от 10 /80 измерений в секунду, я получаю только хорошо если 2 измерения в секунду, как настраивается частота измерений тоже не нашел. Может кто подсказать как можно добиться частоты измерений в 80Гц? если усреднение уберу то что нибудь выиграю или проблема в медленной плате обработки? коэффициент усиления играет роль? может перекинуть на канал В?
Cкорость работы определяется только уровнем на ноге RATE, который, судя по фотке модуля, разведен на 0. Что означает 10 измерений в секунду. Канал и услиление на скорость никак не влияют.
Если нужно читать данные без калибровки, то используйте просто read(). Для получения усредненного результата есть метод read_average(byte times)
Cкорость работы определяется только уровнем на ноге RATE, который, судя по фотке модуля, разведен на 0. Что означает 10 измерений в секунду.
Спасибо, нога RATE сейчас как и 13 и 1-я как я понимаю висит в воздухе? то есть я могу к ней перемычку от Vcc поставить и у меня должна частота опроса увеличиться до 80ГЦ? или ногу надо отпаять от подложки и на весу припаять перемычку?
Код немного изменил
теперь 10 Гц все таки получается.
И ещё попутный вопрос: у меня есть плата управления шаговыми двигателями которая должна останавливать двигатели при получении сигнала о превышении допустимого усилия на датчике, плата конечно не сильно загружена, но не хочется интегрировать код в неё, провода перекручивать, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
На днях в магазине в своем городе наткнулся на такой модуль HX711 https://wiki.iarduino.ru/page/hx_711_with_tenzo/ По идее то что мне надо, стоит 100р- купил.
пост 5 перечитайте и ниже комменты к нему, к примеру пост 10.
А по сути, почитайте инет немного, инфы по теме этой микросхемы вагон с прицепом.
И ещё попутный вопрос: у меня есть плата управления шаговыми двигателями которая должна останавливать двигатели при получении сигнала о превышении допустимого усилия на датчике, плата конечно не сильно загружена, но не хочется интегрировать код в неё, провода перекручивать, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
вопрос необходимо рассматривать со стороны длительности получения информации с "весов" (сравнительно быстро), на это время управление ШД будет "подвисать". А если правильно написать код конфликтов не будет. Судя по описанию, вы крутите ШД после определенного веса и если разделить два этих "события" ничто не помешает друг-другу.
и я чего-то не понял в вопросе:
плата конечно не сильно загружена, но не хочется интегрировать код в неё, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
судя по вопросу ИМХО вы ничего не выиграете и не проиграете (ШД супер тормоз, плата весов небольшой тормоз - а процессор много быстрее - если алгоритм нормальный)... ну разве что отдельную плату освободите. Уж как понял вопрос...
ИМХО и алгоритм из поста 88 я бы поменял: собрать массив из 10+++ измерений, а потом их оптом отправить в serial. И вообще serial жутко вешает контроллер, он хорош на этапе дебага, но после от него нужно избавляться или оптимизировать его... не знаю, зачем вы так задрали скорость сериал (пост 90)... Просто обратите на это внимание...
пост 5 перечитайте и ниже комменты к нему, к примеру пост 10.
А по сути, почитайте инет немного, инфы по теме этой микросхемы вагон с прицепом.
Да, я примерно помнил что что то подобное предлагали, просто тогда не рассматривал этот вопрос потому что у нас тут все под заказ, а тратить время на доставку не хотелось, думал обойтись тем что есть под рукой, а тут вдруг встретил эту плату в магазине.
Инфы куча я видел, и конечно пару дней сидел знакомился. Проблема в том что везде плата используется для неспешных измерений, а мне надо как можно быстрее. Информации о том как все таки получить 80Гц так и не нашел, если на 15 ножке, которая отвечает за частоту измерений с завода висит логический ноль, то можно ли её перекусить и закоротить с 16 ногой на которой +5В ?
плата конечно не сильно загружена, но не хочется интегрировать код в неё, много ли я выиграю по времени если загружу код на главную, рабочую плату по сравнению с тем что оставлю код обработки датчика на отдельной плате и буду выдавать дискретные сигналы при сильном нажатии на датчик на главную плату ?
тут я имел ввиду: у меня двигатель управляется с основной платы и при получении сигнала с вспомогательной платы о превышении значения усилия должен остановиться, получится ли уменьшить задержку остановки двигателя если датчик будет обрабатываться внутри платы, а не ждать дискретного сигнала с другой платы?
не знаю, зачем вы так задрали скорость сериал (пост 90)... Просто обратите на это внимание...
Большой скоростью обмена думал получить более свежие данные о состоянии датчика. Или с такой медленной платой как HX711 это не имеет смысла?
в рабочем скетче вывода в сериал не будет только сравнение полученного значения на предмет выхода за установленные границы и выдача 2-ух дискретных сигналов при выходе за границы.
UPD
Большой скоростью обмена думал получить более свежие данные о состоянии датчика. Или с такой медленной платой как HX711 это не имеет смысла?
честно говоря, я больше по железу играюсь, вернее с россыпухой вожусь, а вот с кодами у меня не очень. Выше я предложил алгоритм: запускаем таймер, получаем результаты >=10 результатов измерений... выводим результаты и таймер - вот такой способ оценки времени получения данных более правильный.
по второй части вопроса про подачу на 15 ногу пока ничего не скажу, может найдется тот, кто курил даташит и юзал в таком режиме...
UPD:
" When using the on-chip oscillator, output data rate is typically 10 (RATE=0) or 80SPS (RATE=1). When using external clock or crystal, output data rate is directly proportional to the clock or crystal frequency. Using 11.0592MHz clock or crystal results in an accurate 10 (RTE=0) or 80SPS (RATE=1) output data rate. "
собственно ответ в даташите, но лучше даташит весь прочитать, встречался с таким, что при увеличении скорости, падает разрешение АЦП... переводите и читайте, даташит легко найти по вашей ссылке.
библиотеку не смотрел, есть подозрение, что она универсальная т.е. можно чего-то выкинуть для максимальной скорости опроса под поставленную задачу. - попробуйте найти готовое решение ну или опять таки кто-нибудь подскажет если дала под себя.
вот информация для затравки, прямиком из даташита:
Analog Inputs Channel A differential input is designed to interface directly with a bridge sensor’s differential output. It can be programmed with a gain of 128 or 64. The large gains are needed to accommodate the small output signal from the sensor. When 5V supply is used at the AVDD pin, these gains correspond to a full-scale differential input voltage of ±20mV or ±40mV respectively. Channel B differential input has a fixed gain of 32. The full-scale input voltage range is ±80mV, when 5V supply is used at the AVDD pin.
тут я имел ввиду: у меня двигатель управляется с основной платы и при получении сигнала с вспомогательной платы о превышении значения усилия должен остановиться, получится ли уменьшить задержку остановки двигателя если датчик будет обрабатываться внутри платы, а не ждать дискретного сигнала с другой платы?
1) моторчик работает без перерывов? или в режиме повернулся и жду команды?
2) "...получится ли уменьшить задержку остановки двигателя...?" Читая такой вопрос утверждаю на 99% что у вас не получится... а второй вариант изучив прерывания...
3) я может и пропустил чего, но "дьявол кроется в мелочах" Все начинается с грамотного алгоритма работы устройства... и всякие "регулярные" события имеющие определенную, постоянную "скорость" компенсируются "упреждением"...
Увеличить частоту получилось запитав 15 ногу от +5В предварительно отпаяв и отогнув её. Где то читал что стандартной библиотеке по умолчанию сначала идет опрос 32 показаний и вывод среднего, можно изменить на 1 измерение, но я использую библиотеку Q2HX711.h в ней не нашел ничего подобного. Думаю мне 80Гц будет достаточно.