Nyt on CNC-foorumin tukeminen helppoa!
Maksu onnistuu PayPalin kautta myös kortilla
Konemies kiittää

EMC:n AKSELEIDEN LISÄYS ONGELMA

Aloittaja porepe, 22.02.08 - klo:17:19

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

porepe

Kertokaapa joku asiasta tietävä, miksi tämä konffiguraatio antaa EMC:n käynnistyessä seuraavanlaisen virheen...

HAL: ERROR: pin "pwmgen.2.value not found
etchKOE.hal:83: link failed

Molemmat antavat saman virheen, sekä pwmgen 2 että 3????


Eli kyseessä on muokattu ETCH servo esimerkki... Olen stepperi puolella onnistunut lisäämään akseleita sujuvasti, mutta servo puolella ei oikein onnista...

Olen tavannut noita läpi jo moneen kertaan, mutta väsyneisiin silmiini ei ongelma kohta osu...

Stepperi puolella on riittänyt HAL ja INI tiedoston muokkaus, mutta vaatiiko servopuoli jotakin lisää???

Sitten onko kenelläkään hyviä ideoita miten saadaan encoodereita luettua vielä yläkierroksilla, kun jysähtää jo 700rpm tienoilla Encooderit antaa 2000 pulssia/kierros.

  RUUVIT 5mm nousulla ja ajo loppuu kuin seinään 3600mm/min vauhdilla.  Servot kyllä toimii 5mm ruuvilla vielä 16000mm/min vauhdilla, mutta encooderit jää jälkeen???






INI TIEDOTO¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤



# EMC controller parameters for generic controller. Make these what you need
# for your system.

# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.

# Settings with a + at the front of the comment are likely needed to get
# changed by the user.
# Settings with a - at the front are highly unneeded to be changed
###############################################################################
# General section
###############################################################################
[EMC]

#- Version of this INI file
VERSION =               $Revision: 1.11 $

#+ Name of machine, for use with display, etc.
MACHINE =               EMC-ETCH-SERVO-KOE

#- Name of NML file to use, default is emc.nml
NML_FILE =              emc.nml

#+ Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
DEBUG = 0
#DEBUG =               0x00000007
# DEBUG =               0x7FFFFFFF

###############################################################################
# Sections for display options
###############################################################################
[DISPLAY]

#+ Name of display program, e.g., xemc
DISPLAY =              axis
# DISPLAY =              usrmot
# DISPLAY =              mini
# DISPLAY =       tkemc
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME =            0.200

#- Path to help file
HELP_FILE =             doc/help.txt

#- Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET =       RELATIVE

#- Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK =     ACTUAL

#+ Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE =     3.0

#- Prefix to be used
PROGRAM_PREFIX = /home/porepe/emc2/nc_files

#- Introductory graphic
INTRO_GRAPHIC =         emc2.gif
INTRO_TIME =            2


###############################################################################
# Task controller section
###############################################################################
[TASK]

# Name of task controller program, e.g., milltask
TASK =                  milltask

#- Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME =            0.010

###############################################################################
# Part program interpreter section
###############################################################################
[RS274NGC]

#- File containing interpreter variables
PARAMETER_FILE =        etch.var

###############################################################################
# Motion control section
###############################################################################
[EMCMOT]

#- Name of the motion controller to use (only one exists for nontrivkins)
EMCMOT =              motmod

#- Key for real OS shared memory, e.g., for simulated motion
SHMEM_KEY =             111

#- Timeout for comm to emcmot, in seconds
COMM_TIMEOUT =          1.0

#- Interval between tries to emcmot, in seconds
COMM_WAIT =             0.010

#+ Base task period, in nanosecs - this is the fastest thread in the machine
BASE_PERIOD =                20000
#- Servo task period, in nanosecs - will be rounded to an int multiple of BASE_PERIOD
SERVO_PERIOD =               1000000
#- Trajectory Planner task period, in nanosecs - will be rounded to an
#   integer multiple of SERVO_PERIOD
TRAJ_PERIOD =                10000000

###############################################################################
# Hardware Abstraction Layer section
###############################################################################
[HAL]

# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#

# list of hal config files to run through halcmd
#+ files are executed in the order in which they appear
HALFILE =                    etchKOE.hal

#- list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD =                    save neta

###############################################################################
# Trajectory planner section
###############################################################################
[trAJ]
#+ machine specific settings
AXES =                  4
# COORDINATES =         X Y Z A B C
COORDINATES =           X Y Z A
HOME =                  0 0 0 0
LINEAR_UNITS =          mm
ANGULAR_UNITS =         degree
CYCLE_TIME =            0.0010
DEFAULT_VELOCITY =      10
MAX_VELOCITY =          100
DEFAULT_ACCELERATION =  30.0
MAX_ACCELERATION =      500.0

###############################################################################
# Axes sections
###############################################################################

#+ First axis
[AXIS_0]

TYPE =                          LINEAR
HOME =                          0.000
MAX_VELOCITY =                  60
MAX_ACCELERATION =              300
BACKLASH = 0.000
INPUT_SCALE =                   800
OUTPUT_SCALE = 1.000
MIN_LIMIT =                    -1000000
MAX_LIMIT =                     1000000
FERROR = 50.0
MIN_FERROR = 0.10
HOME_OFFSET =                    0.0
HOME_SEARCH_VEL =                0.0
HOME_LATCH_VEL =                 0.0
HOME_USE_INDEX =                 NO
HOME_IGNORE_LIMITS =             NO
P =                              1.5
I =                              20
D =                              5e-05
BIAS =                           5e-05
FF0 =                            0
FF1 =                            0
FF2 =             0
DEADBAND=                        0.002000

#+ Second axis
[AXIS_1]

TYPE =                          LINEAR
HOME =                          0.000
MAX_VELOCITY =                  60
MAX_ACCELERATION =              300
BACKLASH = 0.000
INPUT_SCALE =                   800
OUTPUT_SCALE = 1.000
MIN_LIMIT =                    -1000000
MAX_LIMIT =                     1000000
FERROR = 50.0
MIN_FERROR = 0.10
HOME_OFFSET =                    0.0
HOME_SEARCH_VEL =                0.0
HOME_LATCH_VEL =                 0.0
HOME_USE_INDEX =                 NO
HOME_IGNORE_LIMITS =             NO
P =                              1.5
I =                              20
D =                              5e-05
BIAS =                           5e-05
FF0 =                            0
FF1 =                            0
FF2 =             0
DEADBAND=                        0.002000


[AXIS_2]

TYPE =                          LINEAR
HOME =                          0.000
MAX_VELOCITY =                  60
MAX_ACCELERATION =              300
BACKLASH = 0.000
INPUT_SCALE =                   800
OUTPUT_SCALE = 1.000
MIN_LIMIT =                    -1000000
MAX_LIMIT =                     1000000
FERROR = 50.0
MIN_FERROR = 0.10
HOME_OFFSET =                    0.0
HOME_SEARCH_VEL =                0.0
HOME_LATCH_VEL =                 0.0
HOME_USE_INDEX =                 NO
HOME_IGNORE_LIMITS =             NO
P =                              1.5
I =                              20
D =                              5e-05
BIAS =                           5e-05
FF0 =                            0
FF1 =                            0
FF2 =             0
DEADBAND=                        0.002000


[AXIS_3]

TYPE =                          LINEAR
HOME =                          0.000
MAX_VELOCITY =                  60
MAX_ACCELERATION =              300
BACKLASH = 0.000
INPUT_SCALE =                   800
OUTPUT_SCALE = 1.000
MIN_LIMIT =                    -1000000
MAX_LIMIT =                     1000000
FERROR = 50.0
MIN_FERROR = 0.10
HOME_OFFSET =                    0.0
HOME_SEARCH_VEL =                0.0
HOME_LATCH_VEL =                 0.0
HOME_USE_INDEX =                 NO
HOME_IGNORE_LIMITS =             NO
P =                              1.5
I =                              20
D =                              5e-05
BIAS =                           5e-05
FF0 =                            0
FF1 =                            0
FF2 =             0
DEADBAND=                        0.002000

###############################################################################
# section for main IO controller parameters
###############################################################################
[EMCIO]

#- Name of IO controller program, e.g., io
EMCIO =       io

#- cycle time, in seconds
CYCLE_TIME =            0.100

#- tool table file
TOOL_TABLE =            etch.tbl




HAL TIEDOSTO¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤










# load realtime modules
# kinematics
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD traj_period_nsec=[EMCMOT]TRAJ_PERIOD key=[EMCMOT]SHMEM_KEY num_joints=[trAJ]AXES
loadrt hal_parport cfg="0x378 0xdd00"
loadrt encoder num_chan=4
loadrt pid num_chan=4
loadrt pwmgen output_type=1,1
loadrt ddt count=8
loadrt constant count=1

# define the order of execution for RT code
addf parport.0.read            base-thread
addf parport.1.read            base-thread
addf encoder.update-counters   base-thread
addf pwmgen.make-pulses        base-thread
addf parport.0.write           base-thread
addf parport.1.write           base-thread

addf encoder.capture-position  servo-thread
addf motion-command-handler    servo-thread
addf motion-controller         servo-thread
addf pid.0.do-pid-calcs        servo-thread
addf pid.1.do-pid-calcs        servo-thread
addf pid.2.do-pid-calcs        servo-thread
addf pid.3.do-pid-calcs        servo-thread
addf constant.0                servo-thread
addf pwmgen.update             servo-thread
addf ddt.0                     servo-thread
addf ddt.1                     servo-thread
addf ddt.2                     servo-thread
addf ddt.3                     servo-thread
addf ddt.4                     servo-thread
addf ddt.5                     servo-thread
addf ddt.6                     servo-thread
addf ddt.7                     servo-thread

# hook stuff together
newsig Xpos-fb float
newsig Ypos-fb float
newsig Zpos-fb float
newsig Apos-fb float

setp encoder.0.position-scale [AXIS_0]INPUT_SCALE
setp encoder.1.position-scale [AXIS_1]INPUT_SCALE
setp encoder.2.position-scale [AXIS_2]INPUT_SCALE
setp encoder.3.position-scale [AXIS_3]INPUT_SCALE

net enc0A encoder.0.phase-A <= parport.0.pin-10-in
net enc0B encoder.0.phase-B <= parport.0.pin-11-in
net enc1A encoder.1.phase-A <= parport.0.pin-12-in
net enc1B encoder.1.phase-B <= parport.0.pin-13-in
net enc2A encoder.2.phase-A <= parport.1.pin-10-in
net enc2B encoder.2.phase-B <= parport.1.pin-11-in
net enc3A encoder.3.phase-A <= parport.1.pin-12-in
net enc3B encoder.3.phase-B <= parport.1.pin-13-in

linksp Xpos-fb <= encoder.0.position
linksp Ypos-fb <= encoder.1.position
linksp Zpos-fb <= encoder.2.position
linksp Apos-fb <= encoder.3.position

newsig Xvel-cmd float
newsig Yvel-cmd float
newsig Zvel-cmd float
newsig Avel-cmd float

linksp Xpos-fb => pid.0.feedback
linksp Ypos-fb => pid.1.feedback
linksp Zpos-fb => pid.2.feedback
linksp Apos-fb => pid.3.feedback
linksp Xpos-fb => axis.0.motor-pos-fb
linksp Ypos-fb => axis.1.motor-pos-fb
linksp Zpos-fb => axis.2.motor-pos-fb
linksp Apos-fb => axis.3.motor-pos-fb

linksp Xvel-cmd <= pid.0.output
linksp Yvel-cmd <= pid.1.output
linksp Zvel-cmd <= pid.2.output
linksp Avel-cmd <= pid.3.output

linksp Xvel-cmd => pwmgen.0.value
linksp Yvel-cmd => pwmgen.1.value
linksp Zvel-cmd => pwmgen.2.value
linksp Avel-cmd => pwmgen.3.value

newsig Xpwm bit
newsig Ypwm bit
newsig Zpwm bit
newsig Apwm bit
linkps pwmgen.0.pwm Xpwm
linkps pwmgen.1.pwm Ypwm
linkps pwmgen.2.pwm Zpwm
linkps pwmgen.3.pwm Apwm

newsig Xdir bit
newsig Ydir bit
newsig Zdir bit
newsig Adir bit
linkps pwmgen.0.dir => Xdir
linkps pwmgen.1.dir => Ydir
linkps pwmgen.2.dir => Zdir
linkps pwmgen.3.dir => Adir

linksp Xdir    => parport.0.pin-02-out
linksp Xdir    => parport.0.pin-04-out
setp parport.0.pin-04-out-invert TRUE
linksp Xpwm => parport.0.pin-03-out

linksp Ydir    => parport.0.pin-05-out
linksp Ydir    => parport.0.pin-07-out
setp parport.0.pin-07-out-invert TRUE
linksp Ypwm => parport.0.pin-06-out

linksp Zdir    => parport.1.pin-02-out
linksp Zdir    => parport.1.pin-04-out
setp parport.1.pin-04-out-invert TRUE
linksp Zpwm => parport.1.pin-03-out

linksp Adir    => parport.1.pin-05-out
linksp Adir    => parport.1.pin-07-out
setp parport.1.pin-07-out-invert TRUE
linksp Apwm => parport.1.pin-06-out

setp pid.0.maxoutput 1.0
setp pid.1.maxoutput 1.0
setp pid.2.maxoutput 1.0
setp pid.3.maxoutput 1.0

# the values below come from the ini
setp pid.0.Pgain [AXIS_0]P
setp pid.0.Igain [AXIS_0]I
setp pid.0.Dgain [AXIS_0]D
setp pid.0.bias [AXIS_0]BIAS
setp pid.0.FF0 [AXIS_0]FF0
setp pid.0.FF1 [AXIS_0]FF1
setp pid.0.FF2 [AXIS_0]FF2
# deadband should be just over 1 count
setp pid.0.deadband [AXIS_0]DEADBAND

setp pid.1.Pgain [AXIS_1]P
setp pid.1.Igain [AXIS_1]I
setp pid.1.Dgain [AXIS_1]D
setp pid.1.bias [AXIS_1]BIAS
setp pid.1.FF0 [AXIS_1]FF0
setp pid.1.FF1 [AXIS_1]FF1
setp pid.1.FF2 [AXIS_1]FF2
# deadband should be just over 1 count
setp pid.1.deadband [AXIS_1]DEADBAND

# the values below come from the ini
setp pid.2.Pgain [AXIS_2]P
setp pid.2.Igain [AXIS_2]I
setp pid.2.Dgain [AXIS_2]D
setp pid.2.bias [AXIS_2]BIAS
setp pid.2.FF0 [AXIS_2]FF0
setp pid.2.FF1 [AXIS_2]FF1
setp pid.2.FF2 [AXIS_2]FF2
# deadband should be just over 1 count
setp pid.2.deadband [AXIS_2]DEADBAND

setp pid.3.Pgain [AXIS_3]P
setp pid.3.Igain [AXIS_3]I
setp pid.3.Dgain [AXIS_3]D
setp pid.3.bias [AXIS_3]BIAS
setp pid.3.FF0 [AXIS_3]FF0
setp pid.3.FF1 [AXIS_3]FF1
setp pid.3.FF2 [AXIS_3]FF2
# deadband should be just over 1 count
setp pid.3.deadband [AXIS_3]DEADBAND

newsig Xpos-cmd float
newsig Ypos-cmd float
newsig Zpos-cmd float
newsig Apos-cmd float
linksp Xpos-cmd <= axis.0.motor-pos-cmd
linksp Ypos-cmd <= axis.1.motor-pos-cmd
linksp Zpos-cmd <= axis.2.motor-pos-cmd
linksp Apos-cmd <= axis.3.motor-pos-cmd
linkps pid.0.command <= Xpos-cmd
linkps pid.1.command <= Ypos-cmd
linkps pid.2.command <= Zpos-cmd
linkps pid.3.command <= Apos-cmd
newsig Xenable bit
newsig Yenable bit
newsig Zenable bit
newsig Aenable bit
linkps axis.0.amp-enable-out => Xenable
linkps axis.1.amp-enable-out => Yenable
linkps axis.2.amp-enable-out => Zenable
linkps axis.3.amp-enable-out => Aenable
linksp Xenable => pid.0.enable
linksp Xenable => pwmgen.0.enable
linksp Yenable => pid.1.enable
linksp Yenable => pwmgen.1.enable
linksp Zenable => pid.2.enable
linksp Zenable => pwmgen.2.enable
linksp Aenable => pid.3.enable
linksp Aenable => pwmgen.3.enable

net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

newsig Xvel float
newsig Xacc float
linksp Xpos-cmd => ddt.0.in
linkps ddt.0.out => Xvel
linksp Xvel => ddt.1.in
linkps ddt.1.out => Xacc

newsig Yvel float
newsig Yacc float
linksp Ypos-cmd => ddt.2.in
linkps ddt.2.out => Yvel
linksp Yvel => ddt.3.in
linkps ddt.3.out => Yacc

newsig Zvel float
newsig Zacc float
linksp Zpos-cmd => ddt.4.in
linkps ddt.4.out => Zvel
linksp Zvel => ddt.5.in
linkps ddt.5.out => Zacc

newsig Avel float
newsig Aacc float
linksp Apos-cmd => ddt.6.in
linkps ddt.6.out => Avel
linksp Avel => ddt.7.in
linkps ddt.7.out => Aacc

net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed













Petri Junnila
Mynämäki

Martzis

loadrt pwmgen output_type=1,1 pitäisi varmaan olla loadrt pwmgen output_type=1,1,1,1

http://www.linuxcnc.org/docs/html/man/man9/pwmgen.9.html:

SYNOPSIS
loadrt pwmgen output_type=type0[,type1...]

The number of channels actually loaded depends on the number of type values given. The value of each type determines the outputs for that channel

porepe

Joo...

Kiitoksia Martzis. Homma alkoi pelittää.
En vielä ehdi servoilla kokeilemaan, mutta ainakin EMC starttaa ja kaikki näyttää hyvältä...
Koitan myöhemmin illalla ehtiä kokeilemaan ihan oikeasti mitä tuo tekee, vai tekeekö mitään...

Oliskos vielä ehdotuksia tuohon nopeuden kasvattamiseen Encoodereille???
Petri Junnila
Mynämäki

awallin

Lainaus käyttäjältä: porepe - 22.02.08 - klo:19:14
Oliskos vielä ehdotuksia tuohon nopeuden kasvattamiseen Encoodereille???

miten luet enkoodereita? ilmeisesti rinnaikkaisportin kautta? Tämä ei ole paras mahdollinen kytkentä, paljon nopeimpiin laskutaajuuksiin pääsee fpga-pohjaisilla hardware-laskureilla (m5i20 tai pluto-p).

koska käytät software enkooderi counteria vaikuttaa lukunopeuteen BASE-THREAD:n suoritusnopeus. Sitä voi yrittää pienentää INI tiedostosta.
Ennen pienentämistä voit ajaa 'latency-test' ohjelman ja katsoa miten hyvin koneesi osaa real-time ajoa.

nopein pulssijono mitä voi teoriassa mitata on taajuudeltaan 1/(2*base_thread).  Olen itse käyttänyt esim base_thread=50000
luku on nanosekunneissa eli maksimi pulssitaajuudeksi tulisi 1/(2*50us)= 10 kHz.


ram

Toinen ongelma

Kuinka lisään rinnakkaisportin emc:hen ??
Kaikenlaista olen kokeillut huonolla menestyksellä, mutta olisi kiva kuulla, kuinka se tehdään ihan oikeasti?
Eli mulla on lisäkortti, jossa on yksi rinnakkaisportti ja pari sarjaporttia. Tarkoitus olisi lisätä neljäs akseli (A) koneesen.

Olen manuaaleja kyllä lueskellut, mutta en ole löytänyt kuin hajanaisia tiedon murusia sieltä täältä ja niitä mutustelemalla en ole onnistunut. Websitäkään en ole mitään järkevää löytänyt.

ram

Sainpas lisättyä neljännen akselin. Parin illan ähellys, ja nyt homma toimii.

porepe

pluto tuli hankittua ja testaus menossa. 5mm nousulla kuularuuveihin sain +16000mm/minuutissa vauhtia :)  Nyt on vaan sellainen ongelma, että kun encooderit antaa 4000p/kierroksella eli 800p/mm niin PID:n säätäminen on pirun vaikeaa. Servot käy paljon puhtaammin jos valehtelen skaalan 5-10 kertaa isommaksi esim:6000p/mm. En tiedä pitäiskös pistää hammashihnalla välitys 1:5 servon ja ruuvin välille vai mitä tekis tuon kanssa, kun nyt on välitys ollut 1:1...    4-akselin kanssa ongelma on vielä hullumpi, kun pitäis saada välitykseksi 1:200 - 1:400 jotta tulis pulsseja tarpeeksi asteita kohden??? Jos joku osaa kertoa mitä singnaaleja hall scopesta tulisi tutkia ja säätää niin helpottaisi kummasti asiaa, eikä tarttis perstuntumalla yrittää säätää pidiä kohdalleen...
Petri Junnila
Mynämäki

Powered by EzPortal
SMF spam blocked by CleanTalk