The goal of the Osiris throttle controller is to use data obtained from instrumentation as feedback parameters to control engine thrust while maintaining the same mixture ratio.
From a given thrust level, the oxidizer and fuel mass flow rates can be computed, as can the desired chamber pressure.
Since the N2O mass flow cannot directly be known, the controller only controls IPA mass flow directly, and controls the N2O mass flow indirectly from chamber pressure. In this way, the N2O controller assumes that the IPA controller is working as expected.
For the IPA controller, an mdot_IPA reference is entered into the controller, which is demanding some IPA mass flow rate. The controller subtracts these two mass flow rates to get the mass flow rate error. Then, it passes that mdot_err into a PID controller, which computes theta_dot*sqrt(dP_valve). If we focus on theta_dot first, we can see that theta_dot is just the rate of change in valve angle required to bring the mdot_err to zero. We multiply this by sqrt(dP_valve) to remove nonlinearity from the main loop. Then, theta_dot is isolated, and passed through the plant dynamics of the system. These dynamics allow us to calculate the new pressure drop across the IPA injector as a result of this slight change in valve angle. Then, we can scale this by the rest of the orifice mdot equation to obtain mdot_IPA, which is fed back into the beginning of the controller.
Moving onto the N2O controller, we see that it controls N2O indirectly via measuring the chamber pressure, and not the mass flow directly. This is an assumption that we'll have to validate during testing, as it was inspired from researchers at Airborne Engineering who made a throttleable engine with an O/F of 5 (ours is ~2.75). Using pc, which is obtained from a chamber pressure transducer, we can pass pc through a controller to give us a desired angle that will achieve the desired N2O mass flow rate. Then, we can compute the new chamber pressure that results from this new valve angle, which is then fed back to the beginning of the controller.
Additionally, there is a feedforward (KFF) term added into the controller. This basically makes the control system more efficient; a feedforward term gives an initial "guess" for the actuator input to reach the desired setpooint faster. This means that the feedforward term pre-positions the actuator to a position that results in a pretty close pc so that the PID only has to make small corrections.