documentation icon indicating copy to clipboard operation
documentation copied to clipboard

Null checks in motor torque sim

Open chestwood96 opened this issue 3 years ago • 1 comments

Hello,

If you add null checks to your macros the file would work in libreoffice too.

I would do a pull request but I am pretty sure libreoffice might have mangled some other parts of the file.

This worked for me:

Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Function SingleCoilTorque(StepAngle As Double, RatedCurrent As Double, Torque As Double, Inductance As Double, Resistance As Double, RotorInertia As Double, InputVoltage As Double, DriveCurrent As Double, RPS As Double) As Double

	if StepAngle = 0 or RatedCurrent = 0 then
		SingleCoilTorque = 0
	else
	    F_Coil = RPS * (360 / StepAngle) / 4
	    X_Coil = 2 * 3.1415 * F_Coil * Inductance / 1000
	    Z_Coil = X_Coil + Resistance
	    V_Gen = 2 * 3.1415 * RPS * (Torque / (100 * 1.414) / RatedCurrent)
	    If InputVoltage > V_Gen Then V_Avail = InputVoltage - V_Gen Else V_Avail = 0
	    I_Avail = V_Avail / Z_Coil
	    If I_Avail > DriveCurrent Then I_Actual = DriveCurrent Else I_Actual = I_Avail
	    Torque_Percent = I_Actual / RatedCurrent
	    T_1Coil = Torque_Percent * Torque / (100 * 1.414)
	    T_2Coil = T_1Coil * 1.414
	    V_Coil = I_Actual * Resistance
	    Power = (V_Coil + V_Gen) * I_Actual
	    
	    SingleCoilTorque = T_1Coil * 100
	end if
    
End Function

Function StepperPower(StepAngle As Double, RatedCurrent As Double, Torque As Double, Inductance As Double, Resistance As Double, RotorInertia As Double, InputVoltage As Double, DriveCurrent As Double, RPS As Double) As Double

	if StepAngle = 0 or RatedCurrent = 0 then
		StepperPower = 0
	else
	    F_Coil = RPS * (360 / StepAngle) / 4
	    X_Coil = 2 * 3.1415 * F_Coil * Inductance / 1000
	    Z_Coil = X_Coil + Resistance
	    V_Gen = 2 * 3.1415 * RPS * (Torque / (100 * 1.414) / RatedCurrent)
	    If InputVoltage > V_Gen Then V_Avail = InputVoltage - V_Gen Else V_Avail = 0
	    I_Avail = V_Avail / Z_Coil
	    If I_Avail > DriveCurrent Then I_Actual = DriveCurrent Else I_Actual = I_Avail
	    Torque_Percent = I_Actual / RatedCurrent
	    T_1Coil = Torque_Percent * Torque / (100 * 1.414)
	    T_2Coil = T_1Coil * 1.414
	    V_Coil = I_Actual * Resistance
	    Power = (V_Coil + V_Gen) * I_Actual
	    
	    StepperPower = Power
    end if
    
End Function

chestwood96 avatar Sep 12 '21 13:09 chestwood96

Seconding this request. As-is, I can't use this resource at all!

kozross avatar Aug 03 '23 16:08 kozross