I am trying to send a square digital signal from a UR3 to an Arduino board, but I am encountering issues when optimizing the duty cycle, because the robot is quite unstable.
Here is the set up:
- One output (tool DO0) goes from the UR to Arduino.
- In between the UR and Arduino, there is a optocoupler to transform the signal from 24 to 5V.
- The Arduino generates also the same square signal, but it’s connected only to the oscilloscope.
- For testing: the other output (tool DO1) is connected to an oscilloscope. Both signals (DO0 and DO1) stream the same square signal. Additionally, the oscilloscope also measures what the Arduino receives from the optocoupler the other square signal.
- Top: the square signal from DO1 has a falling time of 12 ms. This is measured directly on the robot.
- Bottom: what the Arduino receives and streams. The yellow square signal is the digital input that the Arduino receives from the optocoupler and the blue is a square signal generated from Arduino with an actual active cycle of 25.
- Comparing the graphs, the robot should generate a square signal similar to what the Arduino shows. However, it generates the yellow signal, which has an active cycle way shorter than it should.
The code on the robot side:
def writeTest(): testSend = False TEST_PERIOD = 0.025 while True: set_tool_digital_out(0,testSend) set_tool_digital_out(1,testSend) sleep(TEST_PERIOD) testSend = not testSend end end # main set_tool_digital_output_mode(0,2) set_tool_digital_output_mode(1,2) set_tool_voltage(24) writeTest()
So here are my questions:
- Why does the voltage drop before the active cycle is completed? Should it not drop after the first 25ms, when the code sets the signal to 0?
- If tool DO1 is directly connected to the oscilloscope, then the optocoupler and intermediate hardware has no role on the falling time?
- Is there any way to short this falling time or to move it to the inactive cycle?