Jump to content
OMRON Forums

iclim

Members
  • Posts

    51
  • Joined

  • Last visited

Everything posted by iclim

  1. Curt, Thanks for the reply. I still am a little confused about what you said. If the internal code reads the value of pPhaseEnc and then stores that value in the PrevPhaseEnc before the user phase function is even called, then how can the user phase function calculate a delta phase position? I will illustrate my point with psuedo code //Delta Tau internal code does something like this PresentEnc = *Mptr->pPhaseEnc; //For example PresentEnc = 10 DeltaEnc = PresentEnc - Mptr->PrevPhaseEnc; //Lets say the previous was 5, so DeltaEnc = 5 PrevPhaseEnc = PresentEnc; //Now PrevPhase = 10 //Now the user code is called PresentEnc = *Mptr->pPhaseEnc; //Which is still 10 DeltaEnc = PresentEnc - Mptr->PrevPhaseEnc; //However since PrevPhaseEnc was already update to 10. The Delta is 0 PrevPhaseEnc = PresentEnc; //Redundant step Hence I am still a little confused by this. The reason why I am asking is that we have implemented a user phase function and the only means to get it to work is to store the prev enc in a different memory location. I would like to use PrevPhaseEnc
  2. 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
  3. Hi, I have found some strange behaviour with the Motor[x].PrevPhaseEnc when implementing a User_Phase routine. To simplify my concerns and confirm that it was not my code, I made a simple counter which counts to 1000 void user_counters(struct MotorData *Mptr) { Mptr->PhasePos += 1; if(Mptr->PhasePos > 1000) { Mptr->PhasePos = 0; } return; } Now at the same time I setup my pointer pPhaseEnc to Gate3[0].MacroIn[9][0] i.e. Motor[8].pPhaseEnc=Acc5E3[0].MacroInA[9][0].a Now as you can see from the user code, at no point do I ever write to the Motor[x].PrevPhaseEnc register i.e. Mptr->PrevPhaseEnc = (int)blah; However upon enabling the Motor[8].PhaseCtrl=4. Here is a trace of the behaviour of PrevPhaseEnc From my investigations it looks like the content of Acc5E3[0].MacroInA[9][0].a is being copied into Motor[x].PrevPhaseEnc Hence when you implement a user phase routine the phase position delta is always zero. I currently have circum-navigated this issue by using a different memory address, however is there something that I need to change to stop this from occurring? Thanks
  4. Thanks Steve. Since my last post I have written my own user phase routine and implemented a low pass filter to filter the phase position at the phase frequency as I was concern with using a signal which is created at a slower rate than the frequency of control.
  5. No luck. MI975 does not take the value that I write to it Here is my terminal buffer ms9,mi975=$c40 ms9,mi975 $000000000000
  6. 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
  7. 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
  8. Does anyone know the address of the filtered encoder position register? For example EncTable[x].pEnc point to Acc5E3[0].MacroIn[0].a However if we apply a first order low pass filter to this register i.e. EncTable[x].index1 = 0 EncTable[x].index2 = 250 Where is the filtered result stored? And what is the structure of this register. I ask this question as our Motor[x].pPhaseEnc = Acc5E3[0].MacroIn[0].a Hence I believe the commutation is using a non filtered version of the resolver feedback Ideally I would like Motor[x].pPhaseEnc = FilteredValueofRotorPosition.a Thanks
  9. 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
  10. 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
  11. On a note to this I found the "PositionControl" configurations settings file which is pretty self explanatory. So we at the moment at least can save the setup per IP. Still it would be great to have a mechanism to load different configurations. If anyone is interested the project configuration files are located C:\Program Files (x86)\Delta Tau Data Systems Inc\2.0\Power PMAC Suite\INI Assuming you used the default installation location
  12. Hello, We have 4 Power PMAC in use. If we setup the counts per unit Position window for one IP, when we change to a different IP, it will remember the previous IP's setting. A couple of questions. 1. In future versions can you please integrate a means for the IDE to associate a set of counts per unit to an IP so that we do not have to continually change the number of motors and counts per unit? Or is there already a mechanism to do this which we are unaware of? 2. For the current version of the IDE. Can you please tell me the file that is used to save the counts per unit, number of motors etc so that we can save versions per PPMAC so that we can save some setup time. We really do have quite a lot of motor nodes... Thank you
  13. Thanks guys. I will try both methods and see what solution works best
  14. Hello, I would like to write a program which writes directly to the memory address for the position target of a co ordinate system. Is there a means to do this rather than performing a move through a single line motion program? The reason behind this is that we want to use the PPMAC to track a position target which is sent over the network. To perform this I would like to setup a TCP/IP server on the PPMAC which receives a position target from a client and then updates the memory address containing the position target. Also if someone else has done this before and has example code they want to share, that would also be greatly appreciated. Thanks Choon
  15. Charles, You were correct. We set the Gate3[0].PhaseFreq to 18kHz and here is the result. Thank you for the help
  16. Hello Steve, I have a few concerns: 1. I have set the ADC offsets already. 2. My main concern is that if you physically hold the output shaft of the motor, when it is holding a constant position target you can feel the vibrations in the motor shaft, which in a high precision position application is not be acceptable 3. This issue is not present on our other PMAC which uses the same setup. Thank you
  17. 3 Phase power supplies were checked and appear to be fine. I performed the current tuning test with different magnitudes and the problem exists at all current targets.
  18. We are checking our power supplies to the unit later on.
  19. I will also add that we tested two MACRO drives and the issue exists on both amplifiers.
  20. Hello, I was hoping you could shed some light on an issue that we have encountered. Upon performing manual current loop tuning, when the current has reached steady state I am noticing cyclic dips in the current (which the integrator responds to). I have attached a picture We are using an ACC-5E3 card with Geo MACRO Drives I have checked all of the commutation and direct PWM setting along with the pointers to the Geo MACRO registers. Do you have any suggestions?
  21. Hello Charles, Thank you for the advice. Can you please explain why this was not an issue with the previous version of the IDE then?
  22. Charles, Thank you for the response. Could you please elaborate on the "power-saving" switches and how to set them.
  23. Hello, We are running into an issue with the new IDE, where after a few minutes the connection to the PPMAC is lost. I have attached a picture of the issue that we are facing including the TaskManager. It is important to note that this issue was not present on the previous version of the IDE and the only change that was made was updating to the latest IDE. We also have a development PPMAC which we use where the processor is loaded less and the issue has not been encountered.
  24. Hello, We have a Power PMAC with the ACC-5E3 card connected to Geo Macro Drives controlling brushless DC motors. I have a question regarding the assignment of the EncTable[x].pEnc. In the Power PMAC User manual it states to point to the address of the Macro registers. e.g. EncTable[x].pEnc = Acc5E3[n].MacroInA[j][0].a However in the Turbo PMAC/PMAC2 Software Reference on page 219 it states. When performing commutation of motors over the MACRO ring, it is advisable to get servo position feedback data not directly from the MACRO ring registers, as shown above, but from the motor’s previous phase position register instead. This is where the commutation algorithm has stored the position it read from the ring (with Ixx83) for use in its next cycle. Using this register prevents the possibility of jitter if the conversion table execution can be pushed too late in the cycle i.e. EncTable[x].pEnc = Motor[n].PrevPhaseEnc.a Can you please clarify if the Turbo PMAC methods should still be used with the Power PMACS? Or if there might be advantages/disadvantages to it.
×
×
  • Create New...