Jump to content
OMRON Forums

System Setup not working correctly


maartenvervelde
 Share

Recommended Posts

Hi,

 

Currently I'm using a DC brush motor which I initialized through the system setup. It is working without a problem. I heard that the IDE should calculate setpoints when the motor is correctly initialized. I tried to check if it was working so I changed the value of nominal RPM from 3000 to 3, and the maximal RPM from 5000 to 5. The results were that the motor changed nothing. I ran the jog command #1j=100000 before the change and after, and the results were identical.

 

I also tried changing the maximal voltage from 24 to 1, and it still gave the same output. When I normaly put 1V on it, there is no movement.

 

I also tried to make a new virtual motor with the lower values, but I still got the same result.

 

Is it because I'm running my own PID controller, some other problem I didn't see, or is it a bug in the system?

 

Maarten

Link to comment
Share on other sites

  • Replies 11
  • Created
  • Last Reply

Top Posters In This Topic

we would like to know more about the hardware you are using, such as what form factor of the controller, what type of driver you are using.

Did you create your own servo algorithm?

When you set up virtual motor, what do you mean by it got the same result?

 

We need more details on the system.

Link to comment
Share on other sites

The motor is a Maxon motor DC brush motor. I don't have any specs on it, they are nowhere to be found so I estimated the values on which it works now. It is connected to the Power Brick LV 1/3A amplifier. The encoder is a simple quadrature encoder also connected to the power brick LV on a standard encoder connector. I use direct PWM to send commands to the motor.

 

My own servo algorithm is a very simple one, just to try it out. It currently looks like this. http://imgur.com/lomZSJy

 

With the virtual motor I meant that I created a new motor in the system setup where I set the values lower than needed from the start. I than assigned it to a different motor number, Motor[2]. I ran the same test as Motor[2], but the results were the same.

Link to comment
Share on other sites

The reason that you are not seeing the change for your test is that you are doing closed-loop jogging.

 

1. changing the maximum and rated RPM DOES NOT have any effect. That part of the setting is not used in the setup. The original plan is to put those as constraints for maxspeed, but not being implemented yet

 

2. changing max voltage will have effect on Motor[x].PwmSf, which will constrain the output voltage.

 

However, if you are doing closed-loop with some jog speed, then the servo loop will try to keep up with the jog speed no matter what the maximum output is.

The controller will try to keep the speed while maintaining the maximum output constraint.

The fact that you have 1V as the max voltage and the motor still works means that Power Brick LV can still push enough current to achieve the jog speed.

That is why you can not see the effect of changing the max voltage.

If in the case that the maximum voltage is too low, and LV can not push enough current under the voltage constraint, then you will get a fatal following error, and probably amplifier fault.

You will have a hard time to tune the motor since the voltage is too low to get the full power of the motor.

 

You will be able to observe the effect of max voltage setting if you use open loop to run the motor.

In open loop mode, such as #1o5 command, will give you 5% of the max voltage on motor 1.

So if you change the max voltage and use the same command, you will see the speed change.

Link to comment
Share on other sites

Now I have the jog command working with the setpoint generator so the motor accelerates in an S-Curve, and not in a straight line, by setting the Motor[1].JogSpeed, Motor[1].Jogta and Motor[1].Jogts variables.

 

Now I want to limit the motor completely because I run my motor from the servo loop and get the value where to go to from a P variable. I can limit the speed of the motor by changing the value of Motor[1].Pwmsf to a lower value, but that does not work good enough, because the load on the motor is not evenly spread, so it can't get past a certain part if it's to low, but when it is high enough to get past it, it goes to fast and the load starts shaking.

 

Is there a way to limit the acceleration, the jerk and the max speed on the motor for the servo loop, what are the variables I should change?

Link to comment
Share on other sites

it is not desired to limit the speed by changing Motor[x].PwmSf.

This should be set to enable 100% of the motor capability.

Motor[x].JogSpeed should be the structure to change if you want to change speed according to some P-variable.

After Motor[x].JogSpeed is changed, issue jog command again to make effect.

Since standard PID servo loop from Power PMAC is not used, the tuning for user algorithm PID might be difficult.

If the load is uneven, then the motor should exceed fatal following error and stop if the fatal following error is set properly according to the resolution of the encoder.

All these should be handled in a PLC.

 

Yes, there are several structures related to motor acceleration, jerk, and max speed:

 

Motor[x].InvAmax

Motor[x].InvDmax

Motor[x].InvJmax

Motor[x].MaxSpeed

 

Please check the above structures in Power PMAC software reference manual for details.

Link to comment
Share on other sites

We don't use the standard funtionality to run the motor, we set a p variable and in the Simulink model we changed the Motor[x].DesPos to the P variable. This means we are not using motion control programs written in the Delta Tau language. What we want is a setpoint generator who will work whatever the motor is doing.
Link to comment
Share on other sites

We don't use the standard funtionality to run the motor, we set a p variable and in the Simulink model we changed the Motor[x].DesPos to the P variable. This means we are not using motion control programs written in the Delta Tau language. What we want is a setpoint generator who will work whatever the motor is doing.

 

 

Even though you are not using a motion program, Motor[x].jogspeed will still affect the speed when you do jogging.

Motor[x].jogspeed will still be a better way to change the speed than changing pwmsf.

Link to comment
Share on other sites

The problem is that I don't control the motor using the jog commands. I used those commands to test the setpoint generator capabilities and the motor limits. I control the motor from a custom servo loop through the Mptr->ServoOut variable. Is there a way to make a setpoint generator for that?

 

there is a confusion for how you want to control this.

 

If you are trying to close the loop using user servo algorithm, then you have to use jog command in order to close the loop.

If you are trying to do open loop, then user servo is not used.

 

Up till now, the user servo mentioned here is the servo code implemented on the controller side, which can be customized.

But if your servo algorithm is not implemented on controller side, then for our controller, it is open loop since you are just changing the servoout.

 

In that case, the set point velocity is not in control since the motor only reacts on a constant torque with open loop command.

If there is no load or friction, the motor will accelerate.

So in your servo algorithm, you need to look at the feedback and adjust your output accordingly.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share


×
×
  • Create New...