7I96/8I20 combination to drive AC Servo for Spindle Motor

More
02 Nov 2018 23:33 #119859 by Xnke
Ok, so I am working out how to drive my nifty new servo spindle motor using the 7I96 I have, plus an 8I20 I will buy when I get this figured out.

I intend to setup the encoder input on the 7i96, using the A-/A, B-/B, and Index-/Index wiring. This matches the 8192ppr encoder I have, and the spindle index is marked already.

Now, since I have no commutation output on the encoder, I thought I'd have to change it to get commutation-but no, that's not the case. Yaskawa did it without, so why can't I, I think to myself.

Here's how I propose it can be done:

Send any phase a high signal to start rotating the rotor. Proper motor phasing is irrelevant. Feed the phases in order for the direction desired. We'll fix it when we get the index pulse.
Read direction from the encoder. Did we get the index pulse?
Once we have the index pulse, adjust phasing of drive signal to optimize torque.
Maintain phase by knowing position based on index and encoder data.
On power off, we loose this data, so we need to determine it again once power is applied. Start at step 1 again.

I know some encoders deliver phase data on startup, but then switch to encoder data after half a second or so. Not sure how to detect that, but the above routine seems to be able to deliver the desired information. Even if the phases are out by 45*, we'll still get 70% of the maximum torque that proper phasing would deliver. Once we receive the index pulse, phase correction is easily determined because we know the number of pulses per revolution of the encoder. For initial configuration, the index and phase relationship will have to be determined to get max torque and minimal motor heating, but that can be done by supplying a fixed frequency 3-phase waveform, and then gradually adjusting the phase/index relationship until the motor runs at maximum speed. After initial config, we will have unknown rotor position for never more than 1 full revolution, then we can apply the already determined phase/index relationship.

I know this might not be ideal for axis control, but for spindle motor control and indexing, I don't see any problems.

Now, the question is, How do I get this information over to the 8i20 motor drive? I assume via the SmartSerial port on the 7i96, but I have no idea how that is setup yet, and the documentation on the 8i20 and 7i96 combination seems nonexistant so far. Can it even be done? Has anyone already done this type of setup with other hardware and the 8i20? If so, can data from that other hardware be modified to help produce a solution for this combination?

Please Log in or Create an account to join the conversation.

More
03 Nov 2018 05:36 - 03 Nov 2018 05:36 #119863 by cmorley
I think you want to look at the BLDC component. This is exactly what it's for.
The bldc component can be used to connect your encoder signals to commutate the 8i20.
There doesn't seem to be any online docs but entering man bldc in the terminal should give you docs.

Andy or Peter are the masters with the 8i20, but IIRC the 8i20 will export HAL pins that you can connect to.

Chris M
Last edit: 03 Nov 2018 05:36 by cmorley.

Please Log in or Create an account to join the conversation.

More
04 Nov 2018 02:13 #119910 by PCW
Yes, the 8I20 like all sserial peripherals works with any mesa FPGA card that has a RS-422 interface and exports a set of HAL pins determined by the specific sserial device

Please Log in or Create an account to join the conversation.

More
04 Nov 2018 02:18 #119912 by Xnke
Deal sealed. PCW, incoming order!

Please Log in or Create an account to join the conversation.

More
05 Nov 2018 11:36 #119985 by andypugh

There doesn't seem to be any online docs but entering man bldc in the terminal should give you docs.


"bldc" docs are here:

For what you describe you would use "loadrt bldc cgf=qi"
(quadrature and index)

Please Log in or Create an account to join the conversation.

More
05 Nov 2018 18:45 #120023 by Xnke
This will be a good thing to document better, I think.

So, after I get the servo spinning, I will have the spindle belt driven from the servo at a 1:2.8 ratio or so, the rated speed is 1500 and top speed is 3000. Looking at the data sheets, I can still get 95 percent of max torque at 2000rpm, so that will be the max "commandable" speed for the servo.

Will I still be able to get the spindle to index for the BT30 drive keys, or will I need a second encoder for that?

Please Log in or Create an account to join the conversation.

More
05 Nov 2018 18:54 #120025 by andypugh
You should be able to orient with the motor encoder if you add an index sensor to the spindle.
You probably need two encoder counters for this, though. A motor encoder + index for commutation and a spindle encoder + index for the orientation. But they can share A and B channels.

Please Log in or Create an account to join the conversation.

More
06 Nov 2018 00:48 #120066 by Xnke
Hmmmm. I'll have to figure out another encoder input them-that 7i96 only has just the one, and I am using all three channels for the motor drive. Do you think the general purpose IO can handle encoder duty?

Please Log in or Create an account to join the conversation.

More
06 Nov 2018 10:48 #120093 by andypugh
A 7i85 on the expansion connector would be an option.

It is probably also possible to connect two separate encosders to the same IO pins inside the FPGA bitfile.

Other options include a relay to hardware-switch the location of the encoder index (bldc works on rawcounts, so that's OK) or commutating the motor in pure "q" mode instead of using the index. (index should be more accurate but a spindle is likely to work reasonably well with purely magnetic alignment)

Please Log in or Create an account to join the conversation.

Moderators: PCWjmelson
Time to create page: 0.118 seconds
Powered by Kunena Forum