Hello folks,

I try to get an encoder to work on a beaglebone black using hal_pru_generic.
If I rotate the encoder the encoder component doesn't say anything.
I'm sure I'm missing something but I've no clue what.

here my setup:

bbb, no cape hardware attached.

******************************
OS, kernel, overlays
******************************

machinekit@beaglebone:/opt$ sudo scripts/tools/version.sh

git:/opt/scripts/:[66b9438a789ce79859aa5489de9d952b6242d526]
eeprom:[A335BNLT000C1716BBBG0543]
model:[TI_AM335x_BeagleBone_Black]
dogtag:[Machinekit Debian Image 2019-12-16]
bootloader:[microSD-(push-button)]:[/dev/mmcblk0]:[U-Boot 
2019.04-00002-g3d8c979660]:[location: dd MBR]
bootloader:[eMMC-(default)]:[/dev/mmcblk1]:[U-Boot 
2019.04-00002-g3d8c979660]:[location: dd MBR]
UBOOT: Booted Device-Tree:[am335x-boneblack-uboot-univ.dts]
UBOOT: Loaded Overlay:[AM335X-PRU-UIO-00A0]
UBOOT: Loaded Overlay:[BB-ADC-00A0]
UBOOT: Loaded Overlay:[BB-BONE-eMMC1-01-00A0]
kernel:[4.19.82-bone-rt-r41]
/boot/uEnv.txt Settings:
uboot_overlay_options:[enable_uboot_overlays=1]
uboot_overlay_options:[disable_uboot_overlay_video=1]
uboot_overlay_options:[disable_uboot_overlay_audio=1]
uboot_overlay_options:[disable_uboot_overlay_wireless=1]
uboot_overlay_options:[uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo]
uboot_overlay_options:[enable_uboot_cape_universal=1]
pkg check: to individually upgrade run: [sudo apt install --only-upgrade 
<pkg>]
pkg:[bb-cape-overlays]:[4.14.20191218.0-0rcnee0~stretch+20191218]
pkg:[bb-wl18xx-firmware]:[1.20190227.1-0rcnee0~stretch+20190227]
pkg:[kmod]:[23-2rcnee1~stretch+20171005]
WARNING:pkg:[librobotcontrol]:[NOT_INSTALLED]
pkg:[firmware-ti-connectivity]:[20180825+dfsg-1rcnee1~stretch+20181217]
groups:[machinekit : machinekit adm kmem dialout cdrom floppy audio dip 
video plugdev users systemd-journal i2c bluetooth netdev gpio pwm eqep 
remoteproc admin spi docker tisdk weston-launch xenomai cloud9ide]
cmdline:[console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 
root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M 
net.ifnames=0 rng_core.default_quality=100 quiet console=tty0 
console=ttyO0,115200n8]
dmesg | grep remote
[    1.208558] remoteproc remoteproc0: wkup_m3 is available
[    1.323638] remoteproc remoteproc0: powering up wkup_m3
[    1.323657] remoteproc remoteproc0: Booting fw image 
am335x-pm-firmware.elf, size 217168
[    1.325717] remoteproc remoteproc0: remote processor wkup_m3 is now up
dmesg | grep pru
dmesg | grep pinctrl-single
[    0.772313] pinctrl-single 44e10800.pinmux: 142 pins, size 568
dmesg | grep gpio-of-helper
[    0.784074] gpio-of-helper ocp:cape-universal: ready
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
END

*********************
Pinmux Settings
*********************

machinekit@beaglebone:~$ for i in 27 28 29 30 31 41; do config-pin -q 
P9_$i; done;
P9_27 Mode: pruin
P9_28 Mode: pruin
P9_29 Mode: pruin
P9_30 Mode: pruin
P9_31 Mode: pruin
P9_41 Mode: pruin

*********************
machinekit config
*********************

**********************
.ini file
**********************

[PRUCONF]
DRIVER=hal_pru_generic
PRUBIN=rt-preempt/pru_generic.bin
CONFIG=pru=0 halname=hpg num_stepgens=1 num_encoders=2

###############################################################################
# Hardware Abstraction Layer section
###############################################################################
[EMC]

# Name of machine, for use with display, etc.
MACHINE =               elLeadscrew

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


###############################################################################
# Sections for display options 
###############################################################################
[DISPLAY]
# Name of display program, e.g., tkemc
DISPLAY = axis
#DISPLAY = tkemc
#DISPLAY = gscreen

# Touchy currently won't work without some hardware buttons/jog-wheel
#DISPLAY = touchy

# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME =            0.200

# Path to help file
HELP_FILE =             tklinucnc.txt

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

# 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 =     1.5

# Prefix to be used
#PROGRAM_PREFIX = /home/machinekit/machinekit/nc_files/
#PROGRAM_PREFIX = ../../../nc_files/
PROGRAM_PREFIX = /home/machinekit/machinekit/nc_files

# Introductory graphic
INTRO_GRAPHIC =         machinekit.gif
INTRO_TIME =            5

# Increments for the JOG section
INCREMENTS = 10 1 0.1 0.01


#PYVCP = 3D.Temps.panel.xml

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python


###############################################################################
# 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 =        pru-stepper.var

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

EMCMOT =                motmod

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

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

# Servo task period, in nanoseconds
SERVO_PERIOD =          1000000


###############################################################################
# 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 =               enctest.hal

# list of halcmd commands to execute
# commands are executed in the order in which they appear

HALUI =                 halui



###############################################################################
# Trajectory planner section
###############################################################################
[TRAJ]

AXES =                  1
COORDINATES =           X
MAX_ANGULAR_VELOCITY = 45.00
DEFAULT_ANGULAR_VELOCITY = 4.50
LINEAR_UNITS =          mm
ANGULAR_UNITS =         degree
CYCLE_TIME =            0.010
DEFAULT_VELOCITY = 20.00
MAX_LINEAR_VELOCITY = 200.00





###############################################################################
# Axes sections
###############################################################################
[AXIS_0]

# 
# Step timing is 40 us steplen + 40 us stepspace
# That gives 80 us step period = 12.5 KHz step freq
#
# Bah, even software stepping can handle that, hm2 doesnt buy you much with
# such slow steppers.
#
# Scale is 200 steps/rev * 5 revs/inch = 1000 steps/inch
#
# This gives a maxvel of 12.5/1 = 12.5 ips
#


TYPE =              LINEAR
MAX_VELOCITY =       200.0
MAX_ACCELERATION =   3000.0
# Set Stepgen max 20% higher than the axis
STEPGEN_MAX_VEL =    240.0
STEPGEN_MAX_ACC =    3600.0

BACKLASH =           0.000

# scale is 200 steps/rev * 5 revs/inch
SCALE =  -160

MIN_LIMIT =             -1.0
MAX_LIMIT =             220.0

FERROR =     1.0
MIN_FERROR = 0.25

HOME =                  0.000
HOME_OFFSET =           0.00
HOME_IGNORE_LIMITS =    YES
HOME_USE_INDEX =        NO
HOME_SEQUENCE =         0

# Set to zero if you don't have physical home/limit switches
# Set to the desired homing and latch velocity if you have switches
# See: https://github.com/machinekit/machinekit-docs
HOME_SEARCH_VEL =       0.0
HOME_LATCH_VEL =        0.0

# these are in nanoseconds
DIRSETUP   =              200
DIRHOLD    =              200
STEPLEN    =              1000
STEPSPACE  =              1000



[EMCIO]

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

# cycle time, in seconds
CYCLE_TIME =            0.100

# tool table file
TOOL_TABLE =            tool.tbl


****************************************
.hal file
****************************************

# Launch the setup script to make sure hardware setup looks good

loadusr -w ./setup.sh
loadusr -w config-pin -f ./enctest.bbio


# ###################################
# Core EMC/HAL Loads
# ###################################
# kinematics
loadrt trivkins


# trajectory planner
loadrt tp

# motion controller, get name and thread periods from ini file
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD 
num_joints=[TRAJ]AXES tp=tp kins=trivkins


# load low-level drivers
loadrt hal_bb_gpio output_pins=826,914,923 input_pins=817
loadrt [PRUCONF](DRIVER) prucode=$(HAL_RTMOD_DIR)/[PRUCONF](PRUBIN) 
[PRUCONF](CONFIG)



# ################################################
# THREADS
# ################################################
# hpg = [PRUCONF](DRIVER)
addf hpg.capture-position                 servo-thread
addf bb_gpio.read                         servo-thread
addf motion-command-handler               servo-thread
addf motion-controller                    servo-thread
addf hpg.update                           servo-thread
addf bb_gpio.write                        servo-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.43 PRU1.out2
setp hpg.stepgen.00.steppin        813
# P8.44 PRU1.out4
setp hpg.stepgen.00.dirpin         812



# ##################################################
# Standard I/O - EStop, Enables, Limit Switches, Etc
# ##################################################

# Create estop signal chain
# Drive software estop to hardware
net estop-out iocontrol.0.user-enable-out => bb_gpio.p8.out-26
setp bb_gpio.p8.out-26.invert 1

# Monitor estop input from hardware
net estop-loop bb_gpio.p8.in-17 => iocontrol.0.emc-enable-in
setp bb_gpio.p8.in-17.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

# Axis enable signal (active low)
net emcmot.00.enable => bb_gpio.p9.out-14
setp bb_gpio.p9.out-14.invert 1

# Machine power
# Use halui.machine.is-on instead?
net emcmot.00.enable => bb_gpio.p9.out-23


# ##################################################
# Encoder stuff
# ##################################################

setp hpg.encoder.00.chan.00.A-pin       2927
setp hpg.encoder.00.chan.00.B-pin       2928
setp hpg.encoder.00.chan.00.index-pin   2929


*********************************
END configs
*********************************

after start axis
this setup produces steps and dir on P8_13 and P8-12 as expected

in hal config (from axis) i can see that

hpg.encoder.00.chan.00.A-pin
hpg.encoder.00.chan.00.B-pin
hpg.encoder.00.chan.00.index-pin

are set correctly, but on rotating the encoder nothing happend to the 
encoder component

Thanks for any hints
Ju

-- 
website: http://www.machinekit.io blog: http://blog.machinekit.io github: 
https://github.com/machinekit
--- 
You received this message because you are subscribed to the Google Groups 
"Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/machinekit/c2bfe8c0-7742-43e2-9a83-b17d73ca0016%40googlegroups.com.

Reply via email to