iclim Posted March 20, 2014 Posted March 20, 2014 Hello, We are trying to setup a resolver on a Geo Macro Drive and the Power PMAC. We have successfully setup the amplitude and frequency of the excitation and have confirmed that the position feedback is working. However upon trying the Setting up the Phase Shift (MI941) Manually method (pg 73 of Geo Macro Manual) we are not having any luck. We are using the following plc to determine the values: #define adcA P20 #define adcB P21 #define PosFeedback P24 open plc 2 //Get resolver values of ADCs for Macro node 9 adcA = Gate3[0].MacroInA[9][1]; //ADC A adcB = Gate3[0].MacroInA[9][2]; //ADC B //Remove lower 16 bits of padding adcA = adcA >> 16; adcB = adcB >> 16; //Remove lower 8 bits of padding PosFeedback = Gate3[0].MacroInA[9][0]; PosFeedback = PosFeedback >> 13; close We are assuming that the two ADC values are coming from (for Node 9 servo on bank A) Gate3[0].MacroInA[9][1]; //ADC A Gate3[0].MacroInA[9][2]; //ADC B However it appears that our values for adcA and adcB do not change by much when changing MI941. Could we please have guidance on how to perform this on the Power PMAC Thank you
iclim Posted March 24, 2014 Author Posted March 24, 2014 I addition to this question, we are trying to perform commutation and current loop control for a brushless DC motor. We have tuned the current loops and are satisfied with the results, however there is quite a lot of noise coming back from resolver position. We have tried both 1st and 2nd order filters, but it appears that they have little affect on the Motor[x].PhasePos. I am attaching a trace of the Motor[x].PhasePos and Motor[x].ActPos with the motor stationary 2nd Order Filter at 100Hz and damping at 0.7 encTable[x].index1 = 80 encTable[x].index2 = 155 encTable[x].index4 = 2 1st Order Filter encTable[x].index1= 0 encTable[x].index2= 250 Also note that our Motor[x].PhasePosSf = 0.000244140625 - 8 pole motor - Remove lower 13bits - 4096 of feedback counts per rotation Can you please help. Thank you
steve.milici Posted March 25, 2014 Posted March 25, 2014 The ADCs will be coming over the next set of I/O nodes at: Gate3[0].MacroInA[11][1]; //ADC A Gate3[0].MacroInA[11][2]; //ADC B Once the proper phasing on the ADCs is done the noise may be greatly abated.
iclim Posted March 25, 2014 Author Posted March 25, 2014 Steve, No such luck. Here is my PLC program which I used to removed the padding bits #define adcA P100 #define adcB P101 #define PosFeedback P102 #define MacroServoNodeNumber 9 #define MacroIONodeNumber 11 open plc 2 //Get resolver values of ADCs for Macro node 9 adcA = Gate3[0].MacroInA[MacroIONodeNumber][1]; //ADC A adcB = Gate3[0].MacroInA[MacroIONodeNumber][2]; //ADC B //Remove lower 16 bits of padding adcA = adcA >> 16; adcB = adcB >> 16; PosFeedback = Gate3[0].MacroInA[MacroServoNodeNumber][0] >> 13 PosFeedback = PosFeedback & $000FFF close /****************************************/ I am attaching a trace of two rotations, as you can see there is a rather noisy resolver output. Also here is the output for the MacroEnable registers. I tried turning on all IO on the station to ensure that I did not miss anything. Gate3[0].MacroEnableA=$fff3300 Gate3[0].MacroEnableA=$FFFFF00 ms9,mi996 $0000000fbf00 ms9,mi996=$FBFCC enable plc 2 Also to confirm that the adc values are not being placed in any other I/O registers I had the following watch setup As you can see it does not appear that the Adc values are being written to any Macro registers. Please advise
steve.milici Posted March 26, 2014 Posted March 26, 2014 Also make sure Mi975 is set to activate the I/O nodes and try Mi19 at both 1 and 0 probably 0 to disable the built-in I/O of the drive.
iclim Posted March 26, 2014 Author Posted March 26, 2014 Steve, Can you please provide me a definition of MI975. I viewed the Geo Macro Drive User manual and could not find anything describing it
steve.milici Posted March 26, 2014 Posted March 26, 2014 MI975 permits the enabling of MACRO I/O nodes on MACRO IC 0. MI975 is a 16-bit value – bits 0 to 15 – with bit n controlling the enabling of MACRO node n. If the bit is set to 0, the node is disabled; if the bit is set to 1, the node is enabled. The I/O nodes on the 16-Axis MACRO Station are nodes 2, 3, 6, 7, 10, and 11, which can be enabled by MI975 bits of these numbers. Only bits 2, 3, 6, 7, 10, and 11 of MI975 should ever be set to 1. MI975 is used at power-on/reset to determine which I/O MACRO nodes are to be enabled. The net result can be read in Station variable MI996. To get a value of MI975 to take effect, the value must be saved (MSSAVE{node}) and the Station reset (MS$$${node}). You may need to activate an added lower I/O node to provide a placeholder for the built-in I/O: MI975=$C40 //activate nodes 10,11 (for ADCs) and 6 (built-in I/O placeholder)
iclim Posted March 26, 2014 Author Posted March 26, 2014 No luck. MI975 does not take the value that I write to it Here is my terminal buffer ms9,mi975=$c40 ms9,mi975 $000000000000
Omron Forums Support Posted March 28, 2014 Posted March 28, 2014 Hi, Please ensure that your phase and servo clocks are set identically on both the Power PMAC and the Geo MACRO Drive.
iclim Posted April 4, 2014 Author Posted April 4, 2014 All, We managed to get the resolver working. Here is the solution that we found. Things that must known and set before even attempting to setup the resolver. 1. The usual MacroEnable on both the PPMAC and GEO Macros (MI996) must be set to enable the I/O Nodes. 2. In our test we used Macro Node 8 and 9 for a resolver. According to documentation you would expect the ADC values of the resolver to be on I/O Nodes 10 and 11. This is NOT the case. Both servo nodes 8 and 9 will use node 10 for their ADC values. Hence only one resolver can be setup at a time. Either MI101 = 12 OR MI102 = 12. They CANNOT equal 12 at the same time. 3. Use Gate3[n].MacroInA[1] and Gate3[n].MacroInA[2] to obtain the ADC values Once the above is done the remaining setup is pretty straight forward. Set the gains to ensure no signal clipping occurs. I used a PLC script to get the values from the Macro registers and followed the instructions listed on the MACRO User Manual. We did not need to apply a shift (MI941) Here is a trace of the Macro registers. This still results in a noisy signal. We used a basic second order filter in the phase frequency to filter out the signal. Here is the raw signal Here is the filtered signal
iclim Posted April 8, 2014 Author Posted April 8, 2014 So after trying a plethora of low pass filters. We cannot achieve the performance that we require with the limited 12 bits (4096 counts) per revolution. In addition the significant noise to signal ratio does not allow us to use the velocity signal to achieve a good damping ratio. Before I completely give up on this idea, I wanted to ask if anyone has experience with applications of the Geo Macro resolver function, their definition of acceptable performance and what they needed to implement to achieve acceptable performance. For reference I have used 2nd order filters for Inner Velocity, Position and Encoder
steve.milici Posted April 9, 2014 Posted April 9, 2014 Since this product has only 12 bits for the resolution and if you have a higher noise floor in your system we would recommend using a tracking filter. If EncTable[n].index2 is set to a value 32 or greater, a digital tracking filter is enabled for the entry. In the tracking filter, index2 serves as the “proportional” gain term, index1 serves as the “mantissa” of the “integral” gain term, and index4 serves as the “exponent” of the “integral” gain term. All are 8-bit unsigned integer values, with a range of 0 to 255. For implementation details (and filter equations) see the section "Tracking-Filter Operations: index1, index2 (index2 > 31), index4" in the Power PMAC User's Manual starting on page 151.
Richard Naddaf Posted April 9, 2014 Posted April 9, 2014 I would try a low pass/tracking filter in the Encoder Conversion Table. Attached, are some results and basic EncTable[] indexes' settings to achieve this.Tacking Filter Results.pdf
iclim Posted April 11, 2014 Author Posted April 11, 2014 Thank you for the suggestions. I already had implemented a low pass tracking filter. FYI my gains were index1 = 80 index2 = 140 index4 = 2 Which I believe is about a 100Hz cutoff at 2.25kHz Servo period. I also tried implementing the same filter for the phasing of the motor.
Recommended Posts