7i97 konfigurace přes mesact

jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

4. 1. 2024, 12:34

Nulová integrovaná složka by imho neměla způsobit to, že to vůbec nefunguje.

PID jsem nastavil

Kód: Vybrat vše

P=50 (60, 250, 500 ani jedno nefungovalo)
I=0,001
D=0
OUTPUT_SCALE = 10
OUTPUT_MIN_LIMIT = -10
OUTPUT_MAX_LIMIT = 10

drátky k s analogovým signálem k řízení jsem pokaždé prohodil

takže vůbec nevím, jak dál.

může být chyba tady?

Kód: Vybrat vše

[TASK]
TASK = milltask
CYCLE_TIME = 0.05
#CYCLE_TIME = 0.01

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000

[KINS]
JOINTS = 3
KINEMATICS = trivkins coordinates=XYZ

[TRAJ]
COORDINATES =  XYZ
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 2.50
MAX_LINEAR_VELOCITY = 25.00

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
edit:

Robokope, byl jsi rychlejší než já, děkuju za odpověď

Jak si vydefinuju outputy? Jsem trochu začátečník :-)
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22400
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

4. 1. 2024, 1:15

Projdi ten retezec clanek po clanku abys videl co ti kde vylejza
Vsechna prava na chyby vyhrazena (E)
jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

6. 1. 2024, 1:03

Tak jsem zase o krůček postoupil, každopádně děkuju, že jste se mi snažili pomoci, moje minulá chyba byla neskutečně hloupá, na mese jsem měl analog out + píchlej do ena+.

Osa x mi pěkně drží na místě, když dám jog, tak popojede, ještě na tom bude trochu ladění, ale jezdí.

Osy Y a Z se ani nehnou, jako kdyby analogové výstupy byly mrtvé. (encodery měří správně)

Přehodil jsem na mesa kartě analog out a encoder od X osy s osou Y. Fyzická osa Y se potom chovala, jak jsem si přál, takže mašina funguje jak má, akorát to musím lépe vysvětlit lcnc.

ini i hal se mi zdají pro všechny osy dost stejné

Kód: Vybrat vše

#*******************
#  AXIS X JOINT 0
#*******************

setp   pid.x.Pgain     [JOINT_0]P
setp   pid.x.Igain     [JOINT_0]I
setp   pid.x.Dgain     [JOINT_0]D
setp   pid.x.bias      [JOINT_0]BIAS
setp   pid.x.FF0       [JOINT_0]FF0
setp   pid.x.FF1       [JOINT_0]FF1
setp   pid.x.FF2       [JOINT_0]FF2
setp   pid.x.deadband  [JOINT_0]DEADBAND
setp   pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp   pid.x.error-previous-target true

net x-index-enable  <=> pid.x.index-enable
net x-enable        =>  pid.x.enable
# hardware enable first 4 PWMGens and software enable PWMGen 00 on x-enable 
net x-enable   => [HMOT](CARD0).pwmgen.00.enable
net x-pos-cmd       =>  pid.x.command
net x-pos-fb        =>  pid.x.feedback
net x-output        <=  pid.x.output

# ---PWM Generator signals/setup---
setp   [HMOT](CARD0).pwmgen.00.output-type 1 #PWM pin0
setp   [HMOT](CARD0).pwmgen.00.offset-mode 1 # offset mode so 50% = 0
setp   [HMOT](CARD0).pwmgen.00.scale   [JOINT_0]OUTPUT_SCALE 

net x-output     => [HMOT](CARD0).pwmgen.00.value
net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-enable     <= joint.0.amp-enable-out

# ---Encoder feedback signals/setup---

setp    [HMOT](CARD0).encoder.00.counter-mode 0
setp    [HMOT](CARD0).encoder.00.filter 1
setp    [HMOT](CARD0).encoder.00.index-invert 0
setp    [HMOT](CARD0).encoder.00.index-mask 0
setp    [HMOT](CARD0).encoder.00.index-mask-invert 0
setp    [HMOT](CARD0).encoder.00.scale  [JOINT_0]ENCODER_SCALE

net x-pos-fb               <=  [HMOT](CARD0).encoder.00.position
net x-vel-fb               <=  [HMOT](CARD0).encoder.00.velocity
net x-pos-fb               =>  joint.0.motor-pos-fb
net x-index-enable    joint.0.index-enable  <=>  [HMOT](CARD0).encoder.00.index-enable
net x-pos-rawcounts        <=  [HMOT](CARD0).encoder.00.rawcounts

# ---setup home / limit switch signals---

net min-home-x     =>  joint.0.home-sw-in
net min-home-x     =>  joint.0.neg-lim-sw-in
net x-pos-limit     =>  joint.0.pos-lim-sw-in

#*******************
#  AXIS Y JOINT 1
#*******************

setp   pid.y.Pgain     [JOINT_1]P
setp   pid.y.Igain     [JOINT_1]I
setp   pid.y.Dgain     [JOINT_1]D
setp   pid.y.bias      [JOINT_1]BIAS
setp   pid.y.FF0       [JOINT_1]FF0
setp   pid.y.FF1       [JOINT_1]FF1
setp   pid.y.FF2       [JOINT_1]FF2
setp   pid.y.deadband  [JOINT_1]DEADBAND
setp   pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp   pid.y.error-previous-target true

net y-index-enable  <=> pid.y.index-enable
net y-enable        =>  pid.y.enable
#  software enable PWMGen 01 on y-enable 
net y-enable   => [HMOT](CARD0).pwmgen.01.enable
net y-pos-cmd       =>  pid.y.command
net y-pos-fb        =>  pid.y.feedback
net y-output        <=  pid.y.output
net y-enable   => [HMOT](CARD0).pwmgen.01.enable

# ---PWM Generator signals/setup---

setp   [HMOT](CARD0).pwmgen.01.output-type 1 #PWM pin0
setp   [HMOT](CARD0).pwmgen.01.offset-mode 1 # offset mode so 50% = 0
setp   [HMOT](CARD0).pwmgen.01.scale   [JOINT_1]OUTPUT_SCALE

net y-output     => [HMOT](CARD0).pwmgen.01.value
net y-pos-cmd    <= joint.1.motor-pos-cmd
net y-enable     <= joint.1.amp-enable-out

# ---Encoder feedback signals/setup---

setp    [HMOT](CARD0).encoder.01.counter-mode 0
setp    [HMOT](CARD0).encoder.01.filter 1
setp    [HMOT](CARD0).encoder.01.index-invert 0
setp    [HMOT](CARD0).encoder.01.index-mask 0
setp    [HMOT](CARD0).encoder.01.index-mask-invert 0
setp    [HMOT](CARD0).encoder.01.scale  [JOINT_1]ENCODER_SCALE

net y-pos-fb               <=  [HMOT](CARD0).encoder.01.position
net y-vel-fb               <=  [HMOT](CARD0).encoder.01.velocity
net y-pos-fb               =>  joint.1.motor-pos-fb
net y-index-enable    joint.1.index-enable  <=>  [HMOT](CARD0).encoder.01.index-enable
net y-pos-rawcounts        <=  [HMOT](CARD0).encoder.01.rawcounts

# ---setup home / limit switch signals---

net min-home-y     =>  joint.1.home-sw-in
net min-home-y     =>  joint.1.neg-lim-sw-in
net y-pos-limit     =>  joint.1.pos-lim-sw-in

#*******************
#  AXIS Z JOINT 2
#*******************

setp   pid.z.Pgain     [JOINT_2]P
setp   pid.z.Igain     [JOINT_2]I
setp   pid.z.Dgain     [JOINT_2]D
setp   pid.z.bias      [JOINT_2]BIAS
setp   pid.z.FF0       [JOINT_2]FF0
setp   pid.z.FF1       [JOINT_2]FF1
setp   pid.z.FF2       [JOINT_2]FF2
setp   pid.z.deadband  [JOINT_2]DEADBAND
setp   pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp   pid.z.error-previous-target true

net z-index-enable  <=> pid.z.index-enable
net z-enable        =>  pid.z.enable
#  software enable PWMGen 02 on z-enable 
net z-enable   => [HMOT](CARD0).pwmgen.02.enable
net z-pos-cmd       =>  pid.z.command
net z-pos-fb        =>  pid.z.feedback
net z-output        <=  pid.z.output

# ---PWM Generator signals/setup---

setp   [HMOT](CARD0).pwmgen.02.output-type 1 #PWM pin0
setp   [HMOT](CARD0).pwmgen.02.offset-mode 1 # offset mode so 50% = 0
setp   [HMOT](CARD0).pwmgen.02.scale   [JOINT_2]OUTPUT_SCALE

net z-output     => [HMOT](CARD0).pwmgen.02.value
net z-pos-cmd    <= joint.2.motor-pos-cmd
net z-enable     <= joint.2.amp-enable-out

# ---Encoder feedback signals/setup---

setp    [HMOT](CARD0).encoder.02.counter-mode 0
setp    [HMOT](CARD0).encoder.02.filter 1
setp    [HMOT](CARD0).encoder.02.index-invert 0
setp    [HMOT](CARD0).encoder.02.index-mask 0
setp    [HMOT](CARD0).encoder.02.index-mask-invert 0
setp    [HMOT](CARD0).encoder.02.scale  [JOINT_2]ENCODER_SCALE

net z-pos-fb               <=  [HMOT](CARD0).encoder.02.position
net z-vel-fb               <=  [HMOT](CARD0).encoder.02.velocity
net z-pos-fb               =>  joint.2.motor-pos-fb
net z-index-enable    joint.2.index-enable  <=>  [HMOT](CARD0).encoder.02.index-enable
net z-pos-rawcounts        <=  [HMOT](CARD0).encoder.02.rawcounts

# ---setup home / limit switch signals---

net max-home-z     =>  joint.2.home-sw-in
net z-neg-limit     =>  joint.2.neg-lim-sw-in
net max-home-z     =>  joint.2.pos-lim-sw-in
jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

26. 1. 2024, 12:27

Ahoj, zase jsem o krůček dál, předchozí problém byl skutečně v halu, osa x mi fungovala, tak jsem překopíroval pwm část x osy do osy y a z a přepsal jsem čísla, nevím proč, ale pomohlo to. Hal který jsem používal jako výchozí je basic nastavení od mesy, tak mě trochu překvapuje, že už podruhé v jejich konfiguraci bylo něco nefunkčního.

Teďka se snažím zapojit koncáky, rada by se mi zase hodila.

našel jsem si dráty od koncáků, které jsou standartně spojené a rozpojí se, když osa dojede na konec.

v halu mám koncáky takhle:

Kód: Vybrat vše


# --- MIN-HOME-X ---
net min-home-x     <=  [HMOT](CARD0).inmux.00.input-00-not

# --- MIN-HOME-Y ---
net min-home-y     <=  [HMOT](CARD0).inmux.00.input-01-not

# --- MAX-HOME-Z ---
net max-home-z     <=  [HMOT](CARD0).inmux.00.input-02-not

#*******************
#  AXIS X JOINT 0
#*******************
# ---setup home / limit switch signals---

net min-home-x     =>  joint.0.home-sw-in
net min-home-x     =>  joint.0.neg-lim-sw-in
net x-pos-limit     =>  joint.0.pos-lim-sw-in

#pro další osy podobně
na kartě to vidím takhle

Kód: Vybrat vše

hm2/hm2_7i97.0:     IO Pin 025 (Internal InMux0): SSR #0, pin AC Ref (internal) (Output)
hm2/hm2_7i97.0:     IO Pin 026 (Internal InMux1): InMux Input Mux #0, pin addr0 (Output)
hm2/hm2_7i97.0:     IO Pin 027 (Internal InMux2): InMux Input Mux #0, pin addr1 (Output)
hm2/hm2_7i97.0:     IO Pin 028 (Internal InMux3): InMux Input Mux #0, pin addr2 (Output)
hm2/hm2_7i97.0:     IO Pin 029 (Internal InMuxData): InMux Input Mux #0, pin addr3 (Output)
v manuálu k 7i97 píší tohle

TB4 PIN SIGNAL DIRECTION
1 IN0 TO 7I97
2 IN1 TO 7I97
3 IN COMMON 0,1 TO 7I97
4 IN2 TO 7I97
5 IN3 TO 7I97
6 IN COMMON 2,3 TO 7I97

tak jsem vždycky jeden konec od koncáku připojil k zemi, druhý k inputu, nevím, jestli je to správně, rozhodně to nefunguje, ale chtěl jsem se podělit o úspěch, že se mašina jinak hejbe.
jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

1. 2. 2024, 11:46

Ahoj, drátky od koncáků jsem napoprvé zapojoval podle rady chatbota a musím říct, že to je špatný nápad. Napodruhé mi to funguje, kromě erroru z osy Y:

"Home Switch Inactive before start of backoff move"

Ale trochu doufám, že to pujde hardwarově vyřešit koumáním s koncákem.

Větší potíž mám se směry pohybu os, potřeboval bych otočit X a Y.
COORDINATES = -X-Y Z nepomohlo

napadá mě otočit to takhle:

ENCODER_SCALE -170
OUTPUT_SCALE = 10.0
MIN_LIMIT = 10
MAX_LIMIT = -10

pomohlo by to? nepřijde mi to jako elegantní řešení.

V halu se rýpu nerad a drátky od encoderů jsem rád že mám, tak jak jsou.

Jinak takhle ta mašinka vypadá:
292470885_380056580780186_3233997548003226445_n.jpg
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

1. 2. 2024, 12:56

Myslím si, že ještě bude potřeba invertovat pwmgen na analogový výstupy. Mrkni do HAL pinů a HAL parametrů, jestli tma nebude nějaký invert v hm2 předchystaný.
LinuxCNC - MESA 7i96
zz912.webnode.cz
jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

1. 2. 2024, 1:08

Kód: Vybrat vše

# ---PWM Generator signals/setup---
setp   [HMOT](CARD0).pwmgen.00.output-type 1 #PWM pin0
setp   [HMOT](CARD0).pwmgen.00.offset-mode 1 # offset mode so 50% = 0
setp   [HMOT](CARD0).pwmgen.00.scale   [JOINT_0]OUTPUT_SCALE 

net x-output     => [HMOT](CARD0).pwmgen.00.value
net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-enable     <= joint.0.amp-enable-out
uplně předchystaný mi to nepřijde, tak mě napadá v ini udělat záporný encoder scale a fyzicky prohodit drátky analog out...
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

1. 2. 2024, 1:37

Myslel jsem, at se podivas do HALSHOW.
LinuxCNC - MESA 7i96
zz912.webnode.cz
jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

16. 2. 2024, 11:53

Ahoj

V ini udělat záporný encoder scale a fyzicky prohodit drátky analog out... pomohlo.

teďka řeším, jak roztočit vřeteno. Vřetena na stroji jsou dvě, jedno by mi pro začátek stačilo, ale simodrive modul k vřetenu mi přijde dost složitý, tak uvažuji, jestli by mi nepomohl tenhle frekvenční měnič:

frekvenční měnič

vřeteno má 5,5kw, 220V, 300Hz, 18000 ot.

Simodrive frekvenční měnič je určitě funkční, ale rád bych si usnadnil práci, co si o tom myslíte?
Uživatelský avatar
Charon
Sponzor fora
Příspěvky: 5244
Registrován: 27. 7. 2019, 4:31
Bydliště: Praha

16. 2. 2024, 11:58

jiri.plucha píše: 16. 2. 2024, 11:53 Ahoj

V ini udělat záporný encoder scale a fyzicky prohodit drátky analog out... pomohlo.

teďka řeším, jak roztočit vřeteno. Vřetena na stroji jsou dvě, jedno by mi pro začátek stačilo, ale simodrive modul k vřetenu mi přijde dost složitý, tak uvažuji, jestli by mi nepomohl tenhle frekvenční měnič:

frekvenční měnič

vřeteno má 5,5kw, 220V, 300Hz, 18000 ot.

Simodrive frekvenční měnič je určitě funkční, ale rád bych si usnadnil práci, co si o tom myslíte?
No nahradit fakt dobrej simodrive velmi jasnou čínou, no nevim :roll:
I za cenu komplikovanejsiho zapojeni/programování
Na hobíka to asi jde...
SM16A, FN20, 3E710B, CDC7-2, HO02, CO2laser, Fiber a tak
jiri.plucha
Příspěvky: 16
Registrován: 11. 7. 2020, 1:37

16. 2. 2024, 1:20

Taky mi to nepřijde jako elegantní řešení měnit Simodrive za čínu. Nabízí se otázka, jestli byste někdo nebyl ochotnej za mnou přijet do Vysokého nad Jizerou (1h 40min od Prahy). Určitě jsem připravený platit penězi.
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

16. 2. 2024, 7:31

A máš manuál k tomu simodrive? Když už jsi se dostal tak daleko, tak to už dáš.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Odpovědět

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