ACOPOSInverter closed loop control on mapp motion

Hello guys,

a customer is trying to implement a P86 closed loop control in mapp motion. The encoder for closing position loop is connected to the asynchronous motor and he has to send the speed command to the inverter.

I already declared a “Purely virtual axis” and used the “General purpose axis interface” declaring a position encoder. But now I don’t understand how to connect the “Purely virtual axis” (position set point) to the speed set point of the inverter. I am forced to use “direct control” (io mapping) or can I use “Motion configuration”?

Thank you for your help!

Hi Giovanni

Intro

First things first, all ACOPOSinverter devices are for speed control and not position control. So even though the P86 supports an encoder, this encoder is not intended for position control, but for closed loop speed control.

closed loop speed control

Generally I would always recommend to use the Motion configuration for inverters in mapp Motion. This gives you the advantage, that you can control the inverter as any other axis without caring for the command word, status bits, inerter error handling and the DS402 state machine. Additionally you can define gearbox ratios and rotary to linear transformations as with servo drives. Also the axis limits (velocity, acceleration, deceleration) are synchronized automatically with the mapp Motion axis config file. That’s why there are some options missing in the ACOPOSinverter configuration when setting it to Motion configuration.

You can use the P86 in closed loop speed control with the motion configuration:

How it may still be possible

If you really need closed loop position control, you have to make the position controller yourself on the PLC. As you mentioned, you could do this with the Purely Virtual axis. You could activate the General Purpose Axis Interface and write a bit of logic to connect this to the inverter. The inverter needs to be set to direct control in that case.

Be aware that all following steps are highly experimental, as the P86 was not made for position control. It may work, but it may also show poor performance and not work well! I never tried this myself, it is just an idea how it could be solved.

Power on / error handling

In the general purpose axis interface you will need to connect the status inputs and control outputs, which you can read / write bitwise from the ETAD words in your PLC program. For that you have to consider the DS402 state machine.
Link to DS402 inverter stet machine

Position controller

Additionally you have to enable the position controller of the general purpose axis interface and connect the encoder position value from the inverter and the speed output to the inverter.

For the encoder value you can probably use the PUC input, which needs to be enabled as additional monitor point on the inverter configuration.
image

The channel can be connected with IO mapping via a PLC variable or directly from the IO channel. I’m not sure of the value for lines per revolution… so you have to find out yourself.
image

For speed setpoint you would need to connect the LFRD output and convert it in your PLC program from REAL (PureVAx) to INT (IO mapping of LFRD)

Do not forget to enable the position controller on the purely virtual axis:
image

In the controller you have to consider, that you can only output whole number RPM values as speed setpoint to the drive, as the LFRD is an INT. So small controller outputs are not effective.

Consider movement limits

Be careful to consider your movement limits. If you set the inverter to direct control, you need to set acceleration and velocity limits on the inverter configuration itself.

At the same time you have the limits of the mapp Motion axis. These two limits should match each other, as otherwise there may be strange behavior.

3 Likes

Thanks Patrick! I tested the closed loop speed control and it works. I didn’t test yet the closed loop position control, maybe in the future. So for now the question is solved! Thank you very much!

Hi Patrick,

mappMotion 5.23.1

I am experimenting with this solution with a P76 and incremental encoder X20DS1319, from your section Power on/ Error handling, I have mapped the control and status words but do we have to manage the control word manually in code or can MpAxisBasic handle the bit structure for PowerOn and ErrorReset.

Is there no mapping for the quick stop bit?

I might be a little lost. Any further guidance on the bit manipulation would be great.

Thank you
Shaun

image

Hi Shaun

Yes, you will have to handle the DS402 state machine yourself. The PureVAx interface has some flags which are same / similar to DS402, but the command bits and especially the inverter states are different. At first view it might seem easier to try figure out which bits can be reused for dirct mapping.

But IMHO it will be best if you make your own small state machine in which you synchronize your DS402 state with the PureVAx interface.

These three pages describe the DS402 state machine:

You need to think which states correspond to which signals in the PureVAx. You could e.g. automatically go to state 3 - Ready to switch on in your state machine and then wait for the gGenAxis.Control.PowerOn to give the further commands to the inverter.

I’m currently quite busy so I’m sorry that I cannot help more.

Hi Patrick,

Thanks for that and no problem for the further help, engaging on this platform is great!

I am torn between which path to follow, I have pretty good position control with mappMotion standard axis using mpAxisBasic & MC_BR_VelocityControl with a proportional controller to adjust the speed over the top myself. But I did want to try the virtual axis with the built in position controller.

I will try and make some time to implement, if I do I will post my findings :slight_smile:

Thank you!
Shaun

1 Like

Hello all,

i have an application with MpAxisBasic in combination with a Virtual Axis PureVax. The drive i’m using is a P66, an encoder is connected to X20DC1376 counter card.

It looks after some start up troubles quite nice. But I have one question/remark.

I’m trying to run as quick as possible. I will get some lag, but this is ignored by making the position error big. For the application it’s not causing trouble on some lag.

The strangest is MpAxisBasic gives “move done” and “InPosition” whether the virtual axis isn’t finished yet because of the lag. MpAxisBasic doesn’t look to the encoder, but gives “Move done” On the “expected” position the axis should be.

Down below i added a picture of a trace.

In this picture the middle trace is the position of MPAxisBasic, The one on top is the real position from the encoder. Down is the “Move Done” bit. The lag error is around 60mm. The “Move Done” signal is already comming 60mm before it’s really done. Is there a way to correct this. After my opinion “Move Done” should come when the axis is really finished.

Already thanks in advance.

As you already mentioned the MoveDone is set, when the set point generation is finished.
If you want to check if the actual position is between some window of the expected end position, you will have to implement this in your application.