Jump to content
OMRON Forums

Analog sensor to control wheel


Recommended Posts

I have a motor with a wheel on it which isn't centered. I have an analog sensor which can see the distance to the wheel and gives 0-10 V as output. What is the best way to use the sensor, because now i have it set up in the ECT with type 1, Single 32-bit register read. The value I get is is about 5000 - 32000, and it changes with the distance of the wheel to the sensor.


The sensor can't see the direction the wheel is going by only the distance. The value it displays loops between the two values, so I can't use the jog command to go to a specific location. Is there a way to control a motor without a sensor giving a direct location of the motor back, like sending direct voltage to the motor to turn it?

Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images



I am not sure I fully understand what you are saying here. Does the motor itself have an encoder? Is this analog sensor in addition to the encoder? What is the control goal of this process?


What kind of motor is it?


There is a way to run a motor in open loop with simulated feedback. It's called "Direct Microstepping" and you can look it up in the Power PMAC User Manual. This can be applied to DC brushless motors, steppers, and AC induction motors, but is not as precise as using actual feedback.


I'll need some clarification before I can help with any settings.

Link to comment
Share on other sites

Hi Charles,


What I'm trying to do is test if I can switch the encoder of the motor to a different one. We will need to do this later on in real projects so I'm trying to figure out how it works.


The motor is a DC brush motor which has a quadrature encoder connected to it. I can run it with the quadrature encoder on it when I'm using a jog command like #1j=1000. Now I want to use the analog encoder to move the motor to a specific location. The analog encoder can only give a distance from itself to the wheel, which will result in a value between about 4000 and 31000. The attached pictures show the set-up of the motor with the analog sensor.


I don't think the direct microstepping is going to work, because it is a DC brush motor.


Is it only possible to move brushless, stepper and AC induction motors without an encoder which directly returns the location of the motor, or are there other ways to do it? This is a crucial part of our implementation, so it would be great if we could use your software for it.



Also when I try to use the analog sensor to close the loop, it doesn't hold stil when I enable the closed loop, it starts to run as you can see on the graph. There is a bit of noise on the signal, but I don't think it is enough to cause the motor to go this fast and uncontrolled. What could cause this?






Link to comment
Share on other sites

From your pictures, it looks like you just need to line up the wheel with the sensor. Is that right? In this case, you do not need to change feedback at all. Just make a PLC to jog until the motor is in the right spot.


Something like this:


global SensorTarget = 10000; // user-defined

open plc 2

local Mtr1NetPos;

local OriginalMtr1JogSpeed = Motor[1].JogSpeed;

Motor[1].JogSpeed=1 // a small speed

jog1+; // Run the motor positive

while(abs(SensorPos - SensorTarget) > 0.1)


jog/ 1; // Stop the motor


disable plc 2



SensorPos above would be a pointer to your sensor's value.


If you insist on changing the motor's feedback, just redirect Motor[x].pEnc and Motor[x].pEnc2 within the same servo cycle and then change your servo loop gains (since the feedback resolution would change). You will probably need two sets of gains, one for each feedback device, for this application, which you load when you change to each respective feedback device.

Link to comment
Share on other sites

This topic is now closed to further replies.

  • Create New...