Calculating current limit settings andyf Member Posts: 135 Threads: 53 Joined: Jun 2010 07-02-2015, 12:18 PM 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. *** Banned Posts: 527 Threads: 22 Joined: Jun 2010 07-07-2015, 10:40 AM 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;``` « Next Oldest | Next Newest »