Ti rispondo per punti
C'è qualcosa che non mi torna in ciò che hai scritto, il circuito funziona così:
- A macchina spenta (BBB non avviata) non devi avere la tensione di 5V tra Pin5 e Pin4 di P4, quindi il fotoaccoppiatore non può chiudere F con CC e lo devi verificare misurando la tensione tra F e CC, dovrebbe essere circa 24V (26V va bene lo stesso). Attenzione alla polarità, F=+24V CC=0V (massa interna dell'inverter).
- A macchina accesa (BBB avviata) e machinekit avviato non devi avere la tensione di 5V tra Pin5 e Pin4 di P4, quindi inverter non azionato (come sopra)
- A macchina accesa e solo con il comando g-code puoi avviare o fermare il mandrino, non può essere diversamente.
ho verificato, le tensioni sono esattamente queste e il mandrino si comporta esattamente così.
L'unica differenza è che dopo aver fatto shutdown da machinekit quando la BBB si spegne (i led blu smettono di lampeggiare e la BBB rimane con un led verde acceso) succede questo:
il mandrino si riattiva
In questo stato, misurando direttamente sulla schedina (quindi con tutti i fili collegati)
su P4(-) e P5 (+) ci sono 3,6V
su CC(-) e F (+) ci sono 0,9V
se scollego dalla scheda i fili CC e F che provengono dall'inverter:
misurando direttamente su inverter ai morsetti CC e F: 26 V
misurando su scheda:
morsetti CC e F (senza i fili di cui sopra collegati): -0,003V (notare il segno negativo)
morsetti P4 e P5: 3.6V
questi sono i test... è come se rimanesse una tensione in memoria da qualche parte dopo l'esecuzione di machinekit
perché quando accendo la macchina e non faccio partire MK le tensioni sono ok, cioè il mandrino non si avvia
Per il pinout del fotoaccoppiatore verifica con l'immagine....
si, ho seguito quella posizione dei pin basandomi sulla sigla PC817
Da come descrivi il funzionamento sembra che l'inverter non è configurato correttamente, verifica il parametro F127 (nel manuale a pagina 13, c'è una tabella) che dovrebbe essere impostato con 0 ("sink" vedi pagina 4).
L'inverter è settato F127 = 0, quindi è sink.
Il setp è un comando hal per settare di default un parametro, prova a mettere un # a inizio riga in modo da renderla non eseguita.
Sì, ho fatto così e machinekit si avvia senza problemi
Per quanto rigurda l'errore all'avvio di machinekit la cosa migliore è scrivere qui tutto il contenuto del file hal, appena posso te lo verifico.
questo è il mio file hal
Codice: Seleziona tutto
# #######################################
#
# HAL file for BeagleBone + Panther cape with 3 steppers
#
# Derived from example BeBoPr-Bridge.hal
#
# ########################################
# Launch the setup script to make sure hardware setup looks good
loadusr -w ./setup.bridge.sh
# ###################################
# Core EMC/HAL Loads
# ###################################
# kinematics
loadrt trivkins
# motion controller, get name and thread periods from ini file
# trajectory planner
loadrt tp
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES tp=tp kins=trivkins
# load low-level drivers
loadrt hal_bb_gpio output_pins=914,916,917,918 input_pins=911,913,915,817,923,925,927,926,924,826,912,815,942,818,922,921
loadrt [PRUCONF](DRIVER) prucode=$(HAL_RTMOD_DIR)/[PRUCONF](PRUBIN) [PRUCONF](CONFIG) halname=hpg
loadrt pid count=2
# loadrt limit1 count=2
# loadrt pepper count=1
# Python user-mode HAL module to read ADC value and generate a thermostat output for PWM
# t = Thermistor table (only epcos_B57560G1104 or 1 supported for now)
# a = analog input channel
# loadusr -Wn Therm ./ReadTemp.py -n Therm --num_chan 2 -t 1 1 -a 4 5
# ################################################
# THREADS
# ################################################
addf hpg.capture-position servo-thread
addf bb_gpio.read servo-thread
addf bb_gpio.write 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 limit1.0 servo-thread # FINECORSA
#addf limit1.1 servo-thread # FINECORSA
addf hpg.update servo-thread
# addf pepper.update base-thread
# ######################################################
# Axis-of-motion Specific Configs (not the GUI)
# ######################################################
# ################
# X [0] Axis
# ################
# axis enable chain
newsig emcmot.00.enable bit
sets emcmot.00.enable FALSE
net emcmot.00.enable <= axis.0.amp-enable-out
net emcmot.00.enable => hpg.stepgen.00.enable
# position command and feedback
net emcmot.00.pos-cmd <= axis.0.motor-pos-cmd
net emcmot.00.pos-cmd => hpg.stepgen.00.position-cmd
net motor.00.pos-fb <= hpg.stepgen.00.position-fb
net motor.00.pos-fb => axis.0.motor-pos-fb
# timing parameters
setp hpg.stepgen.00.dirsetup [AXIS_0]DIRSETUP
setp hpg.stepgen.00.dirhold [AXIS_0]DIRHOLD
setp hpg.stepgen.00.steplen [AXIS_0]STEPLEN
setp hpg.stepgen.00.stepspace [AXIS_0]STEPSPACE
setp hpg.stepgen.00.position-scale [AXIS_0]SCALE
setp hpg.stepgen.00.maxvel [AXIS_0]STEPGEN_MAX_VEL
setp hpg.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAX_ACC
#setp hpg.stepgen.00.step_type 0
# P8.9
setp hpg.stepgen.00.steppin 0x65
# P8.7
setp hpg.stepgen.00.dirpin 0x62
# ################
# Y [1] Axis
# ################
# axis enable chain
newsig emcmot.01.enable bit
sets emcmot.01.enable FALSE
net emcmot.01.enable <= axis.1.amp-enable-out
net emcmot.01.enable => hpg.stepgen.01.enable
# position command and feedback
net emcmot.01.pos-cmd <= axis.1.motor-pos-cmd
net emcmot.01.pos-cmd => hpg.stepgen.01.position-cmd
net motor.01.pos-fb <= hpg.stepgen.01.position-fb
net motor.01.pos-fb => axis.1.motor-pos-fb
# timing parameters
setp hpg.stepgen.01.dirsetup [AXIS_1]DIRSETUP
setp hpg.stepgen.01.dirhold [AXIS_1]DIRHOLD
setp hpg.stepgen.01.steplen [AXIS_1]STEPLEN
setp hpg.stepgen.01.stepspace [AXIS_1]STEPSPACE
setp hpg.stepgen.01.position-scale [AXIS_1]SCALE
setp hpg.stepgen.01.maxvel [AXIS_1]STEPGEN_MAX_VEL
setp hpg.stepgen.01.maxaccel [AXIS_1]STEPGEN_MAX_ACC
#setp hpg.stepgen.01.step_type 0
# P8.8
setp hpg.stepgen.01.steppin 0x63
# P8.10
setp hpg.stepgen.01.dirpin 0x64
# ################
# Z [2] Axis
# ################
# axis enable chain
newsig emcmot.02.enable bit
sets emcmot.02.enable FALSE
net emcmot.02.enable <= axis.2.amp-enable-out
net emcmot.02.enable => hpg.stepgen.02.enable
# position command and feedback
net emcmot.02.pos-cmd <= axis.2.motor-pos-cmd
net emcmot.02.pos-cmd => hpg.stepgen.02.position-cmd
net motor.02.pos-fb <= hpg.stepgen.02.position-fb
net motor.02.pos-fb => axis.2.motor-pos-fb
# timing parameters
setp hpg.stepgen.02.dirsetup [AXIS_2]DIRSETUP
setp hpg.stepgen.02.dirhold [AXIS_2]DIRHOLD
setp hpg.stepgen.02.steplen [AXIS_2]STEPLEN
setp hpg.stepgen.02.stepspace [AXIS_2]STEPSPACE
setp hpg.stepgen.02.position-scale [AXIS_2]SCALE
setp hpg.stepgen.02.maxvel [AXIS_2]STEPGEN_MAX_VEL
setp hpg.stepgen.02.maxaccel [AXIS_2]STEPGEN_MAX_ACC
#setp hpg.stepgen.02.step_type 0
# P9.15 GPIO1_16
setp hpg.stepgen.02.steppin 0x4C
# P9.23 GPIO1_17
setp hpg.stepgen.02.dirpin 0x4D
# ##################################################
# Standard I/O - EStop, Enables, Limit Switches, Etc
# ##################################################
# Standard inputs
net in0 bb_gpio.p9.in-24 => motion.digital-in-00
net in1 bb_gpio.p8.in-26 => motion.digital-in-01
net in2 bb_gpio.p9.in-12 => motion.digital-in-02
net in3 bb_gpio.p8.in-15 => motion.digital-in-03
# Standard outputs
# net out0 motion.digital-out-00 => bb_gpio.p9.out-14
# net out1 motion.digital-out-01 => bb_gpio.p9.out-16
# net out2 motion.digital-out-02 => bb_gpio.p9.out-17
# net out3 motion.digital-out-03 => bb_gpio.p9.out-18
#######################################################################
# START MANDRINO
# net startVFD motion.spindle-on => bb_gpio.p9.out-14
#######################################################################
#######################################################################
# VELOCITA' MANDRINO
# net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
# net spindle-on motion.spindle-on => pwmgen.0.enable <= bb_gpio.p9.out-14
# net spindle-pwm pwmgen.0.pwm => bb_gpio.p9.out-16
# Set the spindle's top speed in RPM
# setp pwmgen.0.scale 2800
# DA ROSS
net spindle-on motion.spindle-on => bb_gpio.p9.out-14
net spindle-speed-cmd motion.spindle-speed-out => hpg.pwmgen.00.out.00.value
setp hpg.pwmgen.00.pwm_period 1000000
setp hpg.pwmgen.00.out.00.pin 916
setp hpg.pwmgen.00.out.00.enable 1
# setp hpg.pwmgen.00.out.00.value 0.0
setp hpg.pwmgen.00.out.00.scale 1000
# END ROSS
# Il "pwm_period" è la frequenza del pwm, dovrebbe essere 1000Hz
# (andrebbe misurata con un oscilloscopio per verificarla).
# La riga "setp hpg.pwmgen.00.out.00.pin 916" identifica il pin di uscita dove è
# disponibile il segnale pwm, 916 significa pin 16 del P9 della BBB
# che dovrebbe essere il pin 7 del connettore P4 della cape che hai.
# Per accendere il mandrino usi bb_gpio.p9.out-14 ma prima imposti i giri con il pwm.
# Il convertitore non fornisce in uscita un segnale fino a 5V
# ma leggermente meno a causa della saturazione dei transistor,
# con il parametro "scale" imposti il limite massimo che ti occorre.
# Il "pwmgen" è la generazione del pwm via software per un pc normale
# ma dato che hai una BBB, il pwm va generato con le PRU
# per non appesantire la CPU e non serve altro.
# create a signal for the estop loopback
net estop-loop iocontrol.0.user-enable-out => iocontrol.0.emc-enable-in
# net estop bb_gpio.p9.in-26 => iocontrol.0.emc-enable-in
# setp bb_gpio.p9.in-26.invert 1
# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change => iocontrol.0.tool-changed
# home switches
# invert the home input signals
setp bb_gpio.p9.in-11.invert 1
setp bb_gpio.p9.in-13.invert 1
setp bb_gpio.p9.in-15.invert 1
# setp bb_gpio.p8.in-17.invert 1
# setp bb_gpio.p9.in-23.invert 1
# wire the home inputs
net Xhome bb_gpio.p9.in-11 => axis.0.home-sw-in
net Yhome bb_gpio.p9.in-13 => axis.1.home-sw-in
net Zhome bb_gpio.p9.in-15 => axis.2.home-sw-in
# net Ahome bb_gpio.p8.in-17 => axis.3.home-sw-in
# net Bhome bb_gpio.p9.in-23 => axis.4.home-sw-in
grazie