roboforum.ru

Технический форум по робототехнике.

Датчик касания механический, тензометрический.

Re: Датчик касания механический, тензометрический.

setar » 22 сен 2020, 06:59

Myp писал(а):получил деталюхи...

я самое главное пропустил, ты сейчас с каким железом эксперименты делашь ?
hx711 ++ ?

Re: Датчик касания механический, тензометрический.

Dmitry__ » 22 сен 2020, 15:14

Myp писал(а):Где отладчик? я требую отладчик чтобы такты на бумажке посчитать.

Для этого отладчик не нужен. Отладчик вообще никогда не нужен...
Тебе просто перед вызовом проверяемой функции надо прочитать аппаратный таймер, а после выполнения функции еще раз прочитать таймер и сравнить со старым значением. В ардуино это - micros()
Возвращает количество микросекунд, прошедших с момента начала выполнения программы Arduino. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 70 минут. На платах Arduino с тактовой частотой 16 МГц (Duemilanove и Nano) разрешение этой функции составляет четыре микросекунды (т.е. возвращаемое значение будет всегда кратно четырем).


Добавлено спустя 2 минуты 51 секунду:
http://mypractic-forum.ru/viewtopic.php?t=17

Re: Датчик касания механический, тензометрический.

Myp » 22 сен 2020, 17:29

setar писал(а):
Myp писал(а):получил деталюхи...

я самое главное пропустил, ты сейчас с каким железом эксперименты делашь ?
hx711 ++ ?

да, с перепаянной ногой для режима 80 герц, а тензодатчик в данный момент от китайских наркокарманных весов.
В плане проверить ещё тензодатчик от безмена на 50 кг, из любопытства.

Добавлено спустя 11 минут 15 секунд:
Dmitry__ писал(а):Тебе просто перед вызовом проверяемой функции надо прочитать аппаратный таймер, а после выполнения функции еще раз прочитать таймер и сравнить со старым значением. В ардуино это - micros()

быстрая процедура с интами и медленная с флотами и делением.
Код: Выделить всёРазвернуть
int HX711_ADC::getDataInt() // быстрая
{
   int data = 0;
   lastSmoothedData = smoothedData();
   data = (lastSmoothedData >> divBit) - tareOffset ;
   return data;
}
float HX711_ADC::getData() // родная медленная
{
   long data = 0;
   lastSmoothedData = smoothedData();
   data = (lastSmoothedData >> divBit) - tareOffset ;
   float x = (float)data / calFactor;
   return x;
}

с флотами и делением 50 микросекунд, без флотов и без деления 10 микросекунд.
Но эта быстрая процедура выплёвывает без нагрузки сырые данные плавающие от -30000 до +30000, а под нагрузкой цифра улетает за 4000000
деление на калибровочный фактор сильно уменьшает показания и убирает лишние флуктуации.

плюс в самой процедуре чтения данных с АЦП используется конечно же digitalWrite и digitalRead
в даташите написано что для передачи импульсов в микруху длина 1 и 0 может быть минимум 0.2микросекунды итого 0.4 микросекунды на 1 импульс.
а ардуина делает 1 импульс за 13 микросекунд (не уверен, так в гугле написано)

с учётом того что их надо сделать 27 штук подряд, By applying 25~27 positive clock pulses at the PD_SCK pin, data is shifted out from the DOUT output pin.
можно ощутимо быстрее провести считывание и ещё сократить время срабатывания датчика.


и ещё нюансик =)
кварц.PNG
кварц.PNG (7.36 КиБ) Просмотров: 1959

A crystal can be directly connected across XI and XO pins.
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.
можно разогнать микросхемку до 144 герц теоретически, выплёвывание данных привязано к частоте кварца и с внешним кварцем данные будут быстрее вылазить.

Re: Датчик касания механический, тензометрический.

Dmitry__ » 22 сен 2020, 18:14

Myp писал(а):с флотами и делением 50 микросекунд, без флотов и без деления 10 микросекунд.

Выкини вообще флоат. Нах он там вообще нужен? Микросхема выдает фиксированные 24 бита :)
И зачем тебе что-то делить? Чтоб подвести данные к весу в граммах? Создай константу порога и сравнивай с ней.
Напиши свою функцию, которая возвращает long: long HX711::read() {}. И дальше работай только с long. Во всей проге поиском найди все float, убей их, отладь прогу и офигеешь как все будет быстро :)
Myp писал(а): а под нагрузкой цифра улетает за 4000000
деление на калибровочный фактор сильно уменьшает показания и убирает лишние флуктуации.

Long и никаких делений, пороговая константа тоже long.
Для дебаженья можешь в ком-порт кидать данные long деленные на заветную константу, переводящую в граммы. Только не забудь отключить всю дебажную информацию в конечном коде...

Добавлено спустя 4 минуты 30 секунд:
Myp писал(а):плюс в самой процедуре чтения данных с АЦП используется конечно же digitalWrite и digitalRead

Пиши свою функцию чтения! HX711 простая как валенок. Можешь вообще линейно написать чтение без всяких циклов, там надо около 26 раз дернуть clk и между ними прочитать послед. данные. Быстро будет, как ракета...

Добавлено спустя 6 минут 42 секунды:
Myp писал(а):а ардуина делает 1 импульс за 13 микросекунд (не уверен, так в гугле написано)

Пиши по ассемблерному:
Код: Выделить всёРазвернуть
    pin_nClock_LOW;
    address & i ? pin_SDIO_HIGH : pin_SDIO_LOW;
    asm volatile ("nop");
    pin_nClock_HIGH;


Будет тебе не 13мкс., а 1 мкс :)

Re: Датчик касания механический, тензометрический.

Myp » 23 сен 2020, 02:42

ой да ну нафиг, сутки мучался чтобы получить такую разницу?
ускорился.PNG

Жёлтый график с медленным чтением с датчика, синий с супер быстрым чтением.
от погоды на марсе и то больше пользы бывает.
т.к. на повторяемость результата эти экзерсисы не влияют, считаю необходимым закопать стюардессу.
буду использовать как есть.

кстати, даже если в датчике настроить предел в 250 единиц, одна из десяти проб всё равно улетает под 500 единиц
походу марлин иногда затупляет и не останавливает стол вовремя.

Re: Датчик касания механический, тензометрический.

Dmitry__ » 23 сен 2020, 10:33

Myp писал(а):от погоды на марсе и то больше пользы бывает.

Ну ващета, разница капитальная :) :P
Тебе же не амплитуда сигнала важна (давление), а фаза - расстояние до стола. А фаза отличается конкретно :)

Снимок экрана от 2020-09-23 09-22-23.png

И да, тебе надо уложиться в 80 Гц. И скажем, тратить на обработку ацп 1/5 времени периода измерений. Т.е. достаточно всю обработку делать за 1/80 /5 = 2.5 ms.
Но с таким отличием фаз как на скриншоте, я бы таки разбирался :roll:

Добавлено спустя 3 минуты 19 секунд:
Если будет претензия - это отход от стола, то увеличивай картинку фронта 2-го горба. Рандом однако...

Re: Датчик касания механический, тензометрический.

Myp » 23 сен 2020, 11:20

датчик срабатывает на восходящей части графика
чем раньше он сработает, тем меньше лишних шагов успеет сделать мотор, меньше деформация кровати и меньше успеет подняться амплитуда.
то есть амплитуда на графике таки это быстродействие системы в комплексе.
вот пример когда марлин затупил и не увидел срабатывание датчика вовремя.
пролёт.PNG

вот так наглядней, на точке 54 я уже послал сигнал в марлин, дальнейший рост от меня не зависит, это тупняк марлина.

Re: Датчик касания механический, тензометрический.

Dmitry__ » 23 сен 2020, 11:45

Myp писал(а):датчик срабатывает на восходящей части графика

Я же предупреждал:

Dmitry__ писал(а):Если будет претензия - это отход от стола, то увеличивай картинку фронта 2-го горба. Рандом однако...


Поэтому не катит :)

Myp писал(а):чем раньше он сработает, тем меньше лишних шагов успеет сделать мотор, меньше

Ну так у тебя на графике раньше срабатывает синий, т.е. быстрое чтение.

Myp писал(а):то есть амплитуда на графике таки это быстродействие системы в комплексе.

НЕТ! Амплитуда здесь не играет роли, это как в частотном детекторе УКВ станций. Сигнал перед детектированием усиливается до бесконечности и ограничивается по амплитуде диодным огранич. Получаются прямоугольные импульсы постоянной амплитуды. А звук кодируется фазой сигнала...

У тебя не видно информации из-за маленького масштаба оси X, которая время ака расстояние. Вот я не в курсе сколько микрон между 2-мя фронтами синего и желтого графика.

ПЫСЫ:
Я не утверждаю, что быстрое чтение (синий график) значительно лучше, т.к. мало информации. Но графики отличаются значительно больше чем зависимость от погоды на Марсе. Забей в общем :)

Re: Датчик касания механический, тензометрический.

Myp » 23 сен 2020, 13:29

между точками по иксу 11мс, это частота срабатывания прерывания от HX711, почему-то 90 герц у меня получается.
то есть от контакта с столом до сигнала срабатывания проходит от 22 до 33 мс, смотря насколько удачно совпал момент контакта с моментом измерения,
смысла в быстрой обработке нет, убрав затупы в коде всё равно реакция датчика меньше 22 мс не получится.
разве что делать калибровку перед пробой и срабатывать на первое же значение выше нуля.

Re: Датчик касания механический, тензометрический.

Dmitry__ » 23 сен 2020, 18:05

Myp писал(а):убрав затупы в коде всё равно реакция датчика меньше 22 мс не получится.

Ну так я тебе это и сказал:
Dmitry__ писал(а): Т.е. достаточно всю обработку делать за 1/80 /5 = 2.5 ms.

Поэтому и непонятно отличие, что опять тебе и сказал:

Dmitry__ писал(а):Но с таким отличием фаз как на скриншоте, я бы таки разбирался


Осталось узнать какое расстояние пролетает бошка за "от 22 до 33 мс"
Все данные у тебя...

Re: Датчик касания механический, тензометрический.

Myp » 23 сен 2020, 23:17

ой не люблю я эти программы, там всё непонятно.
толи дело железо апгрейдить, сбегал в магаз, купил кварц на 20 мгц, припаял на ножки.
IMG_2760.jpg


вот вывод за секунду, последняя цифра - millis() между циклами чтения то есть примерно 140 герц получилось.
Код: Выделить всёРазвернуть
22:08:48.005 -> val; 110  6
22:08:48.005 -> val; 115  7
22:08:48.005 -> val; 123  7
22:08:48.005 -> val; 128  7
22:08:48.005 -> val; 133  6
22:08:48.039 -> val; 139  8
22:08:48.039 -> val; 145  7
22:08:48.039 -> val; 151  7
22:08:48.039 -> val; 158  6
22:08:48.039 -> val; 165  7
22:08:48.072 -> val; 175  7
22:08:48.072 -> val; 187  8
22:08:48.072 -> val; 199  6
22:08:48.072 -> val; 209  7
22:08:48.072 -> val; 218  7
22:08:48.107 -> val; 227  7
22:08:48.107 -> val; 234  6
22:08:48.107 -> val; 245  8
22:08:48.107 -> val; 255  7
22:08:48.107 -> val; 264  7
22:08:48.141 -> val; 271  6
22:08:48.141 -> val; 279  7
22:08:48.141 -> val; 287  7
22:08:48.141 -> val; 295  8
22:08:48.141 -> val; 301  6
22:08:48.176 -> val; 308  7
22:08:48.176 -> val; 316  7
22:08:48.176 -> val; 325  7
22:08:48.176 -> val; 334  6
22:08:48.176 -> val; 345  7
22:08:48.209 -> val; 353  8
22:08:48.209 -> val; 360  6
22:08:48.209 -> val; 367  6
22:08:48.209 -> val; 372  7
22:08:48.209 -> val; 378  7
22:08:48.243 -> val; 381  6
22:08:48.243 -> val; 385  7
22:08:48.243 -> val; 388  7
22:08:48.243 -> val; 392  7
22:08:48.243 -> val; 397  6
22:08:48.277 -> val; 401  6
22:08:48.277 -> val; 406  7
22:08:48.277 -> val; 412  8
22:08:48.277 -> val; 418  6
22:08:48.277 -> val; 423  6
22:08:48.311 -> val; 430  7
22:08:48.311 -> val; 438  7
22:08:48.311 -> val; 447  6
22:08:48.311 -> val; 456  7
22:08:48.311 -> val; 463  7
22:08:48.345 -> val; 472  7
22:08:48.345 -> val; 481  6
22:08:48.345 -> val; 491  6
22:08:48.345 -> val; 503  7
22:08:48.378 -> val; 516  8
22:08:48.378 -> val; 533  6
22:08:48.378 -> val; 553  6
22:08:48.378 -> val; 576  7
22:08:48.378 -> val; 601  7
22:08:48.412 -> val; 628  6
22:08:48.412 -> val; 654  7
22:08:48.412 -> val; 677  7
22:08:48.412 -> val; 702  7
22:08:48.412 -> val; 725  6
22:08:48.412 -> val; 747  6
22:08:48.446 -> val; 770  7
22:08:48.446 -> val; 792  7
22:08:48.446 -> val; 813  7
22:08:48.446 -> val; 834  6
22:08:48.479 -> val; 853  7
22:08:48.479 -> val; 874  7
22:08:48.479 -> val; 896  6
22:08:48.479 -> val; 921  7
22:08:48.479 -> val; 946  8
22:08:48.512 -> val; 974  7
22:08:48.512 -> val; 1003  6
22:08:48.512 -> val; 1032  6
22:08:48.512 -> val; 1062  7
22:08:48.512 -> val; 1087  7
22:08:48.546 -> val; 1112  7
22:08:48.546 -> val; 1139  6
22:08:48.546 -> val; 1163  7
22:08:48.546 -> val; 1186  7
22:08:48.582 -> val; 1207  6
22:08:48.582 -> val; 1227  6
22:08:48.582 -> val; 1247  8
22:08:48.582 -> val; 1268  7
22:08:48.582 -> val; 1288  6
22:08:48.582 -> val; 1305  6
22:08:48.617 -> val; 1322  7
22:08:48.617 -> val; 1337  7
22:08:48.617 -> val; 1350  7
22:08:48.617 -> val; 1364  7
22:08:48.617 -> val; 1376  7
22:08:48.652 -> val; 1390  7
22:08:48.652 -> val; 1403  6
22:08:48.652 -> val; 1414  7
22:08:48.652 -> val; 1423  8
22:08:48.652 -> val; 1430  7
22:08:48.686 -> val; 1437  6
22:08:48.686 -> val; 1441  7
22:08:48.686 -> val; 1444  7
22:08:48.686 -> val; 1446  7
22:08:48.686 -> val; 1446  6
22:08:48.721 -> val; 1448  8
22:08:48.721 -> val; 1449  7
22:08:48.721 -> val; 1452  7
22:08:48.721 -> val; 1458  6
22:08:48.721 -> val; 1466  7
22:08:48.755 -> val; 1476  7
22:08:48.755 -> val; 1484  8
22:08:48.755 -> val; 1491  6
22:08:48.755 -> val; 1497  7
22:08:48.755 -> val; 1499  7
22:08:48.789 -> val; 1500  7
22:08:48.789 -> val; 1501  6
22:08:48.789 -> val; 1501  8
22:08:48.789 -> val; 1498  7
22:08:48.822 -> val; 1493  7
22:08:48.822 -> val; 1486  6
22:08:48.822 -> val; 1478  7
22:08:48.822 -> val; 1469  7
22:08:48.822 -> val; 1458  8
22:08:48.855 -> val; 1445  6
22:08:48.855 -> val; 1430  7
22:08:48.855 -> val; 1412  7
22:08:48.855 -> val; 1391  7
22:08:48.855 -> val; 1363  6
22:08:48.855 -> val; 1332  8
22:08:48.889 -> val; 1296  7
22:08:48.889 -> val; 1257  7
22:08:48.889 -> val; 1213  6
22:08:48.889 -> val; 1164  7
22:08:48.922 -> val; 1109  7
22:08:48.922 -> val; 1048  8
22:08:48.922 -> val; 982  6
22:08:48.922 -> val; 908  7
22:08:48.922 -> val; 831  7
22:08:48.956 -> val; 756  7
22:08:48.956 -> val; 679  6
22:08:48.956 -> val; 604  7
22:08:48.956 -> val; 531  8
22:08:48.956 -> val; 460  7
22:08:48.991 -> val; 391  6
22:08:48.991 -> val; 325  7
22:08:48.991 -> val; 264  7
22:08:48.991 -> val; 207  7
22:08:48.991 -> val; 159  7


ну и результат на картинке
разная ширина из за того что изменился масштаб временной.
я не знаю как в экселе совместить два графика с разным масштабом.
140.PNG

Re: Датчик касания механический, тензометрический.

Dmitry__ » 24 сен 2020, 00:19

Я вообще не понимаю как ты производишь измерения. Единственно правильный способ - это к одному датчику подключить 2 измерителя, с разными алгоритмами, и данные выводить в терминал...

Re: Датчик касания механический, тензометрический.

Myp » 24 сен 2020, 00:48

так и провожу, что-то меняю а потом в терминале считываю.
до сего дня частота была одинаковая так что можно было сравнивать графики
сегодня частота изменилась и считай всё с чистого листа пошло.

вот такая петрушка получается если проверять в марлине.
из 30 проб одна испорченная.
Код: Выделить всёРазвернуть
23:43:13.220 : 1 of 30: z: 0.005Mean: 0.005000 Sigma: 0.000000 Min: 0.005 Max: 0.005 Range: 0.000
23:43:15.127 : 2 of 30: z: 0.010Mean: 0.007500 Sigma: 0.002500 Min: 0.005 Max: 0.010 Range: 0.005
23:43:17.039 : 3 of 30: z: 0.000Mean: 0.005000 Sigma: 0.004082 Min: 0.000 Max: 0.010 Range: 0.010
23:43:18.946 : 4 of 30: z: 0.010Mean: 0.006250 Sigma: 0.004146 Min: 0.000 Max: 0.010 Range: 0.010
23:43:20.859 : 5 of 30: z: 0.000Mean: 0.005000 Sigma: 0.004472 Min: 0.000 Max: 0.010 Range: 0.010
23:43:22.766 : 6 of 30: z: 0.010Mean: 0.005833 Sigma: 0.004488 Min: 0.000 Max: 0.010 Range: 0.010
23:43:24.678 : 7 of 30: z: 0.000Mean: 0.005000 Sigma: 0.004629 Min: 0.000 Max: 0.010 Range: 0.010
23:43:26.585 : 8 of 30: z: 0.010Mean: 0.005625 Sigma: 0.004635 Min: 0.000 Max: 0.010 Range: 0.010
23:43:28.498 : 9 of 30: z: 0.000Mean: 0.005000 Sigma: 0.004714 Min: 0.000 Max: 0.010 Range: 0.010
23:43:30.405 : 10 of 30: z: 0.010Mean: 0.005500 Sigma: 0.004717 Min: 0.000 Max: 0.010 Range: 0.010
23:43:32.317 : 11 of 30: z: 0.000Mean: 0.005000 Sigma: 0.004767 Min: 0.000 Max: 0.010 Range: 0.010
23:43:34.258 : 12 of 30: z: -0.102Mean: -0.003958 Sigma: 0.030060 Min: -0.102 Max: 0.010 Range: 0.112 //бажное считывание, что-то не сработало.
23:43:36.137 : 13 of 30: z: -0.003Mean: -0.003846 Sigma: 0.028883 Min: -0.102 Max: 0.010 Range: 0.112
23:43:38.043 : 14 of 30: z: 0.007Mean: -0.003036 Sigma: 0.027986 Min: -0.102 Max: 0.010 Range: 0.112
23:43:39.956 : 15 of 30: z: -0.003Mean: -0.003000 Sigma: 0.027037 Min: -0.102 Max: 0.010 Range: 0.112
23:43:41.863 : 16 of 30: z: 0.007Mean: -0.002344 Sigma: 0.026302 Min: -0.102 Max: 0.010 Range: 0.112
23:43:43.776 : 17 of 30: z: -0.003Mean: -0.002353 Sigma: 0.025516 Min: -0.102 Max: 0.010 Range: 0.112
23:43:45.682 : 18 of 30: z: 0.007Mean: -0.001806 Sigma: 0.024900 Min: -0.102 Max: 0.010 Range: 0.112
23:43:47.595 : 19 of 30: z: -0.003Mean: -0.001842 Sigma: 0.024236 Min: -0.102 Max: 0.010 Range: 0.112
23:43:49.501 : 20 of 30: z: 0.010Mean: -0.001250 Sigma: 0.023763 Min: -0.102 Max: 0.010 Range: 0.112
23:43:51.414 : 21 of 30: z: -0.005Mean: -0.001429 Sigma: 0.023204 Min: -0.102 Max: 0.010 Range: 0.112
23:43:53.320 : 22 of 30: z: 0.007Mean: -0.001023 Sigma: 0.022747 Min: -0.102 Max: 0.010 Range: 0.112
23:43:55.234 : 23 of 30: z: -0.007Mean: -0.001304 Sigma: 0.022286 Min: -0.102 Max: 0.010 Range: 0.112
23:43:57.139 : 24 of 30: z: 0.005Mean: -0.001042 Sigma: 0.021853 Min: -0.102 Max: 0.010 Range: 0.112
23:43:59.053 : 25 of 30: z: -0.010Mean: -0.001400 Sigma: 0.021483 Min: -0.102 Max: 0.010 Range: 0.112
23:44:00.959 : 26 of 30: z: 0.005Mean: -0.001154 Sigma: 0.021102 Min: -0.102 Max: 0.010 Range: 0.112
23:44:02.872 : 27 of 30: z: -0.005Mean: -0.001296 Sigma: 0.020720 Min: -0.102 Max: 0.010 Range: 0.112
23:44:04.785 : 28 of 30: z: -0.012Mean: -0.001696 Sigma: 0.020453 Min: -0.102 Max: 0.010 Range: 0.112
23:44:06.692 : 29 of 30: z: 0.000Mean: -0.001638 Sigma: 0.020100 Min: -0.102 Max: 0.010 Range: 0.112
23:44:08.604 : 30 of 30: z: -0.007Mean: -0.001833 Sigma: 0.019790 Min: -0.102 Max: 0.010 Range: 0.112
23:44:08.605 : Finished!
23:44:08.607 : Mean: -0.001833 Min: -0.102 Max: 0.010 Range: 0.112
23:44:08.608 : Standard Deviation: 0.019790


и тут я вспомнил что у меня проблема с механикой, у меня на оси Z что-то люфтит
я даже кубик распечатать не могу нормальный :(
вобщем простите что отнимал время, чё толку тестить сотые доли если механика не в порядке.

Re: Датчик касания механический, тензометрический.

Dmitry__ » 24 сен 2020, 01:02

Но у тебя же считывание данных не синхронизировано, ты потом в экселе подгоняешь горбы? А надо синхронное чтение и вывод данных на одной временнОй оси, а не совмещение 2-х графиков. У тебя там фронты вообще от балды выставлены...

Добавлено спустя 2 минуты 51 секунду:
Myp писал(а):вобщем простите что отнимал время, чё толку тестить сотые доли если механика не в порядке.

Ну тоже верно, но если один датчик подключен к 2-м ацп, то будет именно проверка алгоритмов без привязки к точности механики. Надо завязывать ловить блох, работайте, а мы вас прокормим :)

Re: Датчик касания механический, тензометрический.

Myp » 24 сен 2020, 02:57

до апгрейда кварца, точки снимались ровно через 11 мс, всё было Ок, можно было снимать разные графики и сравнивать их.
а вот после апгрейда появились флуктуации 6-8 мс, теперь придётся к каждой точке привязывать таймстамп micros()

ну и я всётаки не удовлетворён моим алгоритмом вычисления крутизны
может так?
Код: Выделить всёРазвернуть
if (((val_2 - val_1) > 15) and ((val_3 - val_2) > 50))

тобишь превратить два отрезка в векторы и сравнивать что каждый из векторов выше заданного.
если конец первого вектора выше 15, а конец второго выше 50, то значит мы видим фронт.
задам минимально пологую фигуру из двух векторов (чёрные стрелочки на картинке) и всё что будет более круто загнуто вверх - считать за фронт.
векторы.png


Rambler\'s Top100 Mail.ru counter