MESA karty a vlastní firmware

fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

21. 1. 2016, 9:45

robokop píše:uvazuju o pouziti
The 7I84 is a remote isolated 32 input and 16 output digital I/O card. The 16 outputs are 5VDC to 28VDC sourcing drivers with 300 mA maximum current capability.
vpodsate to odpovida tem obecnym IO na 7i76 nebo 7i77

uplne jsem nepochopil jak ten sserial funguje v tomhle ohledu
jestli je teda potreba prekompilovat firmware v 5i25 pro podporu tyhle karty nebo jestli je ta seriova linka predana do systemu a resena softwarove a je tam nejaka autodetekce

jinak jak tu uz bylo zminene existuji ruzne zpusoby jak prijit k dalsim IO treba pomoci rs232 - modbus - prumysloveho LPC nebo IO modulu
ten mesackej smartserial ale asi bude rychlejsi a jak jsem tak koukal vychazi to +- cenove podobne, teda bych to nejak neprekombinovaval ale zustal u mesy a seriak s modbusem si nechal na menic
Nejsem si uplne jistej jestli je 7i84 zakomponovana do podpory přes sserial, ale asi to ma stejny piny jako 7i76, takze by to mělo jit pouzit.
Obecne to funguje tak, ze pokud chces pouzit sserial, tak musíš vygenerovat novej firmware definovat na kterých pinech zakladni karty pobezi serial komunikace a ten nahrat do karty, pak uz tam při prvním spusteni bezi autodetekce sserialovejch karet a podle toho vzniknou novy piny. Pro kazdou rozsirujici sserial kartu potrebujes samostatnou sadu TxD RxD.
něco jako
14 bit OUT FALSE hm2_5i25.0.7i84.0.1.input-00
14 bit OUT TRUE hm2_5i25.0.7i84.0.1.input-00-not
14 bit OUT FALSE hm2_5i25.0.7i84.0.1.input-01
14 bit OUT TRUE hm2_5i25.0.7i84.0.1.input-01-not
14 bit OUT FALSE hm2_5i25.0.7i84.0.1.input-02
14 bit OUT TRUE hm2_5i25.0.7i84.0.1.input-02-not
14 bit OUT FALSE hm2_5i25.0.7i84.0.1.input-03
.....
.....
M
fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

21. 1. 2016, 9:53

CZ_Pascal píše:Ahoj,

Já bych rozhodně o Tvé poznatky stál :!:
Mám v plánu (už tedy pár let vzhledem k nedostatku času) si firmware trochu poupravit a napsat si vlastní komponenty pro nějakou seriovou komunikaci s okolím, A to třeba pro přenost pomalejších analogových signálů atd, kde je trochu těžkopádné valit to přes enkodéry a PWM (jak to dělám teď).
Stejně tak rozhraní RS485 pro komunikaci s invertorem bez použítí různých USB<->RS485 udělátek.

Pro StepGeny chci dopsat skutečnou akceleraci mezi jednotlivými pulzy (momentálně je skokově řízena rychlost v rámci servosmyčky) což znesnadňuje inteligentnějším systémům StepDir si akceleraci dopočítat na základě vstupních dat (akcelerace je totiž skoková - skok každou servoperiodu) a podle toho využít různé FeedForward vyšších řádů atd..

Je potřeba napsat jak firmware tak i HAL moduly aby se to spolu "bavilo" ale jelikož jsem pouze příležitostný bastlič VHDL tak mi dlouho trvá než prokouknu různé finty s generickým generováním komponent atd...

Předem moc díky.
Tak takhle daleko jsem se nedostal, chvili sem si hral s myslenkou napsat pro mesu obecnejsi I2C komunikaci, ale vzdal sem to z nedostatku casu a zkusenosti. Respektive obesel sem to tak, ze veškerou komunikaci obstarava vlastní I2C HAL modul a MESA funguje pouze jako hloupy zprostredkovatel dvou PINu.
Spis sem to myslel jako navod na vygenerovani vlastního firmwaru tak, aby sedely piny na rozsirujicich kartách, kde kazda karta to ma jinak nebo třeba vyhazet encodery a pridat si stepgeny nebo obecne IO. A samozrejme jak uz bylo uvedeno pouzit SSerial karty,ktery zatím nejsou obsaženy v prilozenych firmwarech.

M
martyxxx
Příspěvky: 195
Registrován: 16. 10. 2008, 9:19
Bydliště: Praha

21. 1. 2016, 10:24

Něco k sserial interface na Mesa kartách. Ten sserial je poměrně šikovná možnost jak rozšířit počet vstupů/výstupů a to digitálních i analogových, popř. připojit i zákaznický hardware. Já jsem si s tím hrál na 5i25, takže trochu popíšu, jak je to tady. Využít sserial lze několika způsoby. Mám např. rozšiřující kartu 7i76, která má volný jeden sserial port (to jsou ty piny TX+, TX-, RX+, RX-) a chci rozšířit počet digitálních vstupů/výstupů. Pokud si příslušnou desku neumím navrhnout sám, můžu použít třeba kartu 7i69. Není pak třeba nic kompilovat, stačí že má 5i25 firmware pro 7i76. Při najetí systému se při inicializaci přes sserial zjistí, že je tam něco připojené, přenesou informace o tom kolik a jaké typy vstupů/výstupů rozšiřující karta přináší (v tomto případě 7i69) a taky název karty, abych pak věděl kam ty vstupy/výstupy patří. Pokud umím navrhnout a naprogramovat rozšiřující kartu sám, je možné přes sserial připojit takřka cokoliv. Limit na jednu rozšiřující kartu je 96 bitů dat, které můžu vyslat nebo přijmout jednom cyklu. Pokud je potřeba více bitů, je třeba použít více rozšiřujících karet, každá může přidat max. těch 96 bitů. Nemusím ani použít 7i76, stačí mi, že je 5i25 takto nakonfigurovaná a mohu svoji navrženou kartu připojit přímo na konektor 5i25 na příslušné piny. Pokud si někdo bude chtít navrhnout vlastní desku, pak popis protokolu sserial je třeba v manuálu k 7i76, ale je třeba pohledat i na netu, ne vše je z toho jasné. Doporučuji se podívat tady: http://www.cnczone.com/forums/linuxcnc- ... 422-2.html" onclick="window.open(this.href);return false; , kde jsem to trochu řešil. Maník z MESY slíbil, že chybějící info v manuálu doplní, ale mám pocit, že dodnes na to nešáhli, možná se mýlím, nekoukal jsem teď na to. Nicméně s tímto a manuálem 7i76 lze kartu na sserial rozběhat.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22385
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

21. 1. 2016, 11:27

Tu aliexpresovou plc kartu jsem bral jako uvahu
Mel by to byt standardni modbus s definovanymi registry
Je to klon mitsubishi plccek

Diky za info k sserial
To jsem potreboval vedet
Mam treba kombinaci 5i25 + 7i77 a na 7i77 je prave ten sserial vyvedenej dal tak bych to vyuzil na dalsi kartu s io
To ze se to autodetekuje je veliky plus
Vsechna prava na chyby vyhrazena (E)
fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

21. 1. 2016, 1:01

Tak jsem se pustil do sepisování.

Začnu trochou omáčky okolo, třeba si v tom neznalý situace udělají trochu jasno a ty co tomu rozumí můžou přeskočit.

Mesa používá nekolik typu FPGA polí, kontrétně tuším Spartan II Spartan 3 a Spartan 6 a dalsi. Z toho plynou určitá omezení v použití vyvojového prostředi od Xilinxu a to takova, že verze vyssi nez 10.x neumí kompilovat firmware pro Spartan II. Naopak pro kompilaci firmw. novejsich karet je potreba pouzit verzi 11 a nahoru.
Zkoušel sem ruzné verze a nakonec se mi osvědčili 10.1 a 13.4. S nejnovější 14.7 sem mel problémy s 9 taky. V návodu popíšu obě, ale samozřejmě stačí instalovat ta pro vaší kartu.

Dál je asi potřeba vysvětlit zkratky v popisu firmware.

SS = Smart Serial
TP = Třífázové PWM
RS = Resolver
UA = UART
SV = servo
ST = stepgen
a další jako FA TW který sem ještě nezkoumal.

Takže vlastní soubory firmware pro MESA karty jsou v LINUXCNC uloženy v adresáři /lib/firmware/hm2/ nasledují podadresáře podle jména karty jako 5i22 4i65 7i43 atd. a vnich jsou ulozeny vsechyn potrebne soubory.

vlastni firmware v binarnim tvaru s koncovkou BIT
xml soubor pro PNCCONF, aby veděl co má kam nastrkat
a někdy i soubor PIN kde je popsáno co na kterým pinu hledat. Tenhle soubor neni na nic jinýho nez pro přehlednost, zadný system ho nepotrebuje.

Takže například soubor SVSS8_16_96.BIT říká že obsahuje 8xSV to znamená 8x encoder + 8x pwm a 16x SSerial (2x8) a ta 96 na konci znaci ze je to generovano pro karty, ktere maji 96 IO pinu. Například 5i22
Toto značení se bude hodit dál pro hledáni správneho souboru pro kompilaci.

Toliko kecy na uvod a přejdem k samotnému návodu.
Testoval jsme to na dvou strojích, jeden byl virtual ve vmware a druhej fyzicka mašina s kartou 5i22-1.5 na testováni hotovych výrobků. Na obou strojích beží debian wheezy http://www.linuxcnc.org/linuxcnc-2.7-wheezy.iso" onclick="window.open(this.href);return false;

Jako první stáhneme git repozitář s vlasním softem

git clone git://git.linuxcnc.org/git/hostmot2-firmware.git" onclick="window.open(this.href);return false; ~/hostmot
v něm je vše potřebné

ted je potřeba nainstalovat vyvojové prostředí Xilinxu. Bacha ma to dohromady asi 10G

instalace 13.4

tady to jde stahnout

http://www.xilinx.com/support/download/ ... chive.html

přímo link na instalačku jak pro win tak pro Linux.
https://secure.xilinx.com/webreg/regist ... xd.3.0.tar

tar -xvf Xilinx_ISE_DS_13.4_O.87xd.3.0.tar

cd Xilinx_ISE_DS_13.4_O.87xd.3.0

sudo ./xsetup


pri instalaci vyberte pouze webpack. to je ta cast kterou potrebujem a je zadarmo. Je ale potreba se registrovat aby vam přišel licenční soubor.
Na konci instalace se to tuším ptá, kde je tento lic soubor uložen.
Parkrat se mi stalo, že soft pri kompilaci nejak zapomnel, ze sem mu daval cestu na licencni soubor a tvrdilo to, ze neni zalicencovano.
Pak je idealni soubor Xilinx.lic kterej vam prijde postou nakopirovat do adresare ~/.Xilinx Tam ho hleda jako prvni.


http://www.xilinx.com/getlicense

takhle se dá ověřit že instalace proběhla dobře

. /opt/Xilinx/13.4/ISE_DS/settings32.sh
ise

mělo by naskočit vývojové prostředí a když si kliknete na Help / About je vidět jestli je produkt registrován


následuje popis instalace starší verze 10.1


https://secure.xilinx.com/webreg/regist ... ISE_DS.tar
tar -xvf webpack_SFD_10.1.tar
cd webpack/
sudo ./setup

Tahle verze nechce licenční soubor ale vygenerovany klíč, který opět ziskáte na stránkach Xilinxu. Neptejte se mě ale na postup, to už si nepamatuju a nehodlám to dělat podruhé.

opět ověření funkčností
source /opt/Xilinx/10.1/ISE/settings32.sh
ise

help/about/regisstration ID:xxxxxxxxx


když máme obě vývojový prostředí je ještě potřeba nainstalovat GHDL
GHDL je VHDL simulátor používající GCC, přičemž VHDL je jazyk pro vývoj elektronických systémů. Říká internet :-)

wget http://ghdl.free.fr/site/uploads/Main/g ... latest.tar" onclick="window.open(this.href);return false;

tar -xvf ghdl-i686-linux-latest.tar

cd ghdl-0.29-i686-pc-linux/
tar -C / -jxvf ghdl-0.29-i686-pc-linux.tar.bz2

to nahrne vše potřebné někam do systému a můžem vesele kompilovat.

ted už se stačí jen přepnout do adresaře hostmot kam jsme nalili repozitář a tvořit.
vlastní kompilace se spustí příkazem
make
ale to by generovalo všechny předpřipravený firmwary a je to na nekolik hodin.
mnohem lepší je si vytvořit nový soubor firmwares-local.txt a do nej nahazet jen to co chceme kompilovat.
např.

i22_1500 4x7I65_96
i22_1500 SVSS8_16_96

kde první položka je jmeno karty a druhá položka názeb vhd souboru zacínajici PIN_xxxxx ale prave bez toho PIN s definicí toho co ma firmware obsahovat.
když spustíte přikaz
./build.py
vypíše to seznam dostupnych karet a seznam hotovych vhd souborů. neco jako

Available cards: i20 i22_1000 i22_1500 i23 i24 i25 i43_200 i43_400 i65
i68 i80db16 i80db25 i80hd16 i80hd25 i90epp i90spi x20_1000
x20_1500 x20_2000

Available pinouts: 24XQCTRONLY_72 2X7I65_72 2X7I65_7I44_72
3x7I65_1x7I44_96 4x7I65_96 7I65_7I44_72 7I74_7I76_34
7I74_7I77_34 7I74x2_34 7I74x4_68 7I76E_51 7I76P_7I76_34
7I76_34 7I76_7I74_34 7I76_7I78_34 7I76_7I85S_34 7I76_7I85_34
7I76x2R_34 7I76x2_34 7I76x2_7I74x2_68 7I76x2_7I77x2_68
7I76x2_biss_34 7I76x2_ssi_34 7I76x3_68 7I76x3_7I74_68 7I77E_51
7I77_72 7I77_7I74_34 7I77_7I74_34_toromatic 7I77_7I74_SSI_34
7I77_7I74_SSI_FANUC_34 7I77_7I76P_34 7I77_7I76_34 7I77_7I78_34
......
..........
.......


Do začátku je asi dobrý si najit co nejpodobnější vhd soubor tomu co potřebujete, zkopirovat si ho pod jine jmeno, upravit a pak kompilovat.
Na začátku vhd souboru je položka package a ta se musí jmenovat stejne jako soubor samotny bez koncovky. to samy je pak na konci souboru (end package)

doporučuju si projít nejaky vhd soubory a pochopit logiku skládaní
v podstate na začátku modulu se vyjmenujou jednotlivý komponenty s uvedenym poctem kusu a v dalsi sekci se pak nadefinuje, kde má která komponenta vyvody ven.

(WatchDogTag, x"00", ClockLowTag, x"01", WatchDogTimeAddr&PadT, WatchDogNumRegs, x"00", WatchDogMPBitMask),
(IOPortTag, x"00", ClockLowTag, x"03", PortAddr&PadT, IOPortNumRegs, x"00", IOPortMPBitMask),
(MuxedQcountTag, MQCRev, ClockLowTag, x"06", MuxedQcounterAddr&PadT, MuxedQCounterNumRegs, x"00", MuxedQCounterMPBitMask),
(MuxedQCountSelTag, x"00", ClockLowTag, x"01", NullAddr&PadT, x"00", x"00", x"00000000"),
(SSerialTag, x"00", ClockLowTag, x"01", SSerialCommandAddr&PadT, SSerialNumRegs, x"10", SSerialMPBitMask),
(LEDTag, x"00", ClockLowTag, x"01", LEDAddr&PadT,
.
.
.
.
.
IOPortTag & x"00" & PWMTag & PWMAOutPin, -- I/O 11
IOPortTag & x"00" & PWMTag & PWMBDirPin, -- I/O 12
IOPortTag & x"01" & PWMTag & PWMAOutPin, -- I/O 13
IOPortTag & x"01" & PWMTag & PWMBDirPin, -- I/O 14
IOPortTag & x"02" & PWMTag & PWMAOutPin, -- I/O 15
.
.
.
.

tohle asi nemá cenu popisovat do detailu, tim uz se musi kazdej prokousat sam.

Takže když to všechno uděláte správně a spustíte přikaz make, tak to bude tak 15 minut chroupat a nakonec z toho vylezou tři soubory popisovane na začátku.
jsou uloženy v podsložce fw/nazev karty
*.BIT
*.xml
*.PIN

a ty pak stačí nakopirovat do patřičného adresaře kde je linuxcnc hledá a je to.

cd fw/5i22-1.5/
cp * /lib/firmware/hm2/5i22-1.5/

Samozřejmě že záleží na velikosti vnitřní paměti fpga pole , takže třeba do 5i20 se toho moc nevejde. Zkoušel sem tam dostat SSerial plus nejaky stepgeny a nakonec sem musel skoro všechno vyhazet.
Během kompilace to píše jak je to velky a kolik to čeho žere, takže když to skončí errorem a napiše obsazenost 156% je jasny kde je chyba.
Takhle nejak to vypada.

Device Utilization Summary:

Slice Logic Utilization:
Number of Slice Registers: 7,045 out of 30,064 23%
Number used as Flip Flops: 7,045
Number used as Latches: 0
Number used as Latch-thrus: 0
Number used as AND/OR logics: 0
Number of Slice LUTs: 9,583 out of 15,032 63%
Number used as logic: 9,002 out of 15,032 59%
Number using O6 output only: 6,157
Number using O5 output only: 112
Number using O5 and O6: 2,733
Number used as ROM: 0
Number used as Memory: 530 out of 3,664 14%
Number used as Dual Port RAM: 412
Number using O6 output only: 64
Number using O5 output only: 2
Number using O5 and O6: 346
Number used as Single Port RAM: 0
Number used as Shift Register: 118
Number using O6 output only: 34
Number using O5 output only: 0
Number using O5 and O6: 84
Number used exclusively as route-thrus: 51
Number with same-slice register load: 41
Number with same-slice carry load: 10
Number with other load: 0

Slice Logic Distribution:
Number of occupied Slices: 3,096 out of 3,758 82%
Nummber of MUXCYs used: 3,332 out of 7,516 44%
Number of LUT Flip Flop pairs used: 10,284
Number with an unused Flip Flop: 4,530 out of 10,284 44%
Number with an unused LUT: 701 out of 10,284 6%
Number of fully used LUT-FF pairs: 5,053 out of 10,284 49%
Number of slice register sites lost
to control set restrictions: 0 out of 30,064 0%


Ještě poznámka na závěr. Celý to je ve stádiu vývoje a občas se něco dodělává, když budete chtít poslední verzi stačí v adresari hostmot spustit
git pull
a vse se dotahne na poslední verzi
evidentne jeste nemaj doladeny názvosloví, protože právě pro SSerial karty to pojmenovavá piny jinak než PNCCONF očekává, takže je z toho zmatenej.
Ale stačí ručně zeditovat soubor idrom_tools.vhd kde se nachazejí definice nazvu pro xml soubor
řádky začínající minusem nahradit těmy co začínají plusem. Puvodne tam byla definice jen pro 5 sserialu ja sem ji upravil a rozšířil na 8 kusu.

------------------------------- idrom_tools.vhd -------------------------------

- if(pin = SSerialTX0Pin) then return "Serial Transmit 0 (out)";
- elsif(pin = SSerialTX1Pin) then return "Serial Transmit 1 (out)";
- elsif(pin = SSerialTX2Pin) then return "Serial Transmit 2 (out)";
- elsif(pin = SSerialTX3Pin) then return "Serial Transmit 3 (out)";
- elsif(pin = SSerialTX4Pin) then return "Serial Transmit 4 (out)";
- elsif(pin = SSerialTX5Pin) then return "Serial Transmit 5 (out)";
- elsif(pin = SSerialTXEN0Pin) then return "Serial Transmit Enable 0 (in)";
- elsif(pin = SSerialTXEN1Pin) then return "Serial Transmit Enable 1 (in)";
- elsif(pin = SSerialTXEN2Pin) then return "Serial Transmit Enable 2 (in)";
- elsif(pin = SSerialTXEN3Pin) then return "Serial Transmit Enable 3 (in)";
- elsif(pin = SSerialTXEN4Pin) then return "Serial Transmit Enable 4 (in)";
- elsif(pin = SSerialTXEN5Pin) then return "Serial Transmit Enable 5 (in)";
- elsif(pin = SSerialRX0Pin) then return "Serial Receive 0 (in)";
- elsif(pin = SSerialRX1Pin) then return "Serial Receive 1 (in)";
- elsif(pin = SSerialRX2Pin) then return "Serial Receive 2 (in)";
- elsif(pin = SSerialRX3Pin) then return "Serial Receive 3 (in)";
- elsif(pin = SSerialRX4Pin) then return "Serial Receive 4 (in)";
- elsif(pin = SSerialRX5Pin) then return "Serial Receive 5 (in)";

+ if(pin = SSerialTX0Pin) then return "TXData1 (out)";
+ elsif(pin = SSerialTX1Pin) then return "TXData2 (out)";
+ elsif(pin = SSerialTX2Pin) then return "TXData3 (out)";
+ elsif(pin = SSerialTX3Pin) then return "TXData4 (out)";
+ elsif(pin = SSerialTX4Pin) then return "TXData5 (out)";
+ elsif(pin = SSerialTX5Pin) then return "TXData6 (out)";
+ elsif(pin = SSerialTX6Pin) then return "TXData7 (out)";
+ elsif(pin = SSerialTX7Pin) then return "TXData8 (out)";
+ elsif(pin = SSerialTXEN0Pin) then return "TXEn1 (in)";
+ elsif(pin = SSerialTXEN1Pin) then return "TXEn2 (in)";
+ elsif(pin = SSerialTXEN2Pin) then return "TXEn3 (in)";
+ elsif(pin = SSerialTXEN3Pin) then return "TXEn4 (in)";
+ elsif(pin = SSerialTXEN4Pin) then return "TXEn5 (in)";
+ elsif(pin = SSerialTXEN5Pin) then return "TXEn6 (in)";
+ elsif(pin = SSerialTXEN6Pin) then return "TXEn7 (in)";
+ elsif(pin = SSerialTXEN7Pin) then return "TXEn8 (in)";
+ elsif(pin = SSerialRX0Pin) then return "RXData1 (in)";
+ elsif(pin = SSerialRX1Pin) then return "RXData2 (in)";
+ elsif(pin = SSerialRX2Pin) then return "RXData3 (in)";
+ elsif(pin = SSerialRX3Pin) then return "RXData4 (in)";
+ elsif(pin = SSerialRX4Pin) then return "RXData5 (in)";
+ elsif(pin = SSerialRX5Pin) then return "RXData6 (in)";
+ elsif(pin = SSerialRX6Pin) then return "RXData7 (in)";
+ elsif(pin = SSerialRX7Pin) then return "RXData8 (in)";

To je celé.

Existuje i jina cesta, jako třeba použit přímo grafické vývojové prostředí v něm poupravit vhd soubory a generovat bit file, ale pak to negeneruje xml soubory. Tohle mi připadá elegantnější a jednodušší.
Víc mě ted nenapadá. Případně to můžu časem doplnit.


M
Uživatelský avatar
CZ_Pascal
Příspěvky: 870
Registrován: 14. 1. 2008, 8:24
Bydliště: Brno

23. 1. 2016, 7:41

fupe píše:Tak jsem se pustil do sepisování.
Děkuji že sis udělal čas a popsal postupy které ti zafungovaly.
Zatím je to spíše začátek jak vlastně "přeložit" zdrojáky do použitelné "binárky".
Pokud bys měl co říct i k vlastnímu obsahu zdrojáků "VHDL kódu" tak budeme rádi.
Já jsem se v tom před časem trochu snažil zorientovat, ale proto aby to bylo co nejvíce univerzální je to zabaleno do spousty balastu pro automatické generování jednotlivých komponent, čímž není jednoduché se prokousat. Pokud bys popsal třeba tuto část tak by to byl fajn odrazový můstek.
martyxxx píše: Pokud umím navrhnout a naprogramovat rozšiřující kartu sám, je možné přes sserial připojit takřka cokoliv. Limit na jednu rozšiřující kartu je 96 bitů dat, které můžu vyslat nebo přijmout jednom cyklu. Pokud je potřeba více bitů, je třeba použít více rozšiřujících karet, každá může přidat max. těch 96 bitů. Nemusím ani použít 7i76, stačí mi, že je 5i25 takto nakonfigurovaná a mohu svoji navrženou kartu připojit přímo na konektor 5i25 na příslušné piny. Pokud si někdo bude chtít navrhnout vlastní desku, pak popis protokolu sserial je třeba v manuálu k 7i76, ale je třeba pohledat i na netu, ne vše je z toho jasné. Doporučuji se podívat tady: http://www.cnczone.com/forums/linuxcnc-" onclick="window.open(this.href);return false; ... 422-2.html , kde jsem to trochu řešil. Maník z MESY slíbil, že chybějící info v manuálu doplní, ale mám pocit, že dodnes na to nešáhli, možná se mýlím, nekoukal jsem teď na to. Nicméně s tímto a manuálem 7i76 lze kartu na sserial rozběhat.
Byl bys ochoten popsat trochu více základy a hlavní principy toho jak vůbec začít ? Přecejen ten popis v manuálu je docela obsáhlý a není jednoduché se zorientovat. Chtělo by to něco naprosto primitivního jako odrazový můstek pro vlastní pokusničení a dalšího nabalování fukčnosti. Třeba jak vůbec funguje vlastní komunikace na HW úrovni (je to prostě jednoducchý asynchronní přenos po dvou párech datových linek pro každý směr ? Jaké je naprosté minimum pro přijetí a odeslání nějakého "příkazu" nebo "datového paketu". Je potřeba dopočítat CRC ? Z jakých dat se počítá ? Pochopil jsem že je nějaká paketizace dat oddělená "časovou mezerou" atd. Dá se použít nějaký USART v mikroprocesoru pro HW vrstvu komunikace ?)

Možná by bylo lepší začít tím SmartSerrialem než se pouštět do modifikace Firmware v FPGA MESY.
Třeba by hodně napověděly nějaké části tvého SW+HW řešení pro pochopení základů ?

Dík moc
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22385
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

23. 1. 2016, 8:37

Pro doplneni 7i77 je napul oddelovaci deska primo pinu 5i25ky
A napul sserial karta pro rozsirujici io
Deska obsahuje par logickejch obvodu, nejake napajeni
Nejake spinace pro ty silovejsi vystupy 300mA
A dva picy dspic33FJ16GS
Az bude vic casu muzu poslat podrobnejsi info
Vsechna prava na chyby vyhrazena (E)
martyxxx
Příspěvky: 195
Registrován: 16. 10. 2008, 9:19
Bydliště: Praha

23. 1. 2016, 2:13

Něco k tomu napsat mohu, jde spíš o to, že jsem na tom dělal cca před dvěma lety a ne vše mám momentálně v živé paměti. Já teď dodělávám mechaniku frézky a k těm deskám, co jsem navrhl se počítám letos ještě vrátím, protože pár věcí do software příjde ještě dodělat, nicméně desky jako takové fungují a komunikují s linuxcnc jak mají. Jo, manuál je obsáhlý a dost nepřehledný a musím říct, že mi docela trvalo, než jsem pochopil, jak to mají dělané. To neznamená, že by vlastní komunikace po sserialu byla nějak složitá, naopak je to vcelku jednoduché, jenže ten manuál bohužel přehlednosti nijak nepřidává a pár důležitých věcí tam chybí. Samotná komunikace probíhá po standardní sériové asynchronní lince, není to přímo RS232, ale diferenciální RS422, ale to je víceméně totéž z hlediska komunikace, jen se to liší elektricky, ale to nemusím asi nikomu, kdo by byl schopen sám si kartu navrhout vysvětlovat :-). Tady to musím trochu upřesnit, na konektoru 5i25 to diferenciální není, takže pokud stavím kartu pro připojení rovnou k 5i25, tak je tam samozřejmě jen TX a RX, já jsem je na desce galvanicky oddělil přes ADUM3211. Jako standard RS422 to pak jde ven z desek jako 7i76, 7i77 a dalších, a tak jsou pak připojeny rozšiřující karty, které se připojují na tyto desky, které umožňují rozšíření přes sserial. Lze tedy použít cokoliv s UARTem, ale musí to být dostatečně rychlé. Já jsem použil podobně jako Mesa DSPIC, konkrétně DSPIC33EP128GP504. Komunikace běží na 8-bit, 1 stop bit bez parity a baudrate je myslím 2.5Mbit. Přenos je zabezpečen 8-bit CRC s polynomem x8+x5+x4+x0 (jako Maxim-Dallas 1-wire sběrnice). Já používám kartu 5i25 s firmware pro 7i76 na jednom portu a 7i77 na druhém portu. Aktivní (tj. s procesorem je pouze karta na místě 7i76). Konfigurace 7i76 přináší 5x STEP/DIR a 2x sserial + 1x encoder. MESA používá 1x sserial pro i/o na 7i76 a jeden port je vyveden pro rozšíření z vnějšku. Já mám na tom 2x sserial pověšené vstupy pro koncové a referenční spínače, pár obecných vstupů a výstupů a 6x 14-bit DAC. K tomu je tam 5x STEP/DIR, konektory pro drivery se pak dají nastavit jak na anologový výstup, tak i STEP/DIR. Signály pro encoder mám v úmyslu použít pro rozšiřující sserial, na to je tam ten RJ-45 konektor, ale to bude znamenat úpravu firmware pro 5i25, což jsem zatím neřešil. Druhá karta je v módu 7i77, ta přináší 6x vstup pro encoder (resp. 3x - je to multiplexované) + 3x sserial. Je pasivní, takže bez procesoru, MESA má na sserial I/O, já mám všechny tři sserialy vyvedené na RJ-45 konektory.
Teď k vlastní komunikaci. Ta se sestává ze dvou částí, první je inicializace a pak tzv. "data discovery", kdy se zjišťuje co je na sserialu vlastně pověšené. V druhé části se pak začnou přenášet samotná data z a do 5i25. Hlavní problém manuálu je v tom, že popisuje komunikaci přes sserial jak ze strany PC<->5i25, tak ze strany 5i25<->dceřiná karta, ale není to tam zřetelně řečeno a chvíli i trvalo, než mi to došlo, navíc jsou jednotlivé sekce promíchané a některé platí pro oba typy přenosů. Nás zajímá pouze část 5i25<->dceřiná karta. Navíc jsem měl nevýhodu, že jsem měl k dispozici jen 5i25, ale žádnou dceřinou kartu, tak jsem si komunikaci nemohl analyzátorem "ošahat". Teď budeme mluvit třeba o manuálu k 7i76. Popis povelů, které z 5i25 odcházejí do dceřiné kaarty je na straně 44-45, tj. povely 0xC0 až 0xFF. Na straně 48, pak povely 0xBB, 0xBC a 0xBD. Dále je důležitý popis PTOC, což jsou záznamy o datech, které se budou přenášet. Popis je na straně 29 - 31. Komunikace začíná povelem 0xDF, na který se odpoví 5A + CRC. Tím se ví, že na sserial něco je. Následuje několik povelů nastavení a pak se z dceřiné karty načte konfigurace vstupů a výstupů. Po tomto se už jen posílá povel 0xBD + eventuální data do karty, pokud má výstupy a odpověď je data ze vstupů, pokud je karta má. Nejjednodušší je začít tak, že si např. nahraji do 5i25 konfiguraci 7i76, pak na pinech 7 - 10 jsou 2 sserialy (TX0, RX0, TX1 a RX1 v tomto pořadí). Na jeden z nich si připojím mikrokontroler, na kterém to budu ladit, já to prvně rozchodil na kitu s ARMem od Texasu za cca 5 dolarů (Stellaris Launchpad), dobré je mít taky logický analyzátor, jde to rychleji, stačí i něco velice jednoduchého, ale musí to stíhat těch 2.5M. Spustím linuxcnc a koukám, co přichází a postupně přidávám zpracování povelů, které přichází. Přikládám zdroják v C a taky screen logického analyzátoru z počátku pokusů. To by mohlo pomoct.
Přílohy
sserial.c
(40.72 KiB) Staženo 280 x
main.c
(7.16 KiB) Staženo 414 x
1.jpg
7m76.jpg
7m77.jpg
Uživatelský avatar
CZ_Pascal
Příspěvky: 870
Registrován: 14. 1. 2008, 8:24
Bydliště: Brno

23. 1. 2016, 4:06

Díky moc. :!:
Tohle je přesně to co je hrozně zdlouhavé z těch jejich manuálů vyčíst (navíc když to ani nemám pořádně na čem vyzkoušet) :?

S tvým popisem + příkladama se už dá rozumě začít a metodou pokus/omyl (semtam úspěch) něco rozumného spáchat.
(pokud metoda pokus/omyl po tisícém pokusu nevrátí úspěch tak to člověka tak nějako přestane bavit, ale tady je reálná šance rozchodit základ a ten pak rozšiřovat)

Bude to asi hodně dlouho trvat než se k tomu přes všechny moje resty vůbec dostanu, ale světýlko na konci tunelu zase malinko zesílilo :D

(BTW: Kde si necháváš dělat desky ? Tohle na doma leptanej tišták nevypadá :mrgreen: )
martyxxx
Příspěvky: 195
Registrován: 16. 10. 2008, 9:19
Bydliště: Praha

23. 1. 2016, 5:36

Jo, i když mám domácí výrobu tišťáků solidně zvládnutou, tohle už chce profi výrobu. Tišťáky si nechávám dělat v Pragoboardu, v Praze-Běchovicích. Dělám kousek od nich a navíc mají zajímavou nabídku na výrobu kusovek, Pool servis - čistá cena za dm cca 550Kč bez daně, což jde. Nedostaneš k tomu filmy, ale to mi nevadí.
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

23. 1. 2016, 6:22

Díky za tohle zajímavé vlákno s vysokou hustotou informací.

Že je sserial běžný UART na 2.5 Mbit/s nad RS422 je paráda. Takže tohle by hladce zvládal můj oblíbenec STM32F103, deska s procesorem na eBay už za nějaké 3 USD. Pak jsou možnosti rozšiřování I/O téměř nekonečné a za málo peněz.

Všem aktivním přispěvatelům palec hore. :D
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22385
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

23. 1. 2016, 8:31

jj
parada
vyzivne vlakno
taky za me diky
Vsechna prava na chyby vyhrazena (E)
fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

26. 1. 2016, 10:30

Diky za info,
treba se jednou bude hodit. Neni nad to, když tu detektivní činnost někdo udělá za vás.
Ještě sem koukal na použití UART v MESA firmwarech. Komunikace bezi na 1Mb a jestli sem to dobře pochopil, tak by to šlo použít na komunikaci např s Arduinem a jinyma kartma se seriovou komunikaci.
např. https://emergent.unpythonic.net/01198594294 a misto serial komunikaci pres USB bezici na 9600 by to prineslo vyrazne zrychleni.
M
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22385
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

26. 1. 2016, 10:13

btw kdyby nekdo chtel zacit vpodstate od 0 tak je tu mozna zajimavy interface ktery je otevreny
do hloubky jsem nestudoval

http://www.biss-interface.com/" onclick="window.open(this.href);return false;
Vsechna prava na chyby vyhrazena (E)
yaqwsx
Příspěvky: 137
Registrován: 9. 9. 2011, 1:12

28. 1. 2016, 2:16

Díky za zajímavé vlákno. Nemáš odhad, kolik se toho vejde do 5i25? Jsem do ní schopen nacpat 6 × enkodér + 6 × PWM pro servo + 3 stepgeny?
Odpovědět

Zpět na „LinuxCNC - drive pod nazvem EMC2“