Linuxcnc vs HS806-EC Ethercat step/dir driver

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

18. 12. 2017, 11:53

Ahoj všem
Tak tu máme po delší době zase jeden ethercatovej přírustek.
Ti co byli na přednášce o ethercatu ho už možná viděli, ale v pohybu rozhodně ne.
Tahle čínská potvora mi dala pěkně zabrat. Číňani jsou chytré hlavičky, ale dokumentaci psát opravdu neumí.
Jedná se o driver pro krokové motory do 7A, navíc má na sobě 3vstupy a 2 výstupy. Napájení AC nebo DC zhruba od 20V do 80V. Já sem našel pod stolem toroid na cca 48V a s tím to běhá.
Driver podporuje i encoder, takže ho lze provozovat v otevřené, nebo uzavřené smyčče.
Driver se ke mě dostal od Luboše, který ho sehnal někde v Číně. Netuším jak, protože vygooglit nejaké informace je téměř nemožné.
Takhle nějak to vypada, ono není sranda ani sehnat fotku. Existují tuším dvě na celém internetu. nebo neumím hledat.
IMAG3975.jpg
IMAG3974.jpg
IMAG3973.jpg
IMAG3972.jpg
O to větší zklamání bylo, když sem driver vybalil. v krabičce s nápisem co vypadá jako rozsypaný čaj, byl jen driver. Nejaký návod, nebo alespoň popis jumperu nic.
Podařilo se mi nalézt na netu alespoň popis přepínačů a pomocí google translatoru jsem ho přeložil z čínštiny.
Dál jsem se pokusil vyčíst pomoci CoE co nejvíce informací přímo z driveru. Teoreticky by měly stačit k rozběhnutí, ale to jsem se mýlil.

Kód: Vybrat vše

mk@linuxcnc:~$ ethercat  sdos
SDO 0x1000, "Device type"
  0x1000:00, r-r-r-, uint32, 32 bit, "Device type"
SDO 0x1008, "Device name"
  0x1008:00, r-r-r-, string, 64 bit, "Device name"
SDO 0x1009, "Hardware version"
  0x1009:00, r-r-r-, string, 64 bit, "Hardware version"
SDO 0x100a, "Software version"
  0x100a:00, r-r-r-, string, 64 bit, "Software version"
SDO 0x1018, "Identity Object"
  0x1018:00, r-r-r-, uint8, 8 bit, "Number of subindexes"
  0x1018:01, r-r-r-, uint32, 32 bit, "Vendor ID"
  0x1018:02, r-r-r-, uint32, 32 bit, "Product Code"
  0x1018:03, r-r-r-, uint32, 32 bit, "Revision Number"
  0x1018:04, r-r-r-, uint32, 32 bit, "Serial Number"
SDO 0x1600, "Receive PDO1 Mapping"
  0x1600:00, rwr-r-, uint8, 8 bit, "Number of subindexes"
  0x1600:01, rwr-r-, uint32, 32 bit, "Subindexe 1"
  0x1600:02, rwr-r-, uint32, 32 bit, "Subindexe 2"
  0x1600:03, rwr-r-, uint32, 32 bit, "Subindexe 3"
  0x1600:04, rwr-r-, uint32, 32 bit, "Subindexe 4"
  0x1600:05, rwr-r-, uint32, 32 bit, "Subindexe 5"
  0x1600:06, rwr-r-, uint32, 32 bit, "Subindexe 6"
  0x1600:07, rwr-r-, uint32, 32 bit, "Subindexe 7"
  0x1600:08, rwr-r-, uint32, 32 bit, "Subindexe 8"
SDO 0x1a00, "Transmit PDO1 Mapping"
  0x1a00:00, rwr-r-, uint8, 8 bit, "Number of subindexes"
  0x1a00:01, rwr-r-, uint32, 32 bit, "Subindexe 1"
  0x1a00:02, rwr-r-, uint32, 32 bit, "Subindexe 2"
  0x1a00:03, rwr-r-, uint32, 32 bit, "Subindexe 3"
  0x1a00:04, rwr-r-, uint32, 32 bit, "Subindexe 4"
  0x1a00:05, rwr-r-, uint32, 32 bit, "Subindexe 5"
  0x1a00:06, rwr-r-, uint32, 32 bit, "Subindexe 6"
  0x1a00:07, rwr-r-, uint32, 32 bit, "Subindexe 7"
  0x1a00:08, rwr-r-, uint32, 32 bit, "Subindexe 8"
SDO 0x1c00, "SM Communication Type"
  0x1c00:00, r-r-r-, uint8, 8 bit, "Number of subindexes"
  0x1c00:01, r-r-r-, uint8, 8 bit, "MailboxOut"
  0x1c00:02, r-r-r-, uint8, 8 bit, "MailboxIn"
  0x1c00:03, r-r-r-, uint8, 8 bit, "Outputs"
  0x1c00:04, r-r-r-, uint8, 8 bit, "Inputs"
SDO 0x1c12, "SM2(Outputs) PDO Assignment"
  0x1c12:00, rwr-r-, uint8, 8 bit, "Number of subindexes"
  0x1c12:01, rwr-r-, uint16, 16 bit, "Subindexe 1"
SDO 0x1c13, "SM3(Inputs) PDO Assignment"
  0x1c13:00, rwr-r-, uint8, 8 bit, "Number of subindexes"
  0x1c13:01, rwr-r-, uint16, 16 bit, "Subindexe 1"
SDO 0x2f20, "Interpolation Time"
  0x2f20:00, rwrwrw, uint32, 32 bit, "Interpolation Time"
SDO 0x2ff0, "Parameters Manager Control"
  0x2ff0:00, rwrwrw, int8, 8 bit, "Parameters Manager Control"
SDO 0x2fe0, "Inspection Result"
  0x2fe0:00, r-r-r-, uint32, 32 bit, "Inspection Result"
SDO 0x5031, "Servo Command (Monitor)"
  0x5031:00, r-r-r-, uint16, 16 bit, "Servo Command (Monitor)"
SDO 0x5f20, "Pulse Interval Target Value"
  0x5f20:00, r-r-r-, uint32, 32 bit, "Pulse Interval Target Value"
SDO 0x603f, "Last Error Code"
  0x603f:00, r-r-r-, uint16, 16 bit, "Last Error Code"
SDO 0x6040, "Controlword"
  0x6040:00, rwrwrw, uint16, 16 bit, "Controlword"
SDO 0x6041, "Statusword"
  0x6041:00, r-r-r-, uint16, 16 bit, "Statusword"
SDO 0x6060, "Modes Of Operation"
  0x6060:00, rwrwrw, int8, 8 bit, "Modes Of Operation"
SDO 0x6061, "Modes Of Operation Display"
  0x6061:00, r-r-r-, int8, 8 bit, "Modes Of Operation Display"
SDO 0x6062, "Position Demand Value"
  0x6062:00, r-r-r-, int32, 32 bit, "Position Demand Value"
SDO 0x6063, "Position Actual Internal Value"
  0x6063:00, r-r-r-, int32, 32 bit, "Position Actual Internal Value"
SDO 0x6064, "Position Actual Value"
  0x6064:00, r-r-r-, int32, 32 bit, "Position Actual Value"
SDO 0x606b, "Velocity Demand Value"
  0x606b:00, r-r-r-, int32, 32 bit, "Velocity Demand Value"
SDO 0x606c, "Velocity Actual Value"
  0x606c:00, r-r-r-, int32, 32 bit, "Velocity Actual Value"
SDO 0x607a, "Target Position"
  0x607a:00, rwrwrw, int32, 32 bit, "Target Position"
SDO 0x607c, "HM Offset"
  0x607c:00, rwrwrw, uint32, 32 bit, "HM Offset"
SDO 0x6077, "Torque actual value"
  0x6077:00, r-r-r-, int16, 16 bit, "Torque actual value"
SDO 0x6098, "HM Method"
  0x6098:00, rwrwrw, int32, 32 bit, "HM Method"
SDO 0x6099, "HM Velocity"
  0x6099:00, r-r-r-, uint8, 8 bit, "Number of subindexes"
  0x6099:01, rwrwrw, uint32, 32 bit, "HM Max Velocity"
  0x6099:02, rwrwrw, uint32, 32 bit, "HM Mix Velocity"
SDO 0x609a, "HM Accelerated Velocity"
  0x609a:00, rwrwrw, uint32, 32 bit, "HM Accelerated Velocity"
SDO 0x60b8, "enable"
  0x60b8:00, rwrwrw, uint16, 16 bit, "enable"
SDO 0x60b9, "count"
  0x60b9:00, rwrwrw, uint16, 16 bit, "count"
SDO 0x60ba, "Touch Probe Pos1 Pos Value"
  0x60ba:00, r-r-r-, int32, 32 bit, "Touch Probe Pos1 Pos Value"
SDO 0x60fc, "Position Demand Internal Value"
  0x60fc:00, r-r-r-, int32, 32 bit, "Position Demand Internal Value"
SDO 0x60fd, "Digital Inputs"
  0x60fd:00, r-r-r-, uint32, 32 bit, "Digital Inputs"
SDO 0x60fe, "Digital Outputs"
  0x60fe:00, rwrwrw, int32, 32 bit, "Digital Outputs"
SDO 0x60ff, "Target Velocity"
  0x60ff:00, rwrwrw, int32, 32 bit, "Target Velocity"
SDO 0x6502, "Supported Drive Modes"
  0x6502:00, r-r-r-, uint32, 32 bit, "Supported Drive Modes"
Když se podíváme na poslední položku Supported Drive Modes a pomocí dokumentace k jiným ethercatovým driverům ji rozluštíme, zjistíme, že driver by měl podporovat tři režimy řízení
na dotaz
ethercat upload 0x6502
dostaneme odpověd
0x0000001a0 416 to znamena binárně 0000000110100000 a to lze přeložit
Description
This object is organized bit-wise. The bits have the following meaning:
Bit Description
0 = profile position mode
1 = velocity mode
2 = profile velocity mode
3 = profile torque mode
4 = reserved
5 = homing mode
6 = interpolated position mode
7 = cyclic synchronous position mode
8 = cyclic synchronous velocity mode
9 = cyclic synchronous torque mode
10-15 = reserved
16-31 = manufacturer-specific
The bit values have the following meaning:
0 = mode is not supported
1 = mode is supported

takže mody 5, 7 a 8. homing mode, cyclic synchronous position mode, cyclic synchronous velocity mode.

Vybaven něco málo znalostmi z předchozích driveru jsem se jal to roztočit pomoci ethercatconfigurátoru, ale ani ťuk. přečetl jsem status word, ale nedokázal jsem změnit ani jeden parametr SDO.
Následovala velmi zdlouhavá komunikace s vývojářem z Číny na kterého sehnal Luboš kontakt přes dodavatele. Získal jsem xml soubor, ale už na první pohled v něm byly chyby.
Zjistil jsem že driver by měl běžet podle standartu CIA DSP402BUS
MAN-CAN402IG_Ver2p0-1.doc
(4.58 MiB) Staženo 6667 x

Ale hlubší analýzou jsem zjistil, že pár (spíš víc) odchylek se tam najde.
Po sáhodlouhé výměně názorů, kdy číňan po 4 dnech dostal mojí zprávu přes whatsup a za další 3 dny odpověděl. Jak sám říkal, government řídí a hlídá přístup na internet a než to všechno projde cenzůrou..... Ještě že jsem nadával jenom na chyby v xml a né a na velkého vůdce.
Takže poslal další novější xml verze 3, kde byly pro změnu jiné chyby. Ethercatconfigurátor si umí načíst potřebna data nejen z xml, ale i z driveru, pokud to podporuje. To tenhle podporuje a kupodivu je v nem soft ve verzi 4. takže ještě o jedna vyšší než ten nejnovější co mi poslal. Prostě děs a hrůza.
Takže 6 neděl v háji a driver se ani nehnul. Jediny co jse mi podařilo bylo hejbat s motorem v programu twincat, ale ten je trochu jinej nez ethercatconf a linuxcnc.
Takže jsem klesnul tak hluboko, že jsem nainstaloval wireshark, pustil driver v twincatu v promiskuitnim modu a debugoval pakety co si vymenujou.
Musím říct, že to prima počteníčko. chrlí to cca 1000 paketu za vteřinu a hledat v nich ty zajímavý je chuťovka. Ale tak nejak se podařilo. Našel jsem co jsem hledal.
Nakonec se mi povedlo s tím začít hejbat i v ethercatconfu, ale linuxcnc stále odolával.
Nakonec jsem ze tri xml souboru složil čtvrtej a ten tak nejak fungoval, ale motor nechtěl jit do otáček a navíc mu kolísala požadovana polaha od realné a to tak že chvíli do plusu, chvíli do mínusu.
Další analýzou paketů, jsem zjistil, že to bude mít souvislost s hodinama a jejich synchronizací. U všech driverů, který mi prošly rukama, stačilo synchronizovat hodiny jednou za 1000 cyklů, ale tady je potřeba mnohem častěji.
Nakonec se úspěch dostavil a motor ožil. má docela pěknou dynamiku, málem mi utekl ze stolu když jsem ho testoval.
Pouštěl jsem do nej sinusovku jako zdroj polohy, abych nemusel řešit akcerlerace a podobny věci. Navíc sem si říkal, že když bude potřeba posílat i rychlost (nakonec nebylo), máme tu cosinus a to jak známo je derivace sinu, tudíš hledaná rychlost. Takže jsem si vystačil s siggen componentou.

Jen pro upresnění. Driver běží zatím jen v pozičním režimu. MODE 8. zkoušel jsem i rychlostní a home režim, ale zatím bez úspěchu.
Číňan na mojí poznámku, že driver je bez manuálu k prdu slibil, že něco pošle. Tak uvidíme. když to dorazí dopíšu postup jak to rozběhat i v jiných režimech.
No a na závěr už zbývá jen přihodit xml pro linuxnc.
hs806.rar
(521 bajtů) Staženo 158 x
¨
Důležité parametrey jsou
appTimePeriod="1000000"
refClockSyncCycles="1"
pro mastera
a
assignActivate="700"
pro slave

A jak to celé roztočit?
Pomocí control wordu na adresa 0x6040 stačí postupně prohnat hodnoty 6, 7, 15 to zvedne driver do stavu operation enable a pak už jen zadávat polohu do 0x607a. Původně jsem si myslel, že je potřeba zadávat i rychlost, protože twincat ji tam taky posila, ale není tomu tak. pozice staci.

Co mě trochu zarazilo je fakt, že když se mi podařilo motor utrhnout nejakou nesmyslnou polohou, tak v něm zapíska, zastaví se, ale driver nic pomocí status wordu nehlásí. pak je potřeba znova inicializovat driver 6, 7, 15 a zase funguje. Ale možná něco dělám blbě. uvidíme jak to dopadne s tou dokumentací.
Do příště zkusím xml upravit tak, aby používal proměné complex a tím pádem šlo řídit driver pomocí signálu typu bit namapovanych na jednotlivé bity control wordu. Popřípadě nejakou ukázkovou konfiguraci do linuxcnc.

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

18. 12. 2017, 12:49

Jak mi správně připomněl Oscar v sz, hodilo by se doplnit informaci za kolik ta sranda vlastně je a kde se to dá koupit.
Ale tuhle informaci nevím. Pokaždý se ke mně nejakou zahadou dastane driver na hraní, já si s ním pohraju a vrátím.
Tímto bych chtěl poprosit Luboše, jestli by mohl tyto informace doplnit.
Dík Martin
lubos
Sponzor fora
Příspěvky: 5088
Registrován: 2. 5. 2007, 3:47
Bydliště: Praha

18. 12. 2017, 6:36

Drivery jsem vzal na zkoušku a ověření jak to bude chodit. Mám ještě 2 kousky ( pokud by někdo měl zájem není problém). Předpokládaná cena bude 4200Kč bez dph.
V současné době ještě čekám na jiný novější typ který bude umět DC brushless motory.
XpertMill, Gravos, Ninos, Galaad
IQ156
-1500Kč, -520Kč, -1čokoláda, - 28000Kč
www.freeair.cz www.rotexelectric.eu www.retrofitcnc.cz
Odpovědět

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