Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Синхронизация на устройства
http://mcu-bg.com/mcu_site/viewtopic.php?f=4&t=15036
Страница 1 от 6

Автор:  emilvtc [ Чет Фев 02, 2017 10:24 am ]
Заглавие:  Синхронизация на устройства

Търся вариант за синхронизиране на часовниците на устройства (2 - 8 броя), които ще са свързани към компютър.
Става въпрос са логери, логващи събития и свързани към комп. Часовниците в устройствата ще се използват за тайм-стамп на логваните събития, като всички трябва да са синхронизирани в рамките на 1 микро секунда.

Всички устройства ще са близо едно до друго (15-25см макс) и ще са до компютъра.

Трафика от всяко едно от тях в пиковите моменти няма да надвишава 115.200 kbps, а консумацията ще е до 20-40мА @ 3.3V.

Въпроса е какъв интерфейс да използвам за връзка към комп-а и как да синхронизирам устройствата. (Ако интерфейса е USB ще мога да храня всички устройства от комп-а)

Всяко едно от тях ще е с проц работещ на няколко десетки MHz и ще има специално заделен за часовника таймер с кепчър-кампеър.

Идеята е броя на устройствата да се променя в различните варианти и веднъж може да е 1 (няма необходимост от синхронизация) до 8 (със синхронизация помежду им).

Допустимо е устройствата да имат връзка помежду си за синхронизация.

Идеята която ми се върти в главата е процесор с УСБ порт и много (8 бр) УАРТ интерфейси (не знам има ли такова чудо) да е като главен модул, а към него да се закачат различен брой модули в зависимост от нуждите. Връзката между модулите и главния ще е уарт на 115200 и отделно ще има сигнал за синхронизация от главното устройство към всички - на всяка секунда примерно.

Добре ще е всеки един от модулите също да може директно да се свърже към компютър и да работи самостоятелно без главния модул.

Приемам всякакви идеи ...

Автор:  miro_atc [ Чет Фев 02, 2017 10:55 am ]
Заглавие:  Re: Синхронизация на устройства

emilvtc написа:

Приемам всякакви идеи ...


Лъжеш, не приемаш всякакви ;-)

Решението ти е 1394... Там всеки линк има брояч с резолюция 1ns, броячите се синхронизират не помня с каква точност, но беше прилична. Стойността на брояча винаги може да я прочетеш, имаш и cycleout пин, който ако помня добре беше с честота 8Khz..
Няма значение колко устройства имаш и дали имаш компютър, като бонус обикновено между PHY и LLC-то имаш галванична изолация. Като софтуер е поне 1 порядък по-лесно от USB, само платката и чеповете са повече де...

Тъй де, няма да го направиш така...
Ако се спреш на USB, виж не помня кои STM-чета бяха имаха клок рековъри модул, демек за да спестиш кварца те слухтяха USB линията и от там вадеха клока. Така поне устройствата ти ще имат общ клок. Как обаче ще ги синхронизираш.... е друг въпрос ;-)

Автор:  marcuka68 [ Чет Фев 02, 2017 11:43 am ]
Заглавие:  Re: Синхронизация на устройства

Микроконтролер с УСБ и 8 УАРТ-а:
http://www.atmel.com/devices/ATXMEGA128 ... parameters
Макар тук бая хора да ги хулят.

Автор:  Pif [ Чет Фев 02, 2017 12:45 pm ]
Заглавие:  Re: Синхронизация на устройства

Ако държиш на 1 микросекунда - работата е доста сериозна. Ще се видиш в приключение и то голямо. Първо се замисли дали наистина ти трябва тази 1 микросекунда. После идва мастър клок и ПиЕлЕл-и за синхронизацията. С въшкав контролер няма да стане. Помисли за ФПГА. Става и с бърз контролер и външен ПЛЛ.
А тая 1 микросекунда ... сигурен ли си, че входния параметър може да го мериш с толкова голяма точност чисто хардуерно ?

Автор:  miro_atc [ Чет Фев 02, 2017 12:47 pm ]
Заглавие:  Re: Синхронизация на устройства

И друго се сетих за USB-то... може лесно да се детектва бъс ресета (двата сигнала нули за повече от 15mS), даже мисля че и без външен хардуер ще стане. Така че ти трябва само хъб с достъп до регистрите и е желателно ресетите за отделните портове да са в един регистър. Честно казано не знам дали в един регистър, знам че се клатят с бит, но теб ти трябва всички портове да се ресетнат синхронно. И от там ако клоците на устройствата са синхронизирани с хоста би трябвало да стане.

Автор:  Desert Leo [ Чет Фев 02, 2017 1:27 pm ]
Заглавие:  Re: Синхронизация на устройства

emilvtc написа:
...Часовниците в устройствата ще се използват за тайм-стамп на логваните събития, като всички трябва да са синхронизирани в рамките на 1 микро секунда.


PPS от един GPS към всички?

Автор:  emilvtc [ Чет Фев 02, 2017 3:56 pm ]
Заглавие:  Re: Синхронизация на устройства

Миро, това с ресетите на USB-тo не знам дали ще мога да го детектна толкова бързо в МЦУ-то.

Пиф, каква е идеята с ПЛЛ-ите? От общ "нискочестотен (4MHz примерно) клок разкаран до всички платки да получа с PLL-и клока за процесорите на всяка платка ли ?
Синхронизираните таймери ми трябват за тайм-стамп на логваните събития. Т.е. допустимо е в момента на събитието да се отчете (кепчне с кепчър) "неточният" таймер, след което да се направи софтуерно корекция на показанието му и тя да се използва за тайм-стамп-а.

Не ми се ще да разкарвам високочестотни клоци между платките заради шумове. Има намесени радиа в цялостната задача.

Ако ще разкарвам клок от мастера (1MHz примерно), то с него директно ще си клоча таймерите на процесорите външно. Не искам да правя това.

За това си мисля за вариант "мастера" (едно от всичките устройства) да клочи с хардуерен ПВМ или кампеар останалите с клок 1Hz примерно. Този клок да тригерира инпут кепчър на останалите контролери и така те да си коригират времената (по-скоро грешката) на часовниците (чисто софтуерно).

Ако мина на вариант USB - ще мога да храня устройствата от хъба. За съжаление устройствата освен към хъб-а ще трябва да са свързани и помежду си заради синхронизацията.

Миро, за съжаление устройствата не могат да се клочат от клока на USB-то (да го възстановяват). Инак тази ти идея + идеята с ресетите (ако е възможно да се генерират едновременни и детектнат от контролерите в рамките на 1uS) биха свършили работа ...

Desert Leo, GPS-a не е вариант в случая.

Автор:  Nikola Kirov [ Чет Фев 02, 2017 4:11 pm ]
Заглавие:  Re: Синхронизация на устройства

Ако не трябва всички устройства заедно да предават данни а е достатъчно само едно едновременно, не ти трябват 8 UART-a. Един стига. Просто го разпращаш до всички устройства. А обратната линия с OR.
И един клок сигнал от мастъра към всички. Синхронизацията, със спиранене на клока и повторно запускане,или просто още една линия за сихнхронизация.

Автор:  gicho [ Чет Фев 02, 2017 4:28 pm ]
Заглавие:  Re: Синхронизация на устройства

Погледни IEEE1588 (PTP) протокола - за етернет е. Идеята е някаква симбиоза от нещата, за които говорят колегите - всеки нод си има часовник, един е мастъра и чрез комуникацията се обменят данни за времето. Всеки часовник в слейвовете си има PLL с PI контролер за да следи точно и шумоустойчиво мастъра. Не е толкова леко, но е утъпкан път.
Индустриалният EtherCAT на Beckhoff ползва този механизъм (хардуер) и прави такива синхронизации като в един сегмент на мрежата лесно се постига +/-20ns jitter. Не е лесно да се ползва - мастъра може да е горе-долу произволен линукс с етернет (RPi например) но слейвовете са по-тежки - или FPGA и то не малко, или ASIC.
Една интересна опция са PRU-ISS на Sitara-та на тексас - те го имат (етеркета) и го постигат. Имаха на последния SPS/IPC Drives демо за техен real time етернет и там въртят още по-бързо и точно.
От приложна гледна точка в контролерите които имат EtherCAT имаш на разположение "глобалното" им време - 64 битово с резолюция 1нс. Типично хардуера (ASIC-а или каквото е там) вади строб импулси (output compare), можеш и да правиш input capture по този 64 битов таймер. Бекхоф имат една "технология" - XFC която е точно за такива приложения - прецизно времево мерене на събитие. Там са под 1мкс и циклични времена под 100мкс.
Майкрочип има не скъп (10-тина евра) ethercat чип който може да го играе слейв и да прави някой мерения (например хващане на времето на фронта). Но той иска външен хост процесор, т.е. откъм синхронизация ще получих към твоя контролер строб сигнал за началото на всеки цикъл (например всяка милисекунда) и регистър да разбереш 64-битовия таймстамп на този сигнал (дето всеки цикъл ще нараства с 1 милион наносекунди примерно).
Всъщност повечето индустриални етернети които се борят за real-time имат някакво подобно решение, даже повечето се базират все на 1588.
Ако се търси по-евтино решение (етеркетите са стотици евра на точка) може да се огледа какво има за IEEE1588 - доста чипове имат вече етернет с 1588 вграден, някой и phy-тата са им вътре и няма да е голямо затруднение. Не знам как стои въпроса откъм софтуер - преди съм ровил за PTP стек който да прави тези неща но не попаднах на нищо качествено (беше преди доста години). Чувам че линукса май имат нещо в тая посока - реално могат да синхронизират часовника. Но все пак е важно какво ще се мери преди да се прецени.
От отворените кодове е OpenPowerlink- той има също синхронизация, т.е. може да се скрадне нещо оттам.
Друго къстъм решение е да си пуснеш синхронизационен сигнал - например една усукана двойка и RS485 (или CAN) трансивъри. В такова система се постига лесно няколко мкс джитър, ако се постараеш и не са ти големи разстоянията сигурно и по-добре ще стане.
Виждал съм решения при които се гледат фронтовете на някакъв интерфейс - например SPI, или CAN. При CAN си има идеята за таймстамп, нормалните контролери при получено съобщение дават и таймстамп на момента на получаването (там е в бит времената т.е. на 1мбит може и под мкс да падне).

Автор:  Pif [ Чет Фев 02, 2017 5:51 pm ]
Заглавие:  Re: Синхронизация на устройства

Пътя е отдавна отъпкан. Ползва се в телевизията и в звукозаписната индустрия. Просто се иска по-сериозен хардуер. С мрежова синхронизация няма да стане. Не можеш да разчиташ на асинхронна мрежа каквато е едърнета за да синхронизираш синхронни процеси. Въпреки, че има опити реално зависиш от много устройства по средата. Дори "многото" устройства да са суич и кабели.
Помисли още веднъж наистина ли ти трябва 1 микросекунда и не можеш ли това всичкото да го правиш в едно устройство до което си докарал жиците от 8-те точки.
Вариянта с общ клок и ресет на процесорите е ... меко казано аматьорски. Може да пишеш на асемблер и да броиш инструкции след прекъсване и т.н. но пак до микросекунда не можеш да го докараш.
Кажи какъв е проекта и ще ти измислим нещо по-реализуемо.

Автор:  emilvtc [ Чет Фев 02, 2017 6:13 pm ]
Заглавие:  Re: Синхронизация на устройства

Гичо, много сложно ми се вижда всияко това. Търся прост и относително бърз вариант без много "шумящ" хардуер.

Никола, възможно е няколко устройства едновременно да кепчнат евент и да се опитат да го пратят към комп-а. За да ги арбитрирам през един УАРТ ще трябва да правя някакъв мултимастер протокол, което ще изисква и някаква такава поддръжка в ком-па. С просто OR няма да стане в моя случай.

Идеята за синхронизиране със спирането на клока ми хареса.
Ако се спра на варианта с USB-тата - то всяко устройство ще е свързано през хъб към компа.
Допълнително - ще набедим едно от устройствата (всички устройства ще са еднакви) да го играе "клок мастер" и да генерира клок към останалите. Този сигнал ще трябва да се свърже към всички платки. Разстоянието между това устройство и останалите ще е по-малко от 15-20см.
Клока ще се генерира чисто хардуерно от ПВМ или къмпеар на таймер и ще се свързан към инпут кепчър на всички останали устройства.

Та комп-а праща команда към устройство "1", което го играе като клок мастер да спре клока (който е на 1сек примерно). Две секунди след това всички устройства са детектнали липсата на клок и са минали в режим на синхронизация. Комп-а изпраща до всяко едно от тях времето на часовника си ЧАС:МИНУТИ:СЕКУНДИ до всички устройства през USB интерфейса, след което праща команда към устройство "1", което го играе като клок мастер да започне да ганерира клок от 1сек до всички устройства. При първия получен клок от устройствата - те ще ресинхронизират, а 1 сек след това (на вторият клок) вече ще са изчислили собствените си грешки и ще имат "синхронизирани" часовници.

Така ще има разлика между времето на комп-а и времето на часовниците на устройствата, но това не е проблем. Важно е да няма разлика между часовниците на устройствата.
На всяка секунда те ще мерят и изчисляват грешката си (за секунда) на собственият им клок спрямо този на клок мастера. Ако междувременно някое от тях бъде тригерирано от евент, то то ще отчете времето по собственият си часовник, ще го коригира (използвайки отчетената грешка) и ще прикерепи таим-стамп към евента. След това когато може ще предаде тази информация през USB-то към комп-а.
Софтуер в комп-а ще има грижата да преподреди приетите меседжи от устройствата по хронилогия съгласно тайм-стампите им.

Pif, идеята с ресета е (ако правилно съм разбрал) USB хъба да прати нещо като "брейк" по шината, а не да ресетира процесорите.

За съжалелие няма как 8-те евента да се обработват от 1 процесор. Ако можеше - процесор с 8 инпут къмпеара ми решава проблема (покрай инжекционите на автомобилите има такива предполагам).
Системата трябва да е разпределена. Трябва ми тази микросекунда. Евентите са с минимална продължителност 20 микросекунди и трябва да ги меря с точност поне 1 микро секунда.

Автор:  ike [ Чет Фев 02, 2017 6:37 pm ]
Заглавие:  Re: Синхронизация на устройства

emilvtc написа:
За съжалелие няма как 8-те евента да се обработват от 1 процесор. Ако можеше - процесор с 8 инпут къмпеара ми решава проблема

Какво по-точно представляват ивентите и какви са входовете в контролера?

Автор:  miro_atc [ Чет Фев 02, 2017 6:46 pm ]
Заглавие:  Re: Синхронизация на устройства

Емо, все пак погледни STM32L4x2 ...

Погледнах дейташита на един... данните (джитери и т.н.) са даже съмнително добри! Ако им се вярва на практика имаш пИрфектна синхронизация с точност под 4nS и имаш почти еднакви клокове във всички устройства и което е по-важно с тия 48MHz може да си клокваш каквато периферия искаш, включая 5Msps ADC-та...
Отделно CRS-a (Clock recovery system) може да ти прави евенти (с честота ~1KHz) и по тях да запускаш всякакви периферии (таймерите ако искаш прецизно отместване). Синхронизирането е по SOF, имаш и броя на фреймовете, който би трябвало да е еднакъв във всички устройства на шината...

Не мисля че може да се измисли по-добро решение... Аз бях гледал CRS-а но си го мислех като идея да се пести кварц-а, но реално чрез него може да се прави и синхронизация. Между другото не е само с USB, стига да имаш някакъв сигнал с точен период може да се синхронизираш с него...

Автор:  stefan63 [ Чет Фев 02, 2017 7:44 pm ]
Заглавие:  Re: Синхронизация на устройства

2-3 таймера по 32 бита с клок 5-10Мхц и умен алгоритъм ще са ти достатъчни,
и компът може и да е изключен.
Някой си "главен" има таймер,който препълва и пуска импулс при презареждане на секундата или четвъртинката на секундата. Тоя импулс кара "главния"да предаде времето с точност до секунда. Същият тоя импулс се приема от кепчърите на подчинените и ...следва умният алгоритъм за коригиране.

Автор:  Zdrav [ Чет Фев 02, 2017 10:32 pm ]
Заглавие:  Re: Синхронизация на устройства

emilvtc,
Понеже устройствата явно само събират данни и не управляват процеси, които искат освен синхронизация и ниска латентност на процеса на синхронизация, помисли дали не е по-добре централното устройство, което събира данните да поддържа статистика за разминаването между неговия и часовниците на всички "събирачи на данни".
Нямаш спиране пускане на таймери. Всеки си логва данните по неговия клок. Само на определен период разменя и поредица съобщения с централното устройство. В тези съобщения има тройки от таймщампи {на централата при изпращане, събирача при получаване, централата при получаване на отговора}. Следва прост алгоритъм за намиране на отместване и съотношение на клоковете на централното устройство и съответния "събирач". После централното устройство минава и коригира таймщампите на получените от събирача данни.

Страница 1 от 6 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/