Jump to content
OMRON Forums

How to assign the 4th amplifier as U axis


Raghav

Recommended Posts

I'm using the 4th amplifier to provide a direct voltage to a driver. I'm using O command to supply the required voltage as counts. If I need to use a GUI to actuate the driver by assigning the 4th amplifier as U axis, what needs to be done? Also how to provide the required voltage from GUI.

 

Thanks.

Link to comment
Share on other sites

  • Replies 34
  • Created
  • Last Reply

Top Posters In This Topic

Raghav,

 

I assume you want to send voltage command to a drive from your GUI and your question is how to do so. Here are two approaches:

 

If you are only interested in voltage and don't want any feedback from the axis, deactivate the motor on channel 4 (I400=0) and write directly to the DAC output using suggested M-variable M402. This will output voltage on your 4th channel.

 

If you want to have some feedback but do an open loop control of the axis, set the motor so you can issue open loop commands. Now from your GUI when you want to enable the channel issue a "#4o0" command and change the command value using suggested M-variable M479.

 

Regards,

Link to comment
Share on other sites

  • 4 months later...

Dear Sina Sattari,

I find it difficult to set my 4th axis as U or C axis in the PMAC. I wanted to use the 4th axis in two ways:

1) I want to assign with the certain axis name so that i would be able to provide command directly to the 4th axis through my GUI as I do for my X,Y and Z axis. Example G00 X20 Y10, similar to this I want to assign G00 C10

2) I want to send "O" command directly to 4th amplifier as you had mentioned in your second point (currently I'm using I469 command in PLC ), but I couldn't do it with M479 from PLC or from GUI.

Kindly let me know how I could go about with this two ways of actuation in a more accurate way.

 

Thanks in advance.

 

Regards,

Raghav

Link to comment
Share on other sites

Dear Sina Sattari,

I find it difficult to set my 4th axis as U or C axis in the PMAC. I wanted to use the 4th axis in two ways:

1) I want to assign with the certain axis name so that i would be able to provide command directly to the 4th axis through my GUI as I do for my X,Y and Z axis. Example G00 X20 Y10, similar to this I want to assign G00 C10

2) I want to send "O" command directly to 4th amplifier as you had mentioned in your second point (currently I'm using I469 command in PLC ), but I couldn't do it with M479 from PLC or from GUI.

Kindly let me know how I could go about with this two ways of actuation in a more accurate way.

 

Thanks in advance.

 

Regards,

Raghav

 

Raghav,

 

1-Note that axis definitions are only for closed loop motors, since you are commanding your 4th motor in open loop, you cannot use axis definitions and motion programs.

2-Per sina's suggestion, you should be able to change M479 after you send "#4O0". This should result in changing of your DAC output. Do not change I469 in your PLC, this value should stay constant.

Link to comment
Share on other sites

  • 1 year later...

Hi All,

I'm again struck with the same issue now. But this time, I have a different version of it. I have a positioner system which requires an voltage input and the system is set-up to have it's own closed loop which is not known to the user. But one option I have is an sensor voltage output which I can tap. So kindly let me know how to assign this positioner as an additional axis with by forming a closed loop with the sensor voltage output.

 

Thanks in advance.

Link to comment
Share on other sites

I think in this case you don’t want to use the feedback from the sensor as the two “closed loops” will fight each other. Set Ixx03 and Ixx04 to point to an unused open memory register ($10F0-$10FF) set to zero. Disable the fatal following error (Ixx11=0). Set Ixx30 and Ixx08 to one (you can scale Ixx30 up to get your counts/volts properly).

 

You should be able to calculate the needed Ixx30 by solving: DACOUT = 2^-19 * Ixx08 * Ixx30 * (counts at DACOUT)/2^5 (dividing by 2^5 corrects for the low five bits of PMAC PID being fractional)

 

Example if 10V = 2^21 counts (just over 2 million) then solving for Ixx30:

2^15 = 2^-19 * 1 * Ixx30 * 2^21/2^5

Ixx30 = 2^18

 

You should be able to put the motor in closed loop and define as a "U" axis in a coordinate system with #n->U.

Link to comment
Share on other sites

I have few doubts on the reply.

1)Should we calculate the DACOUT manually while changing the Ixx30 based on the equation?

2)So there is no need for a feedback? Can we directly assign the motor to U axis?

2) How to command the DACOUT corresponding to the NC code. For example, G01 X1 Y1 U10, how will this be translated to the PMAC.

 

Thanks in advance.

Link to comment
Share on other sites

You want to calculate the Ixx30. DACOUT is set to the maximum DAC value for the number of command counts you wish to be the maximum. The example I showed assumes a maximum DAC value of 32768 (2^15) – in this case you will probably want Ixx69 to be the maximum value of 32767:

 

There will be 2^15 DAC bits for a motor command (in counts) 2^21 (2097152) as in #nJ=2097152

2^15 = 2^-19 * 1 * Ixx30 * 2^21/2^5

Ixx30 = 2^18

 

There is no need for feedback as the motor/drive interprets the voltage value as an exact position and it closes the position loop. You could read the position value to compare or identify if there is a problem with motion.

 

Did you try this yet? You can test this without connection to the motor and measure the output with a meter. You can use a jog command like J=2097152 and you should measure 10V on the DAC output or see that the DAC register has 32767.

Link to comment
Share on other sites

  • 2 months later...

You want to calculate the Ixx30. DACOUT is set to the maximum DAC value for the number of command counts you wish to be the maximum. The example I showed assumes a maximum DAC value of 32768 (2^15) – in this case you will probably want Ixx69 to be the maximum value of 32767:

 

There will be 2^15 DAC bits for a motor command (in counts) 2^21 (2097152) as in #nJ=2097152

2^15 = 2^-19 * 1 * Ixx30 * 2^21/2^5

Ixx30 = 2^18

 

There is no need for feedback as the motor/drive interprets the voltage value as an exact position and it closes the position loop. You could read the position value to compare or identify if there is a problem with motion.

 

Did you try this yet? You can test this without connection to the motor and measure the output with a meter. You can use a jog command like J=2097152 and you should measure 10V on the DAC output or see that the DAC register has 32767.

 

Hi Steve,

I finally managed to work on this project. I tried with your procedure and I find once a jog command is provided the voltage surges to the maximum set value based on the Ixx69 value. I tried to set the I369=32767 and found the voltage is set to 20V by providing the command #3J=2097152 or even just by J+ and #3J= 1048576 (which should provide 10V). So based on these can you suggest where I'm making a mistake. Also i tried to change the I369=14337 to make a max. output voltage of 8.75V. Even with this the output voltage is 8.75V for any J value.

 

Kindly let me know how to overcome this issue and assign the axis 3 as "U" and call from my GUI. looking forward for your help.

 

Thanks & Regards,

Raghav

Link to comment
Share on other sites

So if I get this correctly, you have a positioner which for example is:

At 0 position when reading 0 volts

At X position when reading X volts.

 

Then I would do the following:

- Create a virtual motor which you can jog. Alternatively assign to a U axis.

- Set up a comp table proportional to your travel/volts

- Copy the comp table correction into the DAC output to your positioner in a PLC.

 

I think you might actually be able to specify the DAC register as the compensation table target instead of copying it in a plc. I'd have to try it, not in front of a pmac or documentation right now.

Link to comment
Share on other sites

So if I get this correctly, you have a positioner which for example is:

At 0 position when reading 0 volts

At X position when reading X volts.

 

Then I would do the following:

- Create a virtual motor which you can jog. Alternatively assign to a U axis.

- Set up a comp table proportional to your travel/volts

- Copy the comp table correction into the DAC output to your positioner in a PLC.

 

I think you might actually be able to specify the DAC register as the compensation table target instead of copying it in a plc. I'd have to try it, not in front of a pmac or documentation right now.

Link to comment
Share on other sites

So if I get this correctly, you have a positioner which for example is:

At 0 position when reading 0 volts

At X position when reading X volts.

 

Then I would do the following:

- Create a virtual motor which you can jog. Alternatively assign to a U axis.

- Set up a comp table proportional to your travel/volts

- Copy the comp table correction into the DAC output to your positioner in a PLC.

 

I think you might actually be able to specify the DAC register as the compensation table target instead of copying it in a plc. I'd have to try it, not in front of a pmac or documentation right now.

 

Thank you once again Richard. I would appreciate if you could let me know how to perform the configuration by means of a manual or steps to be followed.

 

Thanks in advance.

Link to comment
Share on other sites

Dear All,

Can anyone suggest the best possible way to assign an axis in open loop with an axis name. I tried the methods mentioned except the one by Mr.Richard. I would like to know, if the axis is stable with constant input, can I use the compensation table method. With the other method, I still couldn't achieve the required voltage by Jog mode command (Eg: J=20000) since once a j command is provided, the DACOUT represents a 100% voltage output based on the Ixx69 value. I would like to have a quicker solution as we are running out of time. Thanks in advance.

 

Regards,

Raghav

Link to comment
Share on other sites

The only ways that the DAC saturates using the method provided by Steve Milici are as follows:

 

1. If Ixx33 (integral gain) is non-zero. This needs to be set to zero to use this technique, as do all of the gains Ixx31...Ixx39 My guess is that THIS is the reason that Steve's technique did not work for you

2. If the DAC offset registers Ixx29 and/or Ixx79 are set to some large non-zero number. Set these to zero

3. If you improperly scaled your proportional gain Ixx30.

 

To simplify it in your mind, the DAC output is a function of the error signal, i.e. difference between the command "position" (in this case your desired voltage) and the actual "position". If you set the feedback register to something that always says zero, then the error signal will = command - zero = command. Thus, if you set the scaling registers Ixx08 and the Ixx30 correctly, then the DAC output will be what you want and you shouldn't have a problem.

 

As Steve said you will have to set the fatal following error limit Ixx11 = 0 or it will trip out when your command exceeds this value.

Link to comment
Share on other sites

  • 2 weeks later...

You want to calculate the Ixx30. DACOUT is set to the maximum DAC value for the number of command counts you wish to be the maximum. The example I showed assumes a maximum DAC value of 32768 (2^15) – in this case you will probably want Ixx69 to be the maximum value of 32767:

 

There will be 2^15 DAC bits for a motor command (in counts) 2^21 (2097152) as in #nJ=2097152

2^15 = 2^-19 * 1 * Ixx30 * 2^21/2^5

Ixx30 = 2^18

 

There is no need for feedback as the motor/drive interprets the voltage value as an exact position and it closes the position loop. You could read the position value to compare or identify if there is a problem with motion.

 

Did you try this yet? You can test this without connection to the motor and measure the output with a meter. You can use a jog command like J=2097152 and you should measure 10V on the DAC output or see that the DAC register has 32767.

 

Dear Steve,

I tried your method to assign the open loop motor to an axis. But at the first step, while I try to jog the axis to any count, it's output reads the maximum voltage set by Ixx69. I tried to play around with the Ixx30 but still couldn't achieve the required voltage based on the Jog command. Kindly let me know where I'm making a mistake?

 

Thanks in advance. I haven't tried the compensation table method mentioned by Mr.Richard as I face difficulty in understanding the procedure.

Link to comment
Share on other sites

I have just set this up on my UMAC system and it works perfectly. Post all your motor I-variables and I will check them.

I did find that my scaling is not correct. For a value of 524288 (2^19) for Ixx30 you should get one DAC count for one motor count or j=32768 will be 10 volts. I will check the source of my PID internal calculations.

Link to comment
Share on other sites

I have just set this up on my UMAC system and it works perfectly. Post all your motor I-variables and I will check them.

I did find that my scaling is not correct. For a value of 524288 (2^19) for Ixx30 you should get one DAC count for one motor count or j=32768 will be 10 volts. I will check the source of my PID internal calculations.

 

Dear Mr. Steve,

I tested the DACOUT with the above mentioned scaling and still I get the maximum voltage of either 10 or 8.75V based on the Ixx69 setup. I tried to give a jog command #3J=32768 and the DACOUT was 10V. Also when I commanded #3J=3276, I still have a 10V output. I'm not sure where is the mistake. All the gains and the DAC offset is set to 0. Attached is the I variables for the motor. Kindly check and let me know the whether I need to change any parameter.

 

M3_IVR.txt

Link to comment
Share on other sites

Is it possible that you have a wiring problem? Try doing the test with I330 set to zero. Also, what happens if you issue an "O" command. For example, what voltage do you get with an O10? In looking at your I variables, you have the DAC output address something that is not typical for Motor 3 (which doesn't make it wrong, but you need to make sure you are measuring the output on the correct DAC). I believe you have it pointing to an ACC24 card, is this correct?
Link to comment
Share on other sites

Is it possible that you have a wiring problem? Try doing the test with I330 set to zero. Also, what happens if you issue an "O" command. For example, what voltage do you get with an O10? In looking at your I variables, you have the DAC output address something that is not typical for Motor 3 (which doesn't make it wrong, but you need to make sure you are measuring the output on the correct DAC). I believe you have it pointing to an ACC24 card, is this correct?

 

Good news. Able to move the actuator using the jog command. I made a mistake in the Master scale factor Ixx08. It was still storing the value of 96, though I changed to 1 and saved it. So I can continue with the axis testing now. Thank you so much Mr.Brian for all your valuable inputs.

Link to comment
Share on other sites

I have just set this up on my UMAC system and it works perfectly. Post all your motor I-variables and I will check them.

I did find that my scaling is not correct. For a value of 524288 (2^19) for Ixx30 you should get one DAC count for one motor count or j=32768 will be 10 volts. I will check the source of my PID internal calculations.

 

Thank you Mr.Steve. I followed your steps and it worked exactly the same way as you had mentioned. Thanks a lot for your help.

Link to comment
Share on other sites

  • 4 weeks later...
I face one more issue with this method. When I use this axes in FRAX mode, I'm not able to achieve the required performance. As mentioned earlier, this axis operated with 0-10V input alone. It has no friction or mechanical lag. The same part, if machined the machine axis is able to perform as required. What could be the possible cause for this? Should I perform any tuning, if yes how to go about it. I also face over voltage in the amplifier of the 4th axis while running the NC code in FRAX mode. I had set the maximum voltage I469=29000 which is equivalent to 8.85 volts. So I'm sure of the possible cause of this issue. Again I'm struck with the project because of this. Any help to solve this issue is appreciated.
Link to comment
Share on other sites

If I am still following this thread properly, you have created an open loop spindle. You created a means of using the jog command to set velocity, but you have no position loop. Thus, you have no way of controlling the position of this spindle.

 

It sounds like you were hoping to fool the PMAC into thinking it was doing position control by making the jog command control velocity. These are not the same thing. If you want to do position control you need to have a real position feedback. If you want to simulate position control you need to at least simulate position feedback.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

×
×
  • Create New...