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.
