-
- Микросекунды не получится, тут и с целыми-то секундами проблема:
частота ведь всего 48МГц! Поэтому и планирую слать в пакете счетчик
секунд и значение CNT, а ПК, зная ARR, сам дробную часть посчитает.
МК это не умеет: не то, что флоатов, а даже деления нет! - Eddy_Em(14.11.2023 08:11)
- Как хотите. Но 1 мксек = 48 циклов CNT, => 500 нсек=24 =>
250 =24, 125 нсек=12 циклов. Дальше на 2 не делится. Даже если так-
какая там у вас требуемая точность? ARR не константа же (для
подстройки скорости времени), поэтому либо её пересылать, чтобы
комп считал, либо на месте. Dingo(370 знак., 14.11.2023 09:25, ссылка)
- И ARR, и CNT, и PSC пересылаются же. - Eddy_Em(14.11.2023 09:30)
- Хорошо. Компе получил, что-то посчитал. А потом что? Назад каждому
отправляет все эти величины? Которые приходят в малопредсказуемый
момент времени. Или я "не туда" думаю? - Dingo(14.11.2023 09:48)
- Однако, NTP же работает подобным образом! - Eddy_Em(14.11.2023 10:02)
- Для NTP всегда "ARR" константа, а именно 2^32. Формат
uint32_t.uint32_t, то есть в дробной части, которая соответствует
числителю подразумевается знаменатель 2^32= 1sec. а у вас он
меняться будет. У каждого устройства. А нужен один для всех, единообразный. 48e+6 взять не можете,
потому что где-то окажется и больше этой величины из-за разброса
кварцев. Я предлагаю взять знаменатель дроби в 1e9, что согласуется
с одним из используемых форматов в time.h Dingo(1 знак., 14.11.2023 10:16)
- МК не может выполнять счетную работу: деления, да еще во флоатах,
займут очень много времени. Вот, у меня, например, на F042 идет
вычисление температур с датчиков TSYS01 (во флоатах, по полиному) -
занимает несколько миллисекунд! Eddy_Em(625 знак., 14.11.2023 10:41)
- А вообще там нужна скорость? Не думаю, что температура меняется быстрее, чем считает МК через soft-float. Не хочу заморачиваться, даже если разово не будет использоваться. - Dingo(15.11.2023 07:05)
- High Accuracy ±0.1°C @ Temp.: -5°C … +50°C это была причина выбора
гемораTSYS01 с полиномом? Жесть. Чем RTD + ADC16(20) не устроил с более широким диапазоном и лучшей точностью? - enc(14.11.2023 13:34)- Платиновые термодатчики я тоже рассматривал. Но а) было бы дороже,
б) было бы намного дольше. Особенно учитывая то, что я очень плохо
дружу с аналоговой схемотехникой. Eddy_Em(680 знак., 14.11.2023 14:19)
- Любопытно, какая была длина линии связи с платиновыми RTD, что
заморочились экономией одного провода? Классическая 4-проводная
"кельвиновская" схема подключения ведь проще в реализации
измерения. - reZident(14.11.2023 14:33)
- В случае четырехпроводной схемы пришлось бы брать четыре
мультиплексора и самому прорабатывать методику измерения, а так я
из статьи одного китайца алгоритм стащил. Ведь нужно помнить, что
нам еще нужно само сопротивление каналов мультиплексора
нивелировать (а оно хоть и меньше 1 Ома, но таки не 0). Eddy_Em(171 знак., 14.11.2023 15:00)
- С8051F350 от Silicon Labs решили бы вашу проблему. Но там богомерзкий 8051 Есть ещё похожий на 430 ядре от MCP - даже чуть лучше. Ставите около термодатчика - и алга. Единственно, что для хорошей точности надо бы развязывать от интерфейса. symbions(102 знак., 14.11.2023 18:57)
- Я наверное чего-то недогоняю. Зачем 4-й провод коммутировать?
Опорный резистор в вашей схеме где стоит? Если опора вверху
цепочки, то 4-й провод напрямую или через резистор смещения
подключается к общему проводу. reZident(151 знак., 14.11.2023 15:15, картинка)
- Это классическая схема, 100лет назад делал по ней на AD7705, 2 канала сразу с одним опорником, работает отлично. При изобретении велосипеда может много времени уйти на его доработку, так что лучше сперва ознакомиться с решениями классиков. - Yurasvs(15.11.2023 16:29)
- Я делал по статье Henry He "Minimizing Errors in Multiplexed 3-Wire
RTD Data-Acquisition Systems". С переключением измерительных токов. Eddy_Em(178 знак., 14.11.2023 16:07)
- Резисторы с конденсаторами это синфазный и дифференциальный фильтр. Нижний резистор, чтобы потенциал REFIN не вышел за допустимый диапазон синфазных напряжений. Обычно при использовании встроенного буфера диапазон входных синфазных напряжений уменьшается на 0,1В...0,25В от "рельсы" питания. - reZident(14.11.2023 16:31)
- В случае четырехпроводной схемы пришлось бы брать четыре
мультиплексора и самому прорабатывать методику измерения, а так я
из статьи одного китайца алгоритм стащил. Ведь нужно помнить, что
нам еще нужно само сопротивление каналов мультиплексора
нивелировать (а оно хоть и меньше 1 Ома, но таки не 0). Eddy_Em(171 знак., 14.11.2023 15:00)
- Любопытно, какая была длина линии связи с платиновыми RTD, что
заморочились экономией одного провода? Классическая 4-проводная
"кельвиновская" схема подключения ведь проще в реализации
измерения. - reZident(14.11.2023 14:33)
- Платиновые термодатчики я тоже рассматривал. Но а) было бы дороже,
б) было бы намного дольше. Особенно учитывая то, что я очень плохо
дружу с аналоговой схемотехникой. Eddy_Em(680 знак., 14.11.2023 14:19)
- Я же правильно понял, что сам сенсор способен дать разрешениетеоретически до 24 бит; однако, согласно даташиту, первой же операцией при расчёте младшие 16 бит отбрасываем? О_о - Dingo(14.11.2023 12:27)
- Деление: не нужно через флоат, я вам уже написал выше, как обойтись
26*(сдвиг+сумма), могу подробней. Формат: я долго бодался, но потом
пришёл к тому, что должен быть единообразным. Даже в вашем случае
комп пересчитывает в человекопонятный со знаменателем 10е9(нсек)
или 10е6(мксек). Тактовая: вы получите значения в тиках кварца за
секунду, которые как правило не равны номинальной; точнее - имеют
допуск по отношению к ней. TSYS01: интересная зверушка. Могу
попробовать Dingo(83 знак., 14.11.2023 11:07)
- Умножение, конечно, есть. Eddy_Em(80 знак., 14.11.2023 11:57, ссылка)
- Хых.. там всё через плавучку, про умножение двоичных нет ничего.
71: Dingo(65 знак., 14.11.2023 12:34)
- Естественно: в целых числах это никак не посчитать! - Eddy_Em(14.11.2023 12:36)
- ]:->
На что спорим?С уточнением: используя целочисленные операции. UPD: погорячился. 1/(2^32) ~= 232.83e-12, а там ещё 9 порядков. - Dingo(14.11.2023 12:58)- Теоретически можно попробовать, практически - лень. Eddy_Em(260 знак., 14.11.2023 13:34)
- Можно попробовать оценить, чему равна 0.01℃ при заданном сомножителе, и огрубить вычисления разрядов точнее этой величины. Не считанном коэффициенте, а 4, (-2),... Ну и вряд ли на полиноме с е-21 даже х^4 все разряды будут задействованы. Однако к синхронизации это уже никаким боком не относится. - Dingo(14.11.2023 13:44)
- Теоретически можно попробовать, практически - лень. Eddy_Em(260 знак., 14.11.2023 13:34)
- ]:->
- Естественно: в целых числах это никак не посчитать! - Eddy_Em(14.11.2023 12:36)
- Хых.. там всё через плавучку, про умножение двоичных нет ничего.
71: Dingo(65 знак., 14.11.2023 12:34)
- Умножение, конечно, есть. Eddy_Em(80 знак., 14.11.2023 11:57, ссылка)
- Всё он может. Деды летали на Луну с процом медленнее мегагерца. Вы просто не умеете их готовить. - SciFi(14.11.2023 10:50)
- МК не может выполнять счетную работу: деления, да еще во флоатах,
займут очень много времени. Вот, у меня, например, на F042 идет
вычисление температур с датчиков TSYS01 (во флоатах, по полиному) -
занимает несколько миллисекунд! Eddy_Em(625 знак., 14.11.2023 10:41)
- Для NTP всегда "ARR" константа, а именно 2^32. Формат
uint32_t.uint32_t, то есть в дробной части, которая соответствует
числителю подразумевается знаменатель 2^32= 1sec. а у вас он
меняться будет. У каждого устройства. А нужен один для всех, единообразный. 48e+6 взять не можете,
потому что где-то окажется и больше этой величины из-за разброса
кварцев. Я предлагаю взять знаменатель дроби в 1e9, что согласуется
с одним из используемых форматов в time.h Dingo(1 знак., 14.11.2023 10:16)
- Однако, NTP же работает подобным образом! - Eddy_Em(14.11.2023 10:02)
- Хорошо. Компе получил, что-то посчитал. А потом что? Назад каждому
отправляет все эти величины? Которые приходят в малопредсказуемый
момент времени. Или я "не туда" думаю? - Dingo(14.11.2023 09:48)
- И ARR, и CNT, и PSC пересылаются же. - Eddy_Em(14.11.2023 09:30)
- Как хотите. Но 1 мксек = 48 циклов CNT, => 500 нсек=24 =>
250 =24, 125 нсек=12 циклов. Дальше на 2 не делится. Даже если так-
какая там у вас требуемая точность? ARR не константа же (для
подстройки скорости времени), поэтому либо её пересылать, чтобы
комп считал, либо на месте. Dingo(370 знак., 14.11.2023 09:25, ссылка)
- Микросекунды не получится, тут и с целыми-то секундами проблема:
частота ведь всего 48МГц! Поэтому и планирую слать в пакете счетчик
секунд и значение CNT, а ПК, зная ARR, сам дробную часть посчитает.
МК это не умеет: не то, что флоатов, а даже деления нет! - Eddy_Em(14.11.2023 08:11)