Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Calculating current limit settings
#1
I have a Parker SM232A 3 phase brushless DC motor with:
Instantaneous current: 8.3 A peak
Continuous current: 2.8 A peak

Direct PWM driven by Power PMAC and 3U042 amplifier 4/8 A rms

If I follow the Power PMAC User's Guide for calculating maxdac and i2tset by hand I get the following:

maxdac = (8.3/13.01) * (32768 * .866) = 18103
i2tset = (2.8/13.01) * (32768 * .866) = 6107

However when setting this up using IDE motor setup it calculates:

maxdac = 20904
i2tset = 7052

It seems the values from motor setup seem to ignore the .866 required for 3-phase calculation. Please advise.
Reply
#2
Hi,

The System Setup software performs the correct calculations according to our Chief Engineer. Below is the calculation algorithm used in the software:

Code:
Motor[x].I2tSet     Continuous current limit        
    In these calculations assume:        
    Ic = Safety.I2TProtection.ContCurrent    
    Ii = Safety.I2TProtection.InstantaneousCurrent
    t = Safety.I2TProtection.MaxTimeAllowed    
    MaxADC = AmplifierInfo.MaxADC        
    Switch (Control_Type)            
         Case (PositionCtrl)        
         Case (VelocityCtrl)        
              Motor[x].I2tSet = 0    
              Break;        
         Case (TorqueCtrl)        
              Motor[x].I2tSet = 32767 * Ic / Ii
              Break;        
         Case (CommutationCtrl)    
              Motor[x].I2tSet = SQRT( (32768*32768*Ic[RMS]/(ABS(Motor[x].PwmSf)*Ii_forAmplifier[RMS]))^2 - Motor[x].IdCmd^2 )
              Break;        
         Case (CurrentLoopCtrl)    
              Motor[x].I2tSet = SQRT( (32768*SQRT(2)*Ic* COS( 360*ABS(Motor[x].PhaseOffset)/2048 - 90 ) / MaxADC)^2 - Motor[x].IdCmd^2 )
              Break;        
         Case (DirectMicroSteppingCtrl)
             Motor[x].I2tSet = 32768*SQRT(2)*Ic* COS( 360*ABS(Motor[x].PhaseOffset)/2048 - 90 ) / MaxADC
             Break;        
                    
Motor[x].I2tTrip     Integrated current shutdown limit        
    Switch (Control_Type)            
         Case (PositionCtrl)        
         Case (VelocityCtrl)        
              Motor[x].I2tTrip = 0    
              Break;        
         Case (TorqueCtrl)        
         Case (CommutationCtrl)    
         Case (CurrentLoopCtrl)    
              Motor[x].I2tTrip = ( Motor[x].MaxDac^2 + Motor[x].IdCmd^2 - Motor[x].I2tSet^2 ) * Safety.I2TProtection.MaxTimeAllowed                // Note: Based upon calculated values and not PMAC values
              Break;        
         Case (DirectMicroSteppingCtrl)
             Motor[x].I2tTrip = ( calcualtedMaxDac^2 - Motor[x].I2tSet^2 ) * Safety.I2TProtection.MaxTimeAllowed                // Note: Based upon calculated values and not PMAC values
             Break;        
Motor[x].IdCmd     Desired magnetization (direct) current        
    Switch (Control_Type)                
         Case (PositionCtrl)            
         Case (VelocityCtrl)            
         Case (TorqueCtrl)            
              Motor[x].IdCmd = 0        
              Break;            
         Case (CommutationCtrl)        
              If (Motor Type = AC induction)    
                  Motor[x].IdCmd =  (0.1 * 32768*32768*Ic[RMS])/(ABS(Motor[x].PwmSf)*AmplifierInfo.Ii[RMS])    
              Else            
                  Motor[x].IdCmd = 0    
              Endif            
              Break;            
         Case (CurrentLoopCtrl)        
              If (Motor Type = AC induction)    
                  Motor[x].IdCmd =  0.1 * 32768*SQRT(2)*Ic* COS( 360*ABS(Motor[x].PhaseOffset)/2048 - 90 ) / MaxADC    
              Else            
                  Motor[x].IdCmd = 0    
              Endif            
              Break;            
         Case (DirectMicroSteppingCtrl)    
             Motor[x].IdCmd =  0.5 * 32768*SQRT(2)*Ic* COS( 360*ABS(Motor[x].PhaseOffset)/2048 - 90 ) / MaxADC    
                        
Motor[x].MaxDac     Instantaneous servo output limit            
    In these calculations assume:            
    MaxADC = AmplifierInfo.MaxADC            
    Switch (Control_Type)                
         Case (PositionCtrl)            
         Case (VelocityCtrl)            
              Switch(Output_Signal)    
                   Case (DAC)    
                        Motor[x].MaxDac = 32767    
                        Break;    
                   Case (Filtered_PWM)    
                       Motor[x].MaxDac = 16384    
                       Break;    
              Break;            
         Case (TorqueCtrl)            
              Switch(Output_Signal)    
                   Case (DAC)    
                        Motor[x].MaxDac = 32767 * MIN(MotorInfo.Ii, AmplifierInfo.Ii)/ AmplifierInfo.Ii    
                        Break;    
                   Case (Filtered_PWM)    
                       Motor[x].MaxDac = 16384 * MIN(MotorInfo.Ii, AmplifierInfo.Ii)/ AmplifierInfo.Ii    
                       Break;    
              Break;            
         Case (CommutationCtrl)        
              Motor[x].MaxDac = 32768*32768*MIN(MotorInfo.Ii[RMS], AmplifierInfo.Ii[RMS])/(ABS(Motor[x].PwmSf)*AmplifierInfo.Ii[RMS])    
              Break;            
         Case (CurrentLoopCtrl)        
             Motor[x].MaxDac = 32768*SQRT(2)*MotorInfo.Ii* COS( 360*ABS(Motor[x].PhaseOffset)/2048 - 90 ) / MaxADC    
             Break;            
         Case (DirectMicroSteppingCtrl)    
             Motor[x].MaxDac = Motor_Max_Speed/60000*Elec._Cycles_per_Rev*2048*Sys.ServoPeriod/SlipGain*Sys.PhaseOverServoPeriod    
             Break;
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)