Jen co jsem dopsal minulý článek o blbuvzdornosti v robotice napadlo mně, že jsem zrazoval četnáře jak od přílišné důvěry v bezdrátové komunikace taky v použití některých typů sběrnic – zejména tedy I2C. Ani jedno z toho jsem podrobněji nevysvětlil, takže je na čase to probrat.
Minule jsme tedy brali blbuvzdornost hardwarovou, dnes to bude blbuvzdornost datově – komunikační a dokonce rozdělena na drátovou a bezdrátovou složku.
Drátová blbuvzdornost:
Robotici jsou mentalitou programátoři a mají silnou tendenci k dekompozici velké úlohy na menší – takže je brzy napadne sestavit robota jako hromadu vzájemně komunikujících hardwarových modulů. Ne že bych tento přístup nedoporučoval, ale znovupoužitelnost a samostatná odladitelnost modulů, kterou od toho čekají většinou nenastane. Druhá možnost – stavět „jenoprocesorové“ roboty – znamená že – co robot to nový hardware a to je příliš pracné. Takže rozložit robota na 2-3 desky typu – řízení motorů – řízení čidel – vyšší inteligence – je plně obhajitelné a rozumné.
Jednotlivé desky samozřejmě budou komunikovat pomocí nějaké sběrnice – a první se nabízí RS232 buď v původních nebo v TTL napěťových úrovních – každý brzy zjistí, že RS232 je ideální pro spojení dvou modulů – point to point, ale jako opravdová „sběrnice“ na které „visí“ moduly se použít nedá.
Během úvodní rekognoskace se každý seznámí s I2C (obrázek nahoře), která se povrchním pohledem jeví jako ideální – je multimaster, umožňuje připojit až 128 modulů a dokonce ji velké firmy používají pro řízení hlasitosti a přepínání programů v rádiích a televizorech. Do robotů se však zcela nehodí, protože je v příkrém rozporu s mnou již zmiňovaným vedením signálu „na nízké impedanci“.
Když se totiž podíváte na schémátko zjistíte, že napětí na sběrnici udržují jenom odpory – Rp = 4K7 a ty klidně připustí indukci i dosti velkého rušení do sběrnice. Stejně opakovaně říkám, že I2C v robotech nefunguje a pak opakovaně poslouchám – když se pustí motory tak jdou do procesoru blbosti – pokud jdou přes I2C tak víte proč.
Sběrnice pro roboty nutně musí být odolná proti rušení a tudíž je výhodné pokud je diferenciální. Pro zajímavost seznam zkratek dnes používaných diferenciálních sběrnic – Ethernet, PCIe, SATA, AGP, LVDS, DVI, HDMI, USB, SPDIF, RS422, RS485, CAN, robbus ;-)) – skoro všechny dnes používané sériové sběrnice jsou diferenciální – proč tomu tak je? Kvůli odolnosti proti rušení a dík tomu možnosti zvyšovat rychlost komunikace (skoro) do nekonečna.
Při diferenciální komunikaci totiž posíláte data současně dvěma dráty – v jednom jdou v přímé a ve druhém v invertované formě a to nejlépe tak že oba drátky jsou zakroucené do spirály a stíněné. Díky zakroucení do spirály, a stínění je schopnost elektromagnetického vlnění indukovat proudy v drátech minimální, ale to není to kouzlo – to kouzlo spočívá v tom, že na přijímací straně sledujete ROZDÍL v signálech a protože rušení se většinou indukuje do obou drátů stejně – v přijímači se beze škod odečte….
Takže nebudu vás nutit používat žádnou konkrétní sběrnici, ale ať je diferenciální. My „kluci co se spolu bavíme“ už delší dobu používáme robbus což je vlastně automobilový CAN jenom s naším vlastním protokolem. Protokol řeší další věci, které jsem nezmínil, ale které jsou stejně důležité – datové pakety musí mít kontrolní součet a přijímač musí vadné pakety ignorovat, musí existovat systém adresace modulů, systém znovu-poslání vadné zprávy, systém PING – jak otestovat komunikaci atd. to všechno mají kluci vyřešené, já jsem jenom před 5 lety křičel jako siréna diferenciální sběrnice !!!!, diferenciální sběrnice !!!! až vznikla psychóza, že robot bez ní je jako blondýna bez iPhonu.
Jako už tradičně jsem přecenil své možnosti, takže bezdrátovou blbuvzdornost probereme příště.
Stejně tak ještě tradiční rada pro blondýny – v létě jsou bílé minišatičky na opáleném těle velice sexy, dávejte si ale pozor na zimní opalování v soláriích, ať ve 30 neskončíte jako vyschlé škeble.
Článek byl s laskavým svolením autora převzat z jeho blogu.