|
Синхронизация МК между собой |
|
|
|
Feb 1 2017, 09:10
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 25-08-15
Из: Рыбное
Пользователь №: 88 141

|
Здравствуйте, уважаемые форумчане. Есть опытный образец тензоизмерительной системы на 64 канала на контроллере stm32f107. Необходимо реализовать синхронизацию между несколькими такими системами. И вот в чём трудность: 1) так как частота опроса одного канала 250 раз в секунду, то имеем времени на один канал порядка 62,5 микросекунд, каким образом можно добиться синхронизации, чтобы несколько модулей одновременно (или почти одновременно) выполняли преобразование по каждому каналу, за указанный промежуток времени? 2) как сделать так, чтобы в случае внезапного выхода из строя одного или нескольких модулей, работоспособные модули оставались синхронизированными?
Пока решили проблему с помощью двух выводов на одном из портов (эти выводы соединены соответственно у всех контроллеров между собой): 1)В начальный момент времени оба вывода настроены как входы с подтяжкой к питанию. 2)Перед запуском преобразования ПЕРВЫЙ вывод опрашивается до тех пор пока не будет прочитана "1" (или таймаут, сейчас он равен 10000 мс), т.е. определяем готовы ли все модули к работе. 3)Затем ПЕРВЫЙ вывод настраивается в режим выхода на все время опроса и держится равным "0" (сигнализируя нам о том, что модули находится в режиме опроса каналов). 4)Далее ВТОРОЙ вывод (перед началом преобразования АЦП) настраивается на выход и переводится в "0". 5)По завершению преобразования АЦП, ВТОРОЙ вывод настраивается на вход с подтяжкой к питанию и опрашивается до тех пор пока не будет прочитана "1" (или таймаут, сейчас он равен 55 мкс), т.е. все модули завершили преобразование по одному каналу. 6)После, пока не принята команда "СТОП", циклически повторяем пункты 4 и 5. 7)Когда принята команда "СТОП" ПЕРВЫЙ и ВТОРОЙ выводы настраиваются в режим входа с подтяжкой к питанию (сигнализируя нам о том, что модули вышли из режима опроса каналов).
Только есть проблема, если хотя бы один модуль повис (хотя в программе все циклы конечные) и не сменил состояние ВТОРОГО вывода, то остальные модули всегда ждут таймаут и переходят к следующему каналу, т.е. получается, что они уже не синхронизированы между собой.
Может быть есть какой-либо вариант решения проблемы? (например, один модуль мастер, а остальные слейвы, но что делать, если мастер завис?, в общем непонятно...).
|
|
|
|
|
 |
Ответов
|
Feb 2 2017, 12:22
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 25-08-15
Из: Рыбное
Пользователь №: 88 141

|
jcxz, т.к. софт на управляющем компьютере уже разработан не нами, то и синхронизация по Ethernet под вопросом. Поэтому мы и начали использовать синхронизацию аппаратную по состоянию выводов (как написано в самом начале созданной темы). Lmx2315, тоже сначала была мысль Мастер-слейв, но для этого надо перед началом измерений настроить контроллеры в нужный режим (мастер или слейв), что опять требует команд с главного компьютера, что в свою очередь упирается в софт. Поэтому и хотели отвязаться от внешних воздействий с точки зрения синхронизации. А за супервизор (возможно ли вместо него использовать внутренний сторожевой таймер в случае электрического зависания или он тоже окажется неработоспособным?) спасибо, учтем.
И к вопросу по PTP-протоколу, почитал про него и все же не понял, а именно, допустим процедура синхронизации с главным компьютером прошла успешно, мы вычислили поправку времени и, так сказать, выставили точное время в подчиненном контроллере. А что дальше? ведь мы только настроили ход системных часов контроллера, а тактовая частота же контроллера осталась без изменений. Т.е. получается, если я хочу использовать для каких-то внутренних процессов, например таймер 3 (задает период опроса АЦП), то ему же побоку как идут системные часы на контроллере или я чего-то не понимаю? Разъясните, мне дураку, пожалуйста... И в случае использования фичи синхронизации по протоколу точного времени, применительно к stm32f107(f407), единственным решением я вижу установку будильника (прерывание по target time) и запуску какой-либо задачи (например того же таймера 3) в этом прерывании с последующей перестановкой будильника на заданную величину dT, после чего процесс повторяется циклически, или я снова чего-то не понимаю?
|
|
|
|
Сообщений в этой теме
ivan24190 Синхронизация МК между собой Feb 1 2017, 09:10 jcxz Цитата(ivan24190 @ Feb 1 2017, 11:10) И в... Feb 1 2017, 09:18 ivan24190 Т.е. получается должен быть ведущий МК, я правильн... Feb 1 2017, 09:54 jcxz Цитата(ivan24190 @ Feb 1 2017, 11:54) Т.е... Feb 1 2017, 09:57 Lmx2315 Цитата(ivan24190 @ Feb 1 2017, 12:54) Т.е... Feb 2 2017, 10:37 ivan24190 Нет частота может меняться и задается пользователе... Feb 1 2017, 10:12 Plain Цитата(ivan24190 @ Feb 1 2017, 13:12) как... Feb 1 2017, 10:37 jcxz Цитата(ivan24190 @ Feb 1 2017, 12:12) Нет... Feb 1 2017, 10:41 Сергей Борщ QUOTE (ivan24190 @ Feb 1 2017, 11:10) оба... Feb 1 2017, 10:28 ivan24190 ПЕРВЫЙ и ВТОРОЙ вывод не соединены между собой, он... Feb 1 2017, 10:33 ivan24190 Plain, насчет единого времени, да пробел, но я тол... Feb 1 2017, 10:56 jcxz Цитата(ivan24190 @ Feb 1 2017, 12:56) Pla... Feb 1 2017, 11:21 ivan24190 jcxz, т.е. синхронизацию необходимо делать перед с... Feb 1 2017, 11:31 jcxz Цитата(ivan24190 @ Feb 1 2017, 13:31) jcx... Feb 2 2017, 08:44 jcxz Цитата(ivan24190 @ Feb 2 2017, 14:22) И к... Feb 2 2017, 13:25 BackEnd Цитата(ivan24190 @ Feb 1 2017, 09:10) 1) ... Feb 2 2017, 12:26 ivan24190 BackEnd, в качестве центрального модуля, собирающе... Feb 2 2017, 12:33 ivan24190 jcxz, так я же и прошу разъяснить, хотя бы в общих... Feb 2 2017, 13:52 jcxz Цитата(ivan24190 @ Feb 2 2017, 15:52) jcx... Feb 3 2017, 09:12 ivan24190 То что я многого не знаю, я не оспариваю, знал бы,... Feb 2 2017, 15:03 HardEgor Цитата(ivan24190 @ Feb 2 2017, 22:03) Нав... Feb 3 2017, 06:04 Plain Цитата(ivan24190 @ Feb 2 2017, 18:03) для... Feb 3 2017, 11:44 ivan24190 Plain, модули соединены через коммутатор Ethernet ... Feb 3 2017, 12:18
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|