-
- Не все понял, но как раз сейчас занимаюсь чем-то подобным. В агрегате объединены шиной CAN ~надцать рядовых модулей и один главный, периодически (раз в сколько-то секунд) рассылающий высокоприоритетное широковещательное сообщение с содержимым своего 32-битного счетчика, каждый тик к-рого равен 10мс. Argon(212 знак., 16.11.2023 20:45)
- В CANopen эту задачу решают привязываясь программным ФАПЧ к периодическим сообщениям SYNC. - ЫЫyкпy(16.11.2023 08:27)
- Задачу синхронного запуска измерения раньше реализовывали
собственно передачей широковещательной команды (в CAN вроде как
сообщения). После чего следовало асинхронное выгребание результатов
измерения. Нахрена эта ваша синхронизация - ХЗ - Vit(16.11.2023 07:19)
- Так и будет в новой системе. В старой же пеп-контроллер сам, когда
ему вздумается, считывал коды с энкодеры и посылал в сеть. А т.к.
какой-то сумрачный "хений" туда вкорячил операционку, никакого
реального времени нет, сигналы совершенно апериодически приходят
(да еще и сеть загружена процентов на 60), вот и нужны
синхроимпульсы. Eddy_Em(180 знак., 16.11.2023 08:21)
- Сетевой стек под линуксом сам по себе может быть источником
задержек в десятки миллисекунд. И гигабитность сети тут мало чего
меняет. - LightElf(16.11.2023 09:36)
- Десятки миллисекунд? Какие еще сказки я услышу? - Eddy_Em(16.11.2023 10:02)
- Моё дело предупредить, а уж как с этим жить - дело ваше. - LightElf(16.11.2023 10:17)
- Десятки миллисекунд? Какие еще сказки я услышу? - Eddy_Em(16.11.2023 10:02)
- Сетевой стек под линуксом сам по себе может быть источником
задержек в десятки миллисекунд. И гигабитность сети тут мало чего
меняет. - LightElf(16.11.2023 09:36)
- Так и будет в новой системе. В старой же пеп-контроллер сам, когда
ему вздумается, считывал коды с энкодеры и посылал в сеть. А т.к.
какой-то сумрачный "хений" туда вкорячил операционку, никакого
реального времени нет, сигналы совершенно апериодически приходят
(да еще и сеть загружена процентов на 60), вот и нужны
синхроимпульсы. Eddy_Em(180 знак., 16.11.2023 08:21)
- поскольку задача ета нужна для точной синхронизации енкодеров (если
правильно понял) то почему бы не синхронизировать тактовую частоту
всех МК? один генератор, и несколько lvds драйверов на витую пару.
длину всех кабелей можно сделать равной. - Alex68(14.11.2023 18:37)
- Никогда! Слышите! Никогда в пром. и любом другом ответственном
оборудовании, не делайте синхронизацию тактовых частот без
механизма регулярной сверки и поправки фаз! Nikolay_Po(442 знак., 15.11.2023 22:33)
- А зачем, вообще, синхронизировать тактовые частоты? Почему не
воспользоваться каким-нить специфическим протоколом для обмена
данными в том или ином виде? Экономим на опорнике? - mse homjak(16.11.2023 00:14)
- автору вопроса нужна синхронная обработка данных от множества
енкодеров. по-хорошему, это чисто аппаратная задача для FPGA, но
автор от них шарахается. - Alex68(16.11.2023 00:24)
- Дык, этта... Энкодеры, это-жэ тупая квадратурщина. Генери
прерывание по ношке и смотри, какое состояние у другой фазы. Зачем
туду-сюду гнать мегагерцы? - mse homjak(16.11.2023 10:28)
- У энкодера SSI-интерфейс, если что… Т.е. покуда ты получишь данные, они уже устареют! - Eddy_Em(16.11.2023 11:15)
- Дык, этта... Энкодеры, это-жэ тупая квадратурщина. Генери
прерывание по ношке и смотри, какое состояние у другой фазы. Зачем
туду-сюду гнать мегагерцы? - mse homjak(16.11.2023 10:28)
- Синхронизацию тактовых частот не я предложил. - Nikolay_Po(16.11.2023 00:18)
- автору вопроса нужна синхронная обработка данных от множества
енкодеров. по-хорошему, это чисто аппаратная задача для FPGA, но
автор от них шарахается. - Alex68(16.11.2023 00:24)
- А зачем, вообще, синхронизировать тактовые частоты? Почему не
воспользоваться каким-нить специфическим протоколом для обмена
данными в том или ином виде? Экономим на опорнике? - mse homjak(16.11.2023 00:14)
- Ну, не знаю.. Надо пробовать. Там расстояние метров 250. - Eddy_Em(14.11.2023 19:11)
- Передавать синхросигнал по радиоканалу? Синхриться от GPS? - LightElf(16.11.2023 09:38)
- Радио вообще не катит: железобетон толщиной метра два-три, куча
металлоконструкций… Да и зачем, когда CAN проложен? - Eddy_Em(16.11.2023 10:02)
- Используй провода CAN как антену - symbions(16.11.2023 14:17)
- Радио вообще не катит: железобетон толщиной метра два-три, куча
металлоконструкций… Да и зачем, когда CAN проложен? - Eddy_Em(16.11.2023 10:02)
- на 100 метров 10 мегагерц передавал. на 200 метров - многовато,
конечно. нужно считать задержки в кабеле. а хотя - оптика рулит.
там можно и 100 мегагерц передать. стандартные кабели и стандартные
SFP модули. выходы и входы там lvds. - Alex68(14.11.2023 19:17)
- В старые годы сигнал 10 МГц распространялся на тысячи километров! - Kpoк(16.11.2023 22:54)
- нооооо медленнннноооо медленнннооооо - Alex68(16.11.2023 23:04)
- но предсказуемо! - Kpoк(16.11.2023 23:31)
- нооооо медленнннноооо медленнннооооо - Alex68(16.11.2023 23:04)
- Чо их считать? поставить два устройства рядом, соединить кабелем
200м и зафиксировать задержку в ведомом. Полюбому, время реакции
устройства на внешнюю ногу, будет +/-. Думаю, времена будут, первые
сотни мкс. - mse homjak(14.11.2023 21:01)
- И тут включается частотник, и в линию идет частокол… - Eddy_Em(14.11.2023 21:11)
- Хорошая витая пара и пох. - mse homjak(14.11.2023 22:19)
- Хорошей помехе пох. Вражью энергию надо давить полезной энергией. Я
голосую за периодическую синхронизацию. - Codavr(15.11.2023 18:33)
- Хрень. Если уж на то пошло, то ставим у приёмника ФАПЧоватый генератор на кварцэ, с подстройкой и как опору заводим с линии. Постоянную времени в разумных пределах, кварц с максимальной добротностью... Можно ещо процэссором контролировать наличие входного сигнала, выход фазового детектора и в случае пропадания, ЦАПом удерживать сигнал на входе ГУН, пока не появицца опора. - mse homjak(16.11.2023 23:15)
- Только для достижения такого надо как в Ethernet делать.
Трансформаторы + синфазные дроссели с двух сторон. - Evgeny_CD(15.11.2023 11:16)
- можно взять теже ethernet трансформаторы на 10 мегабит. а еще лучше передавать 10 мегагерц синус 100 милливольт дифференциальным драйвером ADSL\VDSL, а принимать lvds приемником (через трансформатор). впрочем принимать можно и готовым трансивером от старых карточек. - Alex68(15.11.2023 14:52)
- Это, больше, для гальваники. На 200м может и у@бать. - mse homjak(15.11.2023 11:27)
- Хорошей помехе пох. Вражью энергию надо давить полезной энергией. Я
голосую за периодическую синхронизацию. - Codavr(15.11.2023 18:33)
- и пусть себе идет. частоты различны на порядки. ну или оптика. - Alex68(14.11.2023 22:07)
- Хорошая витая пара и пох. - mse homjak(14.11.2023 22:19)
- И тут включается частотник, и в линию идет частокол… - Eddy_Em(14.11.2023 21:11)
- В старые годы сигнал 10 МГц распространялся на тысячи километров! - Kpoк(16.11.2023 22:54)
- Передавать синхросигнал по радиоканалу? Синхриться от GPS? - LightElf(16.11.2023 09:38)
- Никогда! Слышите! Никогда в пром. и любом другом ответственном
оборудовании, не делайте синхронизацию тактовых частот без
механизма регулярной сверки и поправки фаз! Nikolay_Po(442 знак., 15.11.2023 22:33)
- "Проблема 2000-го года была вызвана, в том числе, использованием
старых программ, что не предполагалось во время их разработки."
Общий объём мировых инвестиций, потраченный на подготовку к 2000
году, составил 300 млрд долларов. - Codavr(14.11.2023 09:01)
- 32-битный счетчик UNIX time кончится лишь в 2106 году. Ни я, ни моя
дочка до этого никак не доживем. Да я подозреваю, что большинство
современного населения Земли не доживет… - Eddy_Em(14.11.2023 09:07)
- 2038 не за горами! - SciFi(14.11.2023 09:09)
- Сейчас time_t в худшем случае - uint32_t, никто ее со знаком не использует. А на ПК она вообще 64-битная… - Eddy_Em(14.11.2023 09:29)
- Опередил. Я думал, что ТС фкурсах. - Codavr(14.11.2023 09:12)
- За ним придут! И за дочкой тоже. Кто тянул за язык? - SciFi(14.11.2023 09:13)
- 2038 не за горами! - SciFi(14.11.2023 09:09)
- Тот редкий случай, когда нашему брату инженеру тоже что-то перепало от хайпа... - SciFi(14.11.2023 09:02)
- 32-битный счетчик UNIX time кончится лишь в 2106 году. Ни я, ни моя
дочка до этого никак не доживем. Да я подозреваю, что большинство
современного населения Земли не доживет… - Eddy_Em(14.11.2023 09:07)
- 1. С необходимой погрешностью времени определись, ms это одно, μs другое, ns третье 2. Как работает NTP изучил? Потому что тут свой колхоз, но не NTP который ты собирался сделать. 3. Периодическая широковещательная рассылка пакета времени это не NTP и решает многие задачи. 4. Советую к ознакомлению IEEE 1588 и его реализацию в STM32H7 Ethernet MAC. Например RM0433 Rev 8, пункт 58.5.4, стр 2807. - RxTx(14.11.2023 09:00)
- Странный вопрос. в нем нет: 1. точности по синхронизации 2. частоты
шины 3. наличие маршрутизаторов в шине - Nikolaev_Aleksey(14.11.2023 08:46)
- +1 - LightElf(17.11.2023 18:21)
- У вас будут использоваться шлюзы/преобразователи для CAN и ваши
железки окажутся на разных участках? Или все железки будут на одной
ветке, т.е. получать все пакеты одновременно? Еще не понятно, надо
что бы время в железках синхронизировалось между собой или с
общемировым? А еще не понятно зачем подстраивать частоту, если
можно пересчитывать время, с учетом индивидуальных коэффициентов - AlexBi(14.11.2023 08:05)
- В принципе, ПК может и время пересчитывать (сейчас именно так и делается, хорошо видно температурный дрейф кварца). Но почему бы и нет? Eddy_Em(125 знак., 14.11.2023 08:14)
- Главный шлёт своё время в широковещательном пакете(у CAN есть
такой?), если разница больше предельно допустимой, то ведомые
принудительно меняют своё время. Если меньше - пытается
подстроиться, опираясь на предыдущую разницу и текущую, что-то
вроде PD-регулятора. Для оценки коэффициентов пришлось модель
рисовать, но получилось в итоге. По формату: советую не счётчик, а
микро- или наносекунды в дробной части, чтобы что-то понятное было
переносимей между проектами. Ну или Dingo(203 знак., 14.11.2023 07:41)
- Микросекунды не получится, тут и с целыми-то секундами проблема:
частота ведь всего 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)
- Могу только сказать, что в пакетах синхронизации не должно быть
никаких PSC/ARR, ибо протокол на то и протокол, что должен быть
отвязан от аппаратуры конкретного МК. il-2(106 знак., 14.11.2023 07:29)
- МК (STM32F0) даже деление не умеет, не говоря о флоатах! Вычисления
должен делать ПК. - Eddy_Em(14.11.2023 08:09)
- У меня и делит, и плавучку считает. Я волшебник! - SciFi(14.11.2023 08:30)
- Ну-ну… - Eddy_Em(14.11.2023 08:57)
- Все подобные калибровочные вычисления можно свести к умножению и сдвигам вправо (вместо деления). Не так страшен черт. - il-2(14.11.2023 08:17)
- У меня и делит, и плавучку считает. Я волшебник! - SciFi(14.11.2023 08:30)
- МК (STM32F0) даже деление не умеет, не говоря о флоатах! Вычисления
должен делать ПК. - Eddy_Em(14.11.2023 08:09)
- Про требуемую точность ни слова. Но откуда-то взялось "раз
20-50"... Откуда? Должно быть, это дух Коперника нашептал. - SciFi(13.11.2023 22:12)
- это был Джордано, истинно вам говорю! - Alex68(14.11.2023 01:58)
- А, да, забыл: т.к. timestamp нужен миллисекундный, то ±0.5мс будет
за глаза. Eddy_Em(484 знак., 13.11.2023 22:49)
- А нельзя просто посылать пакет, условно называемый "синхронизация
времени", содержащий точное время, но не требующий ответа? Потом
можно опрашивать устройства для определения разницы собственного
времени и времени синхронизации и при необходимости подавать
команду "применить" [значение времени, переданное при
синхронизации]. Так и трафик будет меньше и точность времени будет
одинаковой для всех устройств. - reZident(13.11.2023 23:07)
- Так еще ведь и подстройку частоты нужно делать... Eddy_Em(364 знак., 13.11.2023 23:44)
- так так (улыбается) в большом мире для этого используют шину power link, это real-time ethernet. - Alex68(14.11.2023 01:57)
- Так еще ведь и подстройку частоты нужно делать... Eddy_Em(364 знак., 13.11.2023 23:44)
- А нельзя просто посылать пакет, условно называемый "синхронизация
времени", содержащий точное время, но не требующий ответа? Потом
можно опрашивать устройства для определения разницы собственного
времени и времени синхронизации и при необходимости подавать
команду "применить" [значение времени, переданное при
синхронизации]. Так и трафик будет меньше и точность времени будет
одинаковой для всех устройств. - reZident(13.11.2023 23:07)
- Ответ: Toчкa oпopы(91 знак., 13.11.2023 21:52)
- Я про регистры - prescaler и auto reload. Это об STM32. Eddy_Em(248 знак., 13.11.2023 22:03)