@droftarts Excellent thank you!
Here is the video. It first runs through the magnetic encoder calibration which sounds smooth. You can hear the jerk at the beginning of the linear encoder calibration.
@droftarts Excellent thank you!
Here is the video. It first runs through the magnetic encoder calibration which sounds smooth. You can hear the jerk at the beginning of the linear encoder calibration.
@dc42 We have recorded a video showing both calibration routines but I am unable to post a link because of my reputation. Do you have another option for getting the video link to you?
The motion is fine and smooth for operation during the magnetic cycle. You can hear a loud jerk at the beginning of the linear encoder calibration cycle, quickly followed by the calibration failing.
Thank you!
@ironhydroxide Thank you for the reply. Our system is currently setup to do 5mm/rev of travel. Yes, we have been doing some small motor movements before beginning the calibration. We tried your suggestion of implementing cycles/rev instead of counts/rev for the C parameter but unfortunately no luck.
@ironhydroxide Is there a way to manually perform the calibration for the linear encoder? It is my understanding that we cannot use the system until both encoders have been calibrated. Thank you for the reply!
@dc42 Thank you for the reply!
We went through the steps that you recommended and tried the binaries but still are facing the same error. We have noticed that there is a jerk at the beginning of the quadrature calibration that may be causing us to skip steps. We do not see this jerky motion during normal operation or during the magnetic encoder calibration. Do you have any idea of what could be causing this? Our driver configurations are all listed above.
Hello,
We are trying to get a linear encoder and magnetic encoder setup with our 1HCL V1.0a expansion board. We have the magnetic shaft encoder setup and are trying to get the linear encoder configured. We are using a Phidgets ENC4110_0 quadrature encoder.
The process we have been using is as follows:
Our configuration file along with m122 for attached board is below. Thank you in advance!
code_text
```M569.1 P50.0 T1 S200 R40 I0 D0 C1000; Configure the 1HCL board at CAN address 50 with a quad shaft encoder,
;M569 P50.0 D4 S1;set drive 0 go forward, address 50, spreadcycle, CLOSED LOOP
M569 P50.0 S1 D2;set drive 0 go forward, address 50, spreadcycle, OPEN LOOP
M584 X50.0; set X drivers
M917 X0 ; Set the closed loop axes to have a holding current of zero
M350 X16 ; 16 microstepping
M92 X640.00 ; set steps per mm
M566 X100.00 ; set maximum instantaneous speed changes (mm/min)
M203 X3000.00 ; set maximum speeds (mm/min)
M201 X10.00 ; set accelerations (mm/s^2)
M906 X4000 I50 ; set motor currents (mA) and motor idle factor in per cent
M574 X2 S1 P"!50.io0.in"
M915 X S3 F0 R0
The commands to perform calibration are as follows
M569 P50.0 D4 S1 ;closed loop
M569.6 P50.0 V2 ;magnetic encoder calibration
M569.6 P50.0 V1;quadrature encoder calibration
And our m122 response is:
M122 B50
Diagnostics for board 50:
Duet EXP1HCL rev 1.0a or earlier firmware version 3.5.4 (2024-11-24 10:39:28)
Bootloader ID: SAME5x bootloader version 2.4 (2021-12-10)
All averaging filters OK
Never used RAM 45676, free system stack 178 words
Tasks: EncCal(1,nWait 6,0.1%,175) Move(3,nWait 7,0.0%,131) CLSend(3,nWait 6,0.0%,147) HEAT(2,nWait 6,0.0%,105) CanAsync(5,nWait 4,0.0%,66) CanRecv(3,nWait 1,0.0%,31) CanClock(5,nWait 1,0.0%,64) TMC(4,nWait 6,62.3%,321) MAIN(1,running,36.5%,253) IDLE(0,ready,0.1%,29) AIN(2,nWait 2,1.0%,255), total 100.0%
Owned mutexes:
Last reset 00:15:31 ago, cause: software
Last software reset data not available
Driver 0: pos -200674, 640.0 steps/mm, tuning/calibration failed, SG min 26, mspos 1000, reads 44823, writes 44595 timeouts 0, steps req 0 done 13441
Moves scheduled 1, completed 1, in progress 0, hiccups 0, segs 3, step errors 0, maxLate 0 maxPrep 14, maxOverdue 0, maxInc 0, mcErrs 0, gcmErrs 0, ebfmin 0.00 max 0.00
Peak sync jitter -6/8, peak Rx sync delay 185, resyncs 0/0, next timer interrupt due in 4 ticks, enabled, next step interrupt due in 3691560387 ticks, disabled
VIN voltage: min 24.2, current 24.2, max 24.3
V12 voltage: min 12.0, current 12.1, max 12.1
MCU temperature: min 31.9C, current 39.2C, max 39.2C
Last sensors broadcast 0x00000000 found 0 207 ticks ago, 0 ordering errs, loop time 0
CAN messages queued 7691, send timeouts 0, received 4882, lost 0, errs 0, boc 0, free buffers 38, min 38, error reg 0
dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 278, adv 37137/37137
Closed loop driver 0 mode: closed loop, pre-error threshold: 2.00, error threshold: 4.00, encoder type linearComposite, position -32
Shaft: Encoder reverse polarity: no, full rotations 0, last angle 10911, minCorrection=-30.7, maxCorrection=26.1, agc 117, mag 4559, no error
Lin: Encoder reverse polarity: no, raw count 65504
Tuning mode: 0, tuning error: 0x10, collecting data: no
Control loop runtime (us): min=5, max=66, frequency (Hz): min=24, max=17857
Accelerometer: none
I2C bus errors 12, nak
Hello,
I am using a 1HCL expansion board, trying to get closed loop control of a stepper motor with magnetic encoder working. The motor runs without problem in Open Loop Mode. Switching to closed loop mode, we receive an error when running calibration M569.6. When running M569.6 P50.0 V2 we receive "Error: driver is not in direct mode". Any help would be appreciated. Configuration script is below. Thank you!
config.g:
;Enable PanelDue
M575 P1 S1 B115200
; Enable Modbus Serial
M575 P1 S7 B9600
;Configure 1HCL-0 to Address 50
;M952 B123 A50
M569.1 P50.0 T3 S200 R100 I0 D0 E4:6 ; Configure the 1HCL board at CAN address 50 with a magnetic encoder,
;M569 P50.0 S1 D2;set drive 0 go forward, address 50, spreadcycle, OPEN LOOP
M569 P50.0 D4 S1;set drive 0 go forward, address 50, spreadcycle, CLOSED LOOP
M584 X50.0; set X drivers
M917 X0 ; Set the closed loop axes to have a holding current of zero
M350 X16 ; 16 microstepping
M92 X640.00 ; set steps per mm
M566 X300.00 ; set maximum instantaneous speed changes (mm/min)
M203 X1000.00 ; set maximum speeds (mm/min)
M201 X500.00 ; set accelerations (mm/s^2)
M906 X4000 I30 ; set motor currents (mA) and motor idle factor in per cent
Hello, I noticed this old thread and was wondering if anything has changed:
https://forum.duet3d.com/topic/2985/current-position
We are currently doing a long probe move where it would be very beneficial for us to query the machine position. Thank you!
@dc42 I should clarify that when we use the move.axes[N].machinePosition in Gcode it works well. When using the rr_model with HTTP, it does not seem to have the same functionality.
@dc42 Hi, thanks for the reply.
Yes we have tried that, unfortunately it only returns the position that the machine is heading. It does not output the current position.
Hi all,
Does anybody know of a way that we can pull the current machine position through HTTP requests such as rr_model? Currently , if we use rr_model we are only able to see where the machine is going, not where it is located. Right now, we are finding our machine position through M118 telnet messages imbedded within our gcode. If we could do this externally it would be ideal.
thanks in advance!
@dc42 We are using a Duet 3 MB 6HC with the latest firmware, 3.3 I believe? Alan's answer was perfect, it is exactly what I was looking for.
@alankilian That worked! Thank you very much for the help. I will run with it from here
@alankilian so I used the following line to try to connect to the machine:
sock = socket.create_connection((duet_host, 23), timeout=10)
I am getting this response: [WinError 10061] No connection could be made because the target machine actively refused it
Is there a security setting within the duet that is causing this to happen?
@alankilian Hi thanks for the quick reply. To be honest I am not really sure what I am doing.
Yes I am running the python script from my PC.
I was under the impression that the Duet would send a message to the specified port on my pc. I am obviously mistaken. Let me try to connect to a telnet port on the duet and see how that goes.
Hi all,
I am hoping to read basic telnet messages sent through M118. I am running my Duet in standalone mode and it is directly connected to my pc. I am trying to use the socket library in python to listen for messages, but I am not having any luck. My basic config.g file contains the following:
global g = 0
M586 P2 S1 R23
M553 P255.255.255.0
M552 S1 P192.168.2.80
I am using the following macro to try to test the telnet messages:
set global.g = 0
while global.g < 20
M118 P4 S"message"
set global.g = global.g + 1
G4 S3
And I am trying to use the following super basic Python script to listen:
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 23)
sock.bind(server_address)
sock.listen(1)
while True:
print(sys.stderr)
print('waiting for a connection')
connection, client_address = sock.accept()
If anybody could help me out I would definitely appreciate it. Thanks in advance!
Thanks for the reply. I will play around with it!
We are just trying to pull the analog readings from our I/O sensors. We have them setup for a linear scale.
Hi all.
We are trying to pull analog data from our I/O pins as quickly as possible. We are currently doing that with the machine/status HTTP request in a Python script. The script pulls the full machine status, isolates our important sensors, and then saves that data.
Is there a faster way to do this? Potentially a method that would not require an HTTP request? We are currently running our Python script from a raspberry pi that is connected to the duet.
Thanks for your help.