IRC5 to control stepper motor for 3d printing
Irham
✭
Hello everybody,
i was new at this robotic arm world, especially at rapid programing. I want to use the robot to control stepper motor for 3d printing extruder, we had irc 5 controller, with rw 5.x on it, with dsqc652 as the i/o card. we had a concept with the rapid program to send Analog Output (E_Value) Signal and will accept by another controller, maybe Arduino or PLC , but dsqc652 in data sheet didn't have Analog output, so how I'm supposed to control the stepper without Analog Output, or can i control it with Digital output or need to buy additional hardware? any suggestion how to do it? maybe some rapid example and reference will be grateful. sorry for my newbie question, Thanks
Regards,
Irham
0
Best Answers
-
You don't actually have to have the analog output. You can map a group output but tell the robot to treat it as if it were an analog signal. I know that more than one time I have posted examples, a search should turn up those and more.Lee Justice0
-
Look here:
https://forums.robotstudio.com/discussion/comment/33768#Comment_33768
You can manually edit the eio file or change it with robotstudio. When using robotstudio you are effectively editing the eio, as well.Lee Justice0
Answers
-
So, the output still use dsqc 652 then will be received by plc/ Arduino? what was the ABB manual instruction explain about it?
Irham0 -
So i was read more post about i/o group on abb forum , if i want send the 0-255 data value, so i use 8 bit grouping "0-7" ,so in dsqc652 i will set 8 digital output ,maybe D0_0 to D0_7 to represents that unit 0 to 7. then the group output (all 7 output pin) will be send to plc /arduino and will be read as binary value. Then will change the binary to decimal again in plc/arduino, so it would control the stepper with that value, am i at the right path or there more simple solution? pls correct me if wrong .
And to set that group i/o to robot controller, am i had to set it in EIO.cfg or can set via RobotStudio? Thanks
Irham0 -
I Was succeeded to use Group Output to send extruder Value to PLC/Arduino. But There is one problem, when i pressed the pause button the "GO" not change to 0. Then i use trap with system output "Mechanical Unit Not Moving" , i already can change the digital output value that attach with system output, but GO not changed too. GO supposed to be 0 when paused was pressed , and continue the last value before pause .PROC Main()ConfJ \On;ConfL \Off;IDelete tryProgram;CONNECT tryProgram WITH stopValue;ISignalDO do_Stop,1,tryProgram;.........ENDPROCTRAP stopValueIDelete tryProgram;CONNECT tryProgram WITH stopValue;ISignalDO do_Stop,1,tryProgram;SetGO Group_D,0;ENDTRAPThat was my trap routine, is there something wrong that my GO no change the value when paused ?
Are that will be same trap when using Emergency Stop /stop button so the GO reset to 0?regards,Irham0 -
There are going to be several ways you might deal with this. First, set up an event routine instead of the trap. The problem with the trap is that the program is no longer executing. Use both the Stop and Quickstop events to set the group value to zero.
Alternatively, you might consider using the system output for TCP reference speed. You would have to play around with the scaling to get it to behave like you want. You would then not even have to use the SetGO instructions in your program. The values automatically rise and fall based on the tcp velocity. AND, if it stops or e-stops, the value automatically goes to zero.
Latly, you could add a relay to your output power for the IO board such that when there is an e-stop, the power is deenergized, causing the outputs to not be ON.Lee Justice0 -
I Was used the system input for qstop and stop. How to use it in rapid program especially in Virtual Teach Pendant, are they act same with the real one? And in i/o simulation there was the system input , when i click the stop and qstop the robot was stop, but the GO not be "0" . I Think there is something missing, because im not declare it on program or not in stop or qstop program routine below? how to program to trigger the routine when stop button was pressed? can you give me a little examplePROC STOP() ;SetGo Group_D,0;ENDPROCPROC QSTOP()SetGo Group_D,0;ENDPROC
are the event routine look like that? i was copying from this post https://forums.robotstudio.com/discussion/2475/reset-output-values-to-zero
sorry for my newbie question. Thanks for your help before.
the easiest one was the last solution you mentioned before, using a relay, or read digital output signal to enable and disable the stepper program.0 -
The event routines look fine. You just have to set the parameters to run those on the specified events. They are under the controller topic.Lee Justice0
-
Hello,
I was talk to ABB representative, they say we can use dsqc 652 directly to control stepper/servo motor, but from this post https://forums.robotstudio.com/discussion/10994/synchronizing-stepper-motor-to-robot-movements they cant produce PWM, so am i really need PLC/ maybe industrial Arduino like my post before? my robot had devicenet option. maybe you can help what component we need to add. Thanks0 -
What exactly does PWM pulsed output mean? What data/signals does the stepper controller or Arduino need?Lee Justice0
-
I'm sorry i think im misunderstand about PWM at stepper motor (cmiiw), because the stepper driver can be drive with ON OFF of digital signal. for Arduino just need digital signal. and output it to stepper driver (pulse pin) if we didnt connect directly the stepper to dsqc652. i think maybe there is some possible rapid program if some function was called, the digital output from robot will on off with some delay between it continuously to drive the stepper driver , are you think it is possible? maybe you can help us with that rapid example? Thanks0
-
"the digital output from robot will on off with some delay between it continuously to drive the stepper driver"
I don't fully understand what you mean and what you want it to do.Lee Justice0 -
This is what my program looks like to control the stepper driver directly with dsqc652 and blinking the signal very fast in microsecond.
proc main()
.
.MoveL ....Speed 12.000; // when program reach this point it stuck in while loop and didn't continue to next lineMoveL .....Speed 14.000;
.
.
endproc
.PROC Speed(num pulseDelay) // function to control the speed of stepper directly into the driverVAR bool direction:=TRUE;pulseDelay := pulseDelay * 10000;WHILE TRUE DOIF direction THENSetDO driverDIR, 1;SetDO driverPUL, 1;WaitTime pulseDelay / 1000000;SetDO driverPUL, 0;WaitTime pulseDelay / 1000000;ELSESetDO driverDIR, 0;SetDO driverPUL, 0;SetDO driverPUL, 0;ENDIFENDWHILEENDPROC
.
.
how to make the speed function not trap in while loop and can execute in background then just change the value when the speed variable was change?
and i get this warning. how to prevent this happen or how to changes the logical upper and lower value?
''DescriptionThe value 0.57882261 for the System Output TCP Speed, signal ao_tcp, is outside its limits (logical min: 0 m/s, logical max: 0.54000002 m/s).ConsequencesThe new value is not set; the previous value of the analogue signal is preserved.CausesThe logical upper and/or lower limit for the signal may be defined wrongly.ActionsAdjust the values of the logical upper and/or lower limit for the signal and restart the controller.''
or my program was already wrong? can you help me with correct solution, or another suggestion. thanks0 -
WHILE TRUE DO is an infinite loop. Substitute a condition which needs to be no longer TRUE or NOT TRUE for the TRUE in the WHILE DO loop.
Example:
WHILE TestDI(driverPUL) DO
ENDWHILE
WHILE NOT TestDI(driverPUL) DO
ENDWHILE
In some of your code you are doing things just for the sake of doing things. You pass a numeric value for a wait time, multiply it, and then divide it. The only thing needed is to pass the desired value in and then use it.
You may want to use the optional argument for a delay with your SetDO instruction. I am not sure if that is what you need but I am telling you so you know it is available. Also, read up on the instruction, PulseDO. It may also be of use to you.
The error with your TCP speed is because the value is higher than allowed. You need to adjust your scaling for that signal.Lee Justice0
Categories
- All Categories
- 5.5K RobotStudio
- 396 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.8K Robot Controller
- 316 IRC5
- 60 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 796 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 5 Job listings