ACOPOS 2 encoder

hi guys , basic question using as 6.3 i have acopos 1090 using ac120 and ac123

i can read the external encoder positon fine, and with normal move velocity and comparitor i can control the main axis and use the second axis as my position variable.

is there an easier way with mapp motion to use the main ac120 for speed only and let the axis move until my setpoint position via ac123 postion for example my axis will feed a wire ,encoder 2 will determine the length, all i want to do is use move absolute and get a precise length which can only be read on encoder2

Hello,

This may work for your application:

Two-encoder control: Motor encoder ENCOD1 for vector control and load encoder ENCOD2 for closed-loop position control

On the other hand, you can run into problems if the two positions are very far apart,

i.e., if there is very high slippage during wire transport (and if there is high elasticity between the motor shaft and the load shaft).

I created a table and added those but it still doesnt work can you show me an example on the config

find ArSim project attached, please.

two_encoder.zip (10.6 MB)

did you add the AcpParTable ‘feature’ ?

image

take a view into mapp Motion Drive Log …

.. to check if the parameters were properly set:

.. or if there some error messages.

thanks will give this a try

yes I did apply feature but I think my mistake was to assign a mapp to the external encoder as well

1 Like

So i have tried this but i do have some issue.

To get the scaling correct for the positioning is not explained.

Basically my servo is on a gearbox that gears down 15-1

The output goes onto a steel wheel thats 100mm diameter.this wheel pulls on a wire hence one rotation feeds rhe wire 314mm ie the circumference of the circle.To compensate for slippage the second encoder is on a wheel that also runs on this wire with no pull force or slippage.

This wheel diameter is 63mm ie 198aprox linear distance per rev.

How do i use this as my master position axis and scale it accurately.

Two encoder method does work to read the encoder but the scaling is completely off.

If i use 2 seperate axis..one to move and one to read then the scaling is fine but this wont be accurate as i dont want to use a move velocity until setpoint

Technical Solution: Configuring Mapp Motion for Dual Encoder Operation on ACOPOS 1090

Hello Austin,

Great question! You can indeed achieve this more elegantly using mapp motion’s built-in encoder handling capabilities. Here’s how to configure your ACOPOS 1090 to use AC120 for velocity control while using AC123 for absolute positioning commands.

Solution Overview

The key is to configure your axis to use AC120 as the motor encoder (for velocity/commutation) while setting AC123 as the position encoder (for positioning commands). This allows move absolute commands to reference the external encoder position directly without comparators.

Step-by-Step Configuration

1. Hardware Setup Verification

Ensure your encoders are connected:

  • AC120 → IF1 (X41) - Motor encoder
  • AC123 → IF2 (X42) - Position encoder (wire length measurement)

2. Axis Configuration in Mapp Cockpit

A. Motor Encoder Configuration (AC120)

  1. Open Mapp Cockpit and navigate to your axis configuration
  2. Under Controller → Velocity Controller:sad_but_relieved_face: - Set VCTRL_S_ACT_PARID = Parameter ID of AC120 encoder
    • This configures velocity feedback from the motor encoder
    • Typical value: 1 (for IF1/X41)

B. Position Encoder Configuration (AC123)

  1. Under Controller → Position Controller:sad_but_relieved_face: - Set PCTRL_S_ACT_PARID = Parameter ID of AC123 encoder

    • This routes position feedback from your external encoder
    • Typical value: 2 (for IF2/X42)
  2. Configure encoder scaling to match your wire length units:

    • Set Encoder.PositionFactor to convert encoder counts to mm (or your preferred unit)
    • Example: If AC123 provides 2048 counts/revolution and your wire advances 10mm/rev:
      • PositionFactor = 10.0 / 2048 = 0.00488 mm/count

3. Controller Parameter Configuration

In your axis parameter structure (typically in axisBasic configuration):sad_but_relieved_face:
```
Axis.Controller.Mode = CTRL_POSITION
Axis.Controller.VelocityController.ActualValueSource = VCTRL_S_ACT_PARID (AC120)
Axis.Controller.PositionController.ActualValueSource = PCTRL_S_ACT_PARID (AC123)
``### 4. Mapp Motion ProgrammingNow your move commands will reference AC123 position:``iec-st
// Wire feeding example
MC_MoveAbsolute_1.Axis := ADR(gAxis_WireFeed);
MC_MoveAbsolute_1.Position := TargetWireLength; // In mm (referenced to AC123)
MC_MoveAbsolute_1.Velocity := FeedSpeed;
MC_MoveAbsolute_1.Execute := TRUE;
```

The axis will:

  • Use AC120 for velocity regulation and smooth motion
  • Use AC123 position as the positioning reference
  • Stop precisely when AC123 reaches your target position

Important Considerations for AS 6.3

Homing Strategy

Since AC123 is your position reference, you need to establish a reference:

  1. Option A - Absolute Encoder (AC123 with EnDat/SSI absolute protocol):sad_but_relieved_face: - Enable Axis.Homing.RestorePositionVariable = TRUE

    • Position is retained after power cycle
    • No homing move required
  2. Option B - Incremental Encoder:sad_but_relieved_face: - Implement a homing routine using MC_Home function block

    • Home to a physical reference switch
    • This establishes the AC123 zero position

Velocity Limitations

  • Monitor that AC120 and AC123 don’t drift significantly during operation
  • If the wire slips, AC120 (motor) and AC123 (wire) positions will differ
  • Consider implementing a monitoring function:

```iec-st
PositionError := ABS(MotorPosition_AC120 - WirePosition_AC123);
IF PositionError > MaxAllowedSlip THEN
// Trigger error/warning
END_IF
```

Commissioning in Mapp Cockpit

  1. Verify Encoder Signals:sad_but_relieved_face: - Monitor both encoder values in real-time

    • Confirm AC123 increments correctly with wire movement
    • Check for proper direction (invert if needed)
  2. Tune Controllers Separately:sad_but_relieved_face: - First tune velocity controller using AC120

    • Then tune position controller using AC123 feedback
    • Use Mapp Cockpit’s auto-tune feature for initial parameters
  3. Test Sequence:sad_but_relieved_face: - Small absolute moves (e.g., 10mm increments)

    • Verify repeatability
    • Check stopping accuracy against AC123 position

Potential Caveats

  1. AS 6.3 Compatibility: This configuration is fully supported in AS 6.3. Ensure you’re using Automation Studio 6.3.0 or later with compatible mapp Motion library version (minimum 5.22.0).

  2. Encoder Resolution Mismatch: If AC120 has significantly different resolution than AC123, you may need to adjust controller gains to prevent oscillation.

  3. Mechanical Compliance: If there’s elasticity in your wire feeding system, consider adding a feed-forward component or adjusting position controller bandwidth.

Alternative Approach (If Above Doesn’t Fully Meet Needs)

If you need even more control, consider using mapp Motion’s virtual axis feature:

  • Create a virtual axis slaved to AC123 position
  • Command the virtual axis with move absolute
  • Use electronic gearing to drive the physical axis (AC120)

This provides additional flexibility for complex motion profiles.

Let me know if you need clarification on any of these steps or encounter specific issues during implementation. The parameter IDs (VCTRL_S_ACT_PARID and PCTRL_S_ACT_PARID) should be visible in your Mapp Cockpit encoder configuration once you’ve assigned the encoders to the appropriate interfaces.

Best regards,
Technical Support

References

  • B&R Automation Help: ACOPOS Multi-Encoder Configuration
  • Mapp Motion Function Block Reference (AS 6.x)
  • ACOPOS 1090 Hardware Manual - Encoder Interface Specifications

this seems like configuration for acopos p3 if im not mistaken

The principle is explained here: Drive control variants (Drive control with motor encoder and load encoder (two-encoder control)

image

so according to this you have to scale the AC123 by

(420) SCALE_ENCOD2_UNITS

(421) SCALE_ENCOD2_REV

(422) SCALE_ENCOD2_COUNT_DIR

with the same system units as your motor encoder.

But maybe there is a better and easier way to configure something like this today. Unfortunately, I haven’t found anything else.
Maybe someone else has a better idea.

Iv managed to make it work. The key was the rotary to linear conversion in the drive setup.

Once done i will upload the steps i did

1 Like