Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to assign the 4th amplifier as U axis
#1
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.
Reply
#2
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,
Sina Sattari
Hardware Engineering Manager
Delta Tau Data Systems, Inc.
Reply
#3
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
Reply
#4
(12-23-2011, 01:44 AM)Raghav Wrote: 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.
Reply
#5
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.
Reply
#6
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.
Reply
#7
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.
Reply
#8
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.
Reply
#9
(04-03-2013, 09:51 AM)steve.milici Wrote: 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
Reply
#10
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.
Reply
#11
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.
Reply
#12
(06-30-2013, 03:18 PM)Richard Wrote: 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.
Reply
#13
In regards to the issue with the pure DAC out value. Your Ixx30 is probably too large. Also note that the "ramping" of the voltage is controlled by PMAC acceleration I-variables and commands (Ixx20, Ixx21, Ixx19, Ixx17, TA(n) and TS(n)).
Reply
#14
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
Reply
#15
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.
Reply
#16
(04-03-2013, 09:51 AM)steve.milici Wrote: 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.
Reply
#17
Make certain that all servo gains are set to zero except for proportional (Ixx30). Also DAC offsets must be at zero (Ixx29, Ixx79). There should be no backlash or any compensation tables for this motor.
Reply
#18
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.
Reply
#19
(07-15-2013, 04:06 PM)steve.milici Wrote: 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.


.txt   M3_IVR.txt (Size: 5.49 KB / Downloads: 12)
Reply
#20
To add to the above post, the DAC register M379 shows 1791 for all the value of J command.
Reply
#21
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?
Reply
#22
(07-20-2013, 12:18 PM)tahoe brian Wrote: 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.
Reply
#23
(07-15-2013, 04:06 PM)steve.milici Wrote: 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.
Reply
#24
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.
Reply
#25
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.
Reply
#26
The setup I have given you puts PMAC into a “pure position” mode as a voltage output. The DAC output follows the commanded trajectory. There is no PID loop to try to “fight” following error. This is commonly used in piezo systems or other “drives” that provide the PID and require only pure position command.

What exactly is the hardware you are connecting to the PMAC?
Reply
#27
(08-15-2013, 04:23 PM)steve.milici Wrote: The setup I have given you puts PMAC into a “pure position” mode as a voltage output. The DAC output follows the commanded trajectory. There is no PID loop to try to “fight” following error. This is commonly used in piezo systems or other “drives” that provide the PID and require only pure position command.

What exactly is the hardware you are connecting to the PMAC?

Yes, its a Piezo actuator. I have a stain gauge sensor output which provides the displacement in terms of voltage. Can it be used along with a A/D converter and form a closed loop? But the issue is the sensor output voltage is available only when the Piezo is in closed loop in their amplifier. So I'm confused and since there cannot have two closed-loops, I was asking for the method to control in open loop.
Can you suggest me in this case.
Reply
#28
OK, I understand now. It is not clear what your issue is with FRAX. First of all, what have you done about axis definition. You mention motor 4 and U axis. Have you defined the axis, i.e. #4->scale factor U+offset? (for example #4->2000U, where 2000 counts would equal one user position unit. Without an axis definition, or a correct one, things won't work if it is FRAX axis
Reply
#29
(08-15-2013, 05:30 PM)tahoe brian Wrote: OK, I understand now. It is not clear what your issue is with FRAX. First of all, what have you done about axis definition. You mention motor 4 and U axis. Have you defined the axis, i.e. #4->scale factor U+offset? (for example #4->2000U, where 2000 counts would equal one user position unit. Without an axis definition, or a correct one, things won't work if it is FRAX axis

Hi Brian,
Yes I did that. As I mentioned 29000 counts provides me 8.85V which provides me 20 micron displacement. 1450 cts provides me 1 micron.
Reply
#30
So, what specifically is the symptom of your problem?
Reply
#31
(08-15-2013, 08:01 PM)tahoe brian Wrote: So, what specifically is the symptom of your problem?

When I try to move the axis in FRAX mode and generate features, it doesn't produce the desired design feature. But this is not the case with the tuned linear axes based machining. So I'm not sure of the exact cause of this issue and how to overcome this with the current open-loop setup
Reply
#32
It is important to understand what the concept of "vector feedrate" does and how it works. The purpose of a vector feedrate command (F...) is to permit the user to command a move in any direction in a plane or space and have the tool speed be the same in all directions, with PMAC automatically figuring out how fast each axis must move to get that net tool speed. This concept really only makes sense in 2D or 3D Cartesian space, which is why the default "feedrate axes" (FRAX) are X, Y, and Z.

People get in trouble when they try to add a 4th feedrate axis, because it no longer makes geometric sense. I don't think the units of your U axis are the same as those of X, Y, and Z. I think you need to leave your feedrate axes at the default of X, Y, and Z. When you command only a non-feedrate axis in feedrate mode, the parameter Isx78 controls the speed of the move, not the latest F value.

All of this is independent of the issue of if and how the servo loop is closed -- this issue is with the trajectory generation of commanded positions.
Reply
#33
Curt, assuming that the U axis definition is correct, shouldn't it work OK as long as the FRAX command arguments are limited to 3 orthogonal axes? For example, if the U axis is parallel to X and he wants to move and control speed in U,Y,Z space, then FRAX(U,Y,Z) followed by motion with the F feedrate command should work, correct?

I do agree that four orthogonal axes would require transcending into different universe.
Reply
#34
Brian:

You are correct that if the U axis is defined in the same units as the Y and Z axes (and you are not trying to do a simultaneous X move), then with U as one of the feedrate axes, you can do feedrate-based moves that make geometric sense.

This is why we give you the flexibility of the FRAX command, instead of reserving the functionality just to the X, Y, and Z axes, as most controllers do. However, the flexibility does lead to some confusion.
Reply
#35
Raghav: perhaps if you post the axis definition statements for each axis, the code snippet that doesn't work, and a brief description of the machine geometry and specifically what you observe when you run the snippet, then we can help solve the problem. My guess is that there is some geometric violation.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)