1

I have a motor that runs between 3 to 3000 RPM. The drive update time is 2.2 micro seconds. What is appropriate an encoder resolution for this work (especially for lower speeds) so the drive could update the motor at each 2.2 micro second without missing signals and instability?

Is there anyway that I demand to update data at longer time (more than 2.2 micro seconds) by same drive? here is the part of a white article written by siemens group. I did my calculation based on this.

enter image description here

and the results of my calculation are as shown below enter image description here

here is the drive specifications enter image description here

  • Please [edit] to include a link to the user manual for the drive. Usually the encoder inputs would be on some sort of interrupt so that they don't depend on the main CPU polling. Otherwise where are you stuck on the calculation? – Transistor Aug 18 '20 at 11:54
  • What have you done to solve this problem already? –  Aug 18 '20 at 12:19
  • 1
    I think you're not framing the scenario properly in you mind. What's the problem if the drive grabs the same encoder position for two consecutive updates cycles if the rotor is still virtually in the same position? I don't see how update time is relevant when picking the encoder. You're speaking almost as if you think the encoder needs to be a different value every time an update occurs. Just pick an encoder resolution where "the rotor is still virtually in the same position" if you're off by one encoder count. So probably no encoder counts less than 256 where you can see the difference – DKNguyen Aug 18 '20 at 13:51
  • "*without missing signals*". Use interrupts to detect input signal changes. Make the interrupt handler function as fast as possible. – AJN Aug 18 '20 at 16:18
  • @Transistor I update the question and add some details. I am supposed to modify a system that didn't work well at low speed. I worked on the calculation and did some research to find the causes of servo motor instability. I ended up by the 25 bit encoder for each turn but it is not in the market. I want to check if my assumptions and calculations are correct – fatemeh katibeh Aug 19 '20 at 06:15
  • @BrianDrummond i update the question by some details. i'd really appreciate it if you take a look and give me some advice – fatemeh katibeh Aug 19 '20 at 06:15
  • @DKNguyen as I mentioned in the update of the question, I am searching for the appropriate encoder in order to reduce the instability of servo motor in low speed so that the motor would perform smoothly. based on the white article of the seimens group, it says that the encoder should provide 4-5 signals in each controller update...is there anyway that i can control the system by the means of drive controller? – fatemeh katibeh Aug 19 '20 at 10:10
  • @AJN can you tell me pls how i can use interrupt in drive settings? – fatemeh katibeh Aug 19 '20 at 10:15
  • @fatemehkatibeh **25bit** encoder ?! That means 360 deg is split into 2^25 parts. That is **39 milli arc second precision**! Even for a 1 metre (!) diameter **giant** encoder, the adjacent markings on the encoder have to be only **190 nano meters wide**! I don't think 25 bit enocoder is physically realistic. – AJN Aug 19 '20 at 12:09
  • @fatemehkatibeh Here is my suggestion : have a gear attached to the motor. The gear ratio should be such that the output of the gear spins, say, 100 times faster than the motor shaft. Then connect a normal encoder to the gear output. When you want to spin the motor at 3 RPM, the gear output should spin at 300 RPM. Instead of using the motor encoder (which will not give enough pulses at 3RPM), now, switch over to the gear output encoder and use that to control the speed of the motor (keeping in mind the factor of 100). Beware of backlash of gear. – AJN Aug 19 '20 at 12:11
  • @fatemehkatibeh what calculation gave 2.2us ? is it based on 3000 RPM ? If so can you program your software to changeover to, say 2.2**m**s when the speed goes below some value, say, 30RPM ? You will get enough pulses then I think. Redo calculation for 3RPM with 17bit encoder to find what should be update interval. – AJN Aug 19 '20 at 12:28
  • @fatemehkatibeh "*can you tell me pls how i can use interrupt in drive settings*". There is not enough info in your question to answer that I think. It is purely dependent on the processor / controller you are using. It may not be dependent on the encoder or motor. Add that info to the question. I wont be able to answer it, but some one else may be. – AJN Aug 19 '20 at 12:30
  • @AJN I've thought about extra gear attached to the motor shaft to increase the resolution at low speed but i think it may cause me many lateral problems. I found some encoders with high single turn resolutions like 24 bit. on the other hand i will try change the speed of drive update INSHA ALLAH. since i am a mechanical engineer with a little knowledge of system controlling, it really helps me get some solid advice from all of you. i really appreciate it – fatemeh katibeh Aug 22 '20 at 06:52

2 Answers2

0

Method 1 - add additional hardware

If you want only speed control and not position, then connect a gear to the motor shaft. The output of the gear system should not be connected to the load. It should be connected to an encoder. The gear ratio should be such that the gear system output runs faster than the motor shaft, say 100 times.

When the desired RPM goes below some pre determined value, say 10 RPM, stop monitoring the main encoder connected to the shaft. start monitoring the enocoder at the output of the gear system which is spinning 100 times faster in our example. Use pulses from this faster spinning encoder to control the motor speed by compensating for the factor in software.

Beware of backlash in the gear system if the motor changes direction. I don't think it does in you example since you say 3 RPM to 3000 RPM (i.e; no 0 RPM).

Also, once you start going to very low RPMs, the static friction in the motor can also lead to instability of the control. Beware of that.

At 3000 RPM the gear and the shaft will spin at 300,000 RPM. This may damage the gear. If so, then use a clutch to disconnect the gear system from motor shaft when RPM goes above some pre determined RPM, say, 100 RPM.

Method 2 - change 2.2us

It is not clear (to me) from your question the sanctity of 2.2us. Cant you increase it when desired RPM is low ? I think you need 2.2us only for high RPMs. If you can vary the sampling frequency dynamically, then you don't need extra hardware. You will get enough pulses for 3RPM if you change 2.2us to say, 2.2ms.

AJN
  • 3,756
  • 1
  • 9
  • 20
0

If the problem is actually what you say it is (the VFD panics and outputs a large pulse because it reads no angular changes between successive samples), then I suppose you could feed the encoder through an FPGA or CPLD that time-interpolates between real encoder pulses and outputs a stream of arbitrarily fast quadrature encoder pulses to spoof an arbitrarily high count encoder. Of course this system kind of breaks if the angular speed varies too much between encoder pulses. Like a PLL for a quad encoders pulse train.

This might overload things at higher RPM though. Since, for example, 20,000 counts per revolution ends up being 20,000,000 counts per second at 3000RPM.

DKNguyen
  • 54,733
  • 4
  • 67
  • 153