Open-source automated centrifugal pump test rig

Graphical abstract


Pump assembly
The pump assembly comprises four components: the pump base, volute, impeller and pump top (not shown). These components are all 3D printed which allows for rapid prototyping of various designs. The pump design is largely customisable with the only requirement being that the base feet are located in the slotted plate (Fig. 4) to centre the shaft in the volute.
All 3D printing was performed in-house (Objet30 Prime, Stratasys, Rehovot, Israel) using VeroWhitePlus (RGD835, Stratasys, Rehovot, Israel) as the model material and SUP706 B (SUP706 B, Stratasys, Rehovot, Israel) as the support. It is understood that the 3D printed parts will bear a higher surface roughness than commercial pumps. Rougher surfaces will influence the pump losses and hence, impact the measured performance. The purpose of the automated test rig is to quickly identify the most promising prototype -each of which will have performance affected to the same degree and relative performance will be unaffected. To reduce the impact of surface roughness, all components were produced using the finest print settings and oriented to ensure the smoothest possible finish on key surfaces. The surface roughness (Sa) was measured to be 0.05 lm using a Zeta300 optical profilometer (KLA-Tencor, Milpitas, CA, USA). The influence of surface roughness is expected to me minimal compared to the contribution of other experimental factors.

Control box
A touch screen is utilized to allow on-the-fly manipulation of the pump speed and positioning of the motor assembly on the linear rail system (Fig. 5). The control box makes use of an Arduino Due (Arduino Due R3, Arduino SRL, Scarmagno, Italy) incorporating programming for a PID controller to accurately set and maintain the motor speed. The display outputs a read-   out showing the target and measured speed as well as the relative current position of the linear rail platform. The control box is responsible for sampling the voltage and current (signal output to the data acquisition system via an LM324N op amp) used by the motor for efficiency calculations. Component details are available in the Bill of Materials.

Data acquisition -Control Desk / dSPACE
In this system a dSPACE (DS1104, dSPACE, Paderborn, Germany) data acquisition module was used to read all data signals (pressure, flow rate, voltage and current) and send the appropriate signal to the air regulator for pinch valve (flow rate) adjustment. The dSPACE system was used as it was readily available, however, any DAQ could perform these tasks. Control Desk is the program that gives the dSPACE a user interface. Some adjustment to the calibration and tuning built into the SimuLink code can be made from Control Desk. This includes the flow rate increments, timing and PID gains. The program provides real-time visualisation of the data and access to the controls necessary to setup/run the experiment. All bolts are socket head unless otherwise specified. * Prices were converted to AUD from USD then 10% added for GST. Note: All prices are AUD and include GST (10%).

Build instructions
This section is focused on the assembly of the test setup. The tools required for assembly are commonly found in workshops and laboratories with the exception of a milling machine and laser cutter. The instructions outline those used to build the given setup with some simplified alternatives also suggested.

Test rig
The test rig is defined as the components used to drive the pump situated between the control box and pump assembly. Firstly, the aluminium sections (base plate, bearing plate, slotted plate, motor mount and shaft) should be machined according to the supplied CAD files.

1) Attach the bearing plate.
Carefully remove the original front end plate of the linear rail system (Fig. 6) by removing the original M6 bolts. Press the 8 mm radial ball bearing into the recess that aligns with the ball screw on the bearing plate. Fix the bearing plate in place using the original M6 bolts.
2) Attach the base plate to the linear rail system.
Orientate the base plate with the 4 countersunk holes towards the stepper motor. The rear of the base plate should be approximately flush with the stepper motor mount of the linear rail system. Align the aluminium extrusion t-nuts ( Fig. 7b) with the countersunk holes in the base plate. Use the six M6 Â 25 mm bolts to secure the Base Plate to the linear rail system (Fig. 7a). Once assembled the base should lay flat from the countersunk holes ( Fig. 7c).  3) Attach the slotted plate to the base plate.
Orientate the slotted plate with the four countersunk holes facing away from the base plate. Fix the slotted plate in place using the four M6 Â 20 mm bolts (Fig. 8). The front face of the base plate should be machined flat, allowing the slotted plate to be fixed at 90°to the base.

4) Attach the motor to the motor mount.
Sit the DC motor in the cradle of the motor mount and slide forward until the front face of the motor meets the front plate of the motor mount. Rotate the motor to align the 4 fixing holes on the motor mount to those on the motor. Preferably, the hall effect sensor harness socket is facing upward for easy access. Fix in place using the four M3 Â 10 mm bolts with M3 washers (Fig. 9). 5) Fix the motor mount to the linear rail system.
Sit the motor mount on the sliding platform of the linear rail system with the motor shaft facing the slotted plate. The holes in the motor mount base align with those on the sliding platform. Fix in place using the four M5 Â 10 mm bolts and M5 washers (Fig. 10). In this case use two washers to ensure that each bolt is secured firmly without interference. This could simply be avoided by using shorter bolts, however, were unavailable at the time of purchase.

6) Insert bearings.
Press the self-aligning bearings into the 3D printed bearing adapters. Self-aligning bearings were utilised to accommodate any misalignment, to which the preliminary test results were very sensitive. The 3D printed adapters were used to allow for

7) Attach motor coupling
Due to the lack of component availability at the time of construction, a small 3D printed sleeve (3 mm ID, 5 mm OD with an M3 grub screw hole) was required to fit the 5 mm cup joint to the 3 mm motor shaft. The sleeve is pressed into the cup joint and the grub screw lightly tightened to sit in the sleeve hole. This allows the coupling and sleeve to be pressed onto the motor shaft without the sleeve slipping. The grub screw is then fully tightened to fix the coupling.

8) Assemble the shaft components
Slide the shaft through the slotted plate and front bearing assembly with the roll pin hole end first. Before reaching the bearing plate, slide on one large shaft collar and one axial thrust bearing. The thrust bearing contains two washers -the housing and shaft washer. The shaft washer fits tightly against the shaft, whereas the housing washer has a larger bore, allowing the shaft to rotate. The housing washer should be the last component (against the bearing plate). This washer will remain stationary against the bearing plate while the shaft washer is free to rotate with the large collar and shaft. Push the shaft through the bearing assembly of the bearing plate. Feed onto the shaft the remaining thrust bearing and large collar. The washer order for this thrust bearing is not important since both will be rotating with the shaft, collar and self-aligning bearing. Next slide on the small shaft collar, this is used to measure the axial positioning of the shaft (described in the operating instructions). Tap the 2 mm roll pin through the hole in the shaft (Fig. 12a). Tighten the large shaft collars to sandwich the axial bearings against the bearing plate (Fig. 12b).

9) Attach pump base
Press the 5 mm shaft seal into the back of the 3D printed pump base with the wet side facing toward the pump assembly. Slide the pump base over the shaft via the seal and push into the slotted plate (Fig. 13a). In this case, align the pump base so that the notch is facing upward. This is done as the feet of the pump base are offset 0.3 mm to account for the misalignment from tolerance build up during assembly. This would be adjusted based on the measured misalignment. The compensation allows for the shaft to remain centred in the pump. Slide the 5 mm rigid flange coupling onto the D shape shaft end with the flange facing forward (Fig. 13b). This component will be used to mount the 3D printed impellers. Fix the impeller mount to the shaft using the M3 Â 3 mm long grub screw on the shaft flat side and the M3 Â 2 mm grub screw on the other. This allows the grub screws to secure the impeller mount against the shaft without the grub screws protruding, avoiding interference with the 3D printed pump base.
The assembly of the pump components are outlined in the operation instructions.

Control box
1) Cut holes in the enclosure Mark the positions of the three GX-16 sockets, two Bayonet Neill-Concelman (BNC) connectors and DC power socket on the front (long side) of the electronics box. Ensure that the nut used to secure the sockets from the inside are not interfered with by internal structures. Drill holes the appropriate size for each socket at the marked locations. If necessary lightly file each hole to ensure a tight fit and remove any burrs. Position the touch screen on the lid located towards the left side, marking the location of the screen corners. Cut out a rectangle for the screen to fit tightly when pushed through from underneath. This can be achieved using a drill, small jigsaw and file. Position the heatsink, prototype board and stepper motor driver in the desired configuration (allow sufficient room between components) within the box and mark the positions for the standoffs. Drill these holes in the box floor for the M3 screws.

2) Fix sockets and screen
Fix each of the sockets in the appropriate front holes, held in place with the securing nuts. Attach the screen to the lid using the four M3 Â 16 mm bolts, four 4 mm nylon washers (used as standoffs) and four M3 nuts. With the Arduino and shield attached to the screen, mark on the left side of the electronics box, the position of the programming port. Cut this small section from the box to allow access to the Arduino when the box is assembled (Fig. 14).

3) Connect electronics
Connect and solder the electronic components following the wiring diagram shown in Fig. 15 (a high resolution version is available in the supplied files). Use the power cable wire (AWG 18) for connections involving the 24 V power supply and connections to the motor due to the higher expected current and the hook-up wire (AWG 26) elsewhere. Use heat shrink where possible/appropriate to avoid shorts.
Power to the motor is supplied directly from a 24 V laboratory power supply located externally to the control box. The motor speed is regulated by a PWM signal supplied by the Arduino via the N-channel MOSFET (Q1 in Fig. 15). The power supply is protected from parasitic back-EMF by D1. Signals from the motor's hall effect sensors are connected to hardware interrupt pins (18, 19) on the Arduino via voltage dividers (R1-4) which step the signal voltage down from 5 V to 3.3 V.
The TB6560 stepper motor driver converts the logic level voltages supplied by the Arduino on the digital I/O pins (10, 12) to high current signals to drive the motor coils.
Two operation amplifiers (op-amps) were configured as differential amplifiers (U2, U3) to convert the motor voltage and voltage across the current sense resistor to appropriate levels for the DAQ interface. The rail voltage of the op-amps was set at 12 V by the use of a linear voltage regulator (U1). This regulator also supplied the voltage to the Arduino via Vin.

4) Secure components -standoffs
Feed ten Button M3 Â 8 mm bolts from underneath the electrical box floor and attach the ten M3 Â 25 mm standoffs (4 for the stepper motor driver, 4 for the prototype board and 2 for the voltage regulator heatsink). Position the stepper motor driver, prototype board and voltage regulator heatsink on the appropriate standoffs and secure in place using the remaining ten M3 Â 8 mm bolts. Connect the 12 V voltage regulator to the regulator heat sink using the M3 Â 8 mm screw connected to the standoff and a small amount of thermal paste to ensure adequate heat transfer. Connect the MOSFET to the MOSFET heat sink using the M3 Â 6 mm bolt. Over time the MOSFET would gradually heat up and required a small heatsink to ensure the component does not overheat.

5) External wiring
Using a 1 m length of the power cable wire, connect the banana plugs to one end and the DC power plug to the other. Using the remainder of the power cable wire, solder each core to the power terminals of the motor. The order of which will influence the direction of motor rotation. The other end of the power cable is soldered to the 2 pin GX-16 plug. Cut the 4-core cable into 2 Â 1 m lengths. For this setup, one length of cable is soldered to the 4 pin GX-16 plug at one end and to the hall effect sensor wire harness at the other. Although there are six wires on the harness, only encoder A, encoder B, sensor power and sensor ground are connected. The remaining 2 wires represent the motor power. These are already directly soldered to the terminals which are more suited to handle higher current. The unused wires from the harness are terminated using heat shrink to ensure they do not contact other equipment. The final section of 4 core cable is soldered to the 4 wires from the stepper motor. The other end is soldered to the 5 pin GX-16 plug. One pin will be unused. This was purposefully done to ensure that the plugs could not be accidentally inserted into the wrong sockets (Fig. 16).

6) Programming
Upload the provided Arduino sketch to the Arduino Due using the Arduino IDE. The code may be manipulated to suit the desired application. The following will briefly cover the main aspects of the code.
An introduction screen was coded to appear whenever the control box is connected to power. This simply requires a touch to change to the main operating screen. This extra touch means the motor cannot be (immediately) turned on accidentally.
In order to accurately calculate the pump speed, the timer must be accurate. The internal timer, Timer 5 was accessed and used as the 'global counter' and set to 2.625 MHz by setting the appropriate prescalar (TIMER_CLOCK3) of 32. The global counter increased by 1 at the given frequency. Each time a signal was received from the hall effect sensor, the global counter was saved and compared to the previous value. From the difference between the values (counter difference), the known frequency of the counter and the number of hall effect pulses per revolution (11), the motor speed could be calculated.
To reduce the impact of incorrect readings, two time-based comparator algorithms are utilised. The first compares the counter difference to the previous counter difference. If the value is outside the threshold, caused by either a missed pulse or an extra false pulse, it is discarded and the previous value remains. The second comparator backs up the first thus allowing the calculated speeds from both encoders to be compared. If the difference between the speeds exceeds a threshold, the speed is discarded and the previous remains, or else the two speeds are averaged. The second comparator block filters any false readings that may have occurred within the first compare threshold. Even though the motor is running at a constant speed, the speed readings may fluctuate due to any unequal positioning of the magnet segments during motor manufacturing. A running average is used to calculate the average speed over 10 rotations (110 pulses).
The calculated speed is used as feedback for the PID controller. The gains were tuned as outlined in section 7.4. The controller would adjust the speed by varying the duty cycle of the PWM signal. To allow for fine speed adjustments, the analogue resolution was set to 12 bit.
Apart from adjusting the motor speed, the touch screen is also used to change the position of the motor mount by controlling the stepper motor. Using the 1204 ball screw, the number of steps were set for each touch to result in 10 lm of movement. By selecting the bottom left of the screen, the step size can be changed to 1 mm movement steps for coarse adjustment.

1) Reservoir
Cut the PVC pipe to a length of approximately 250 mm. Prime and glue the PVC cap on one end, forming the bottom of the reservoir. Drill two 20 mm diameter holes, 55 mm and 95 mm from the base, 90°apart (with the higher hole in a clockwise position relative to the lower). Slide the 18 mm o-ring over the ¾" nipple and push through the drilled hole. The o-ring acts as a gasket on the outside of the reservoir. On the inside place the ¾" tank gasket (from the tank outlet) over the nipple and secure in place using the brass flange nut (top of Fig. 17). This should be tightened sufficiently to force the gasket against the inside of the pipe and the o-ring is compressed between the outside of the pipe and hex section of the nipple to ensure an adequate seal. The 20 mm ball valve is screwed onto the exposed nipple. To finalise the reservoir assembly, the 20 -13 mm threaded to barbed connectors are wound into the free end of the ball valve (bottom of Fig. 17). Thread tape is encouraged on all threaded surfaces to assist with sealing.

2) Loop
Screw the 25-13 mm barbed connectors to each end of the pinch valve. Connect the lengths of tubing and Luer lock connectors to the reservoir and pinch valve as presented in Fig. 18. The lengths of tubing were selected so the inlet and outlet pressure sensors were positioned 125 mm from the impeller inlet and diffuser respectively. The distance equates to 10 tubing diameters to ensure that a steady velocity profile is reached, resulting in accurate pressure readings. The same principle was applied to the distance between the flow sensor and reservoir outlet hole. A 3-way tap is attached to each Luer connector and represent the pressure sampling ports. The ½" Tygon tubing (Tygon, Saint-Gobain, La Defense, France) is used due to compatibility with the flow sensor and the soft material avoids damage to the 3D printed parts. The stiffer vinyl tubing is used where the loop bends through 90°to ensure that the tubing does not kink whilst keeping the loop shorter, reducing the resistance.

3) Stands
The reservoir was supported by an acrylic stand that was recycled from a previous test loop. The stand allows the lower reservoir opening to be at approximately the same height as the shaft. Lab stands were used to simply support the pressure transducers. Custom pinch valve stands were developed to support the pinch valve and allow height adjustment to keep the pump outflow tubing level for different volute sizes. These have been slightly adapted from the original designs of Hansi Lang. The CAD files are supplied to laser cut the stand sections. To assemble the stand, glue the bracket section along the length of the base, locking in the tabs. Slide the centre sections over the bracket and glue the tabs to the base. Finally place the slide section between the centre sections and over the bracket. Fix the slide section to the desired height by tightening the M5 Â 25 mm bolt and M5 wing nuts fed through the holes and slots from the slide section. The 13 mm barbed ends attached to the pinch valve rest on the cradles of the slide section. See Fig. 19 for visualisation of the assembly steps.

4) Fluid
A water-glycerol solution is used as the working fluid to approximate the properties of blood in terms of density (1104 kg/ m 3 ) and viscosity (3.55 mPas). This equated to a ratio of approximately 43% glycerol by weight. Approximately 1.5 L of fluid is used in the setup.

1) Pneumatics
To control the flow rate of fluid around the circuit, compressed air is regulated to actuate the pneumatic pinch valve. For all threaded pneumatic connections thread tape was used to assist with sealing. Attach one male and one female air hose   quick connect to each end of the PVC air hose, secured in place using the hose clamps. In our case, the male end was connected to a compressed air outlet in the lab, a small air compressor could be used as an alternative. Depending on the air supply, an alternative fitting may be necessary. Attach the 600PF quick connect to the inlet of the manual regulator via the ¾" male -male connector (Fig. 20). These components were readily available in the lab, however one of the quick connects from the six-piece set could be used if an appropriate connector to the manual regulator could be found, reducing the cost. Connect the manual regulator to the voltage regulator using the ¾" male -½" male connector on the outlet of the manual regulator and the ½" female -male connector to the inlet of the voltage air regulator. This could be achieved with the single ¾" male -½" male connector, however, this gave very little room between the regulators to fit the appropriate spanner. On the outflow of the voltage regulator screw in one of the push-in air tube connectors. Attach the other air tube connector to the pinch valve. Finally connect the soft nylon air tube to the push-in connectors. To control the voltage regulator a signal is supplied from the dSPACE (channel DA08). The equipment specified was readily available in the lab. A lower-cost alternative to control the flow rate could use a stepper motor attached to a screw clamp (such as a Hoffman clamp). The stepper motor would be controlled using another Arduino and programmed PID controller receiving feedback from the flow meter. The target could be programmed on a timer in the same manner as that used by the SimuLink code.

1) Pressures
Pressure transducers (PX181B -015C5VX346, Omega Engineering, Norwalk, CT, USA) were connected to each 3-way tap located at the inflow and outflow of the pump. The 3-way taps allow air to be bled from the system easily as opposed to directly connecting the pressure transducer to the Luer connector. The inlet pressure and outlet pressure sensors are connected to the dSPACE through channels AD01 and AD02 respectively.

2) Flow
To monitor the flow rate a 10PXL Transonic flow sensor (10PXL, Transonic Systems, Ithaca, NY, USA) is clipped on the Tygon tubing between the reservoir and inlet pressure transducer. The flow sensor is plugged into a TS410 Transonic flow meter (TS410, Transonic Systems, Ithaca, NY, USA), which in turn is connected to AD05 on the dSPACE via BNC cable (Fig. 21).

3) Power
To record the power consumption used by the motor, the voltage and current are connected from the control box directly to the dSPACE using BNC cables. This can be done since the op amps can only output the maximum rail voltage of 12 V, avoiding damage to the dSPACE which is protected to an overvoltage of 15 V. The voltage and current are connected to channels AD03 and AD04 respectively on the dSPACE.

4) SimuLink and Control Desk
The provided Simulink file was developed to automate the experiment by increasing the flow rate by 0.5 L/min every 75 s. This timeframe was selected as it allows the flow rate and pressure sufficient time to settle before moving to the next target flow (Fig. 22). Control Desk (dSPACE, Paderborn, Germany) is used to display and record the data obtained from the dSPACE.

Operation instructions
The following operation instructions continue on from step 9 (attach pump base) of the build instructions for the test rig where the pump base and impeller mount have been fixed in place. An overview of the key steps of the operation procedure is presented in the following flow chart (Fig. 23).   1) Connect all external cords to the control box. Connect the banana plugs to the power supply and set to 24 V. Using the touch screen adjust the ''Axial pos" to move the motor mount platform approximately halfway along the linear rail system, disengaging the cup joint and roll pin, to allow room for shaft adjustment in later steps. 2) Attach the impeller.
Attach the 3D printed impeller to the impeller mount using a small amount of 5-minute epoxy. Set up a dial gauge indicator to run along the back face of the impeller near the periphery (Fig. 24). The epoxy allows some time to adjust the impeller before curing. Using the dial gauge reading, aim to reduce the axial variation as much as possible. Note this value. Once satisfied, set up the dial gauge indicator (MeasumaX 34-217, MeasumaX, Hare & Forbes Pty Ltd, Northmead, Australia) to run along the periphery face of the impeller and measure the amount of radial deviation. If this is outside of the acceptable range, the impeller is removed and requires reprinting. Take care when using the dial gauge indicator as any sudden impacts may strain the internal spring and cause the measurements to become inaccurate.
3) Once the epoxy has set, loosen the large shaft collars and set the position of the shaft so that there is a small gap between the back impeller face and pump base (<0.5 mm). Tighten the large collars against the bearing plate to secure the shaft position. This ensures no interference between the pump top and impeller during assembly. 4) Fit the printed pump components.
Fit the 52 mm o-rings, one each in the groove of the pump base and in the groove of the pump top 3D printed parts. Mate the 3D printed volute to the pump base where the step aligns with the o-ring groove. Ensure that the volute outflow is aligned horizontally (Fig. 25). Mate the pump top o-ring groove to the volute step.  Place the acrylic plate over the pump inlet and against the pump top. Secure in place with the four M5 Â 65 mm bolts and M5 washers using the 3D printed spacers between the acrylic plate and slotted plate (see Fig. 26a). The spacers are used to ensure that the assembly is not overtightened and apply equal pressure. It is highly recommended that a torque wrench is used to ensure the bolts are tightened consistently. The torque wrench was set to 1 Nm. The bolts should be tightened in an opposing pattern to avoid warping of the printed parts and apply equal pressure around the pump assembly (Fig. 26b). 6) Connect the Tygon tubing from the lower port of the reservoir to the inlet of the pump. Attach the Tygon tubing leading to the pinch valve to the pump outflow. Fill the reservoir with the water-glycerol solution. Slowly open the reservoir taps and allow the loop to fill. Slightly raise the reservoir and tilt the pinch valve to assist with filling. Stop and start the pump a few times to remove any remaining air from the system. Open the 3-way taps to bleed any air from the pressure transducers as any bubbles will interfere with the pressure readings. Turn the 3-way taps so that they are open between the pressure transducers and fluid. 7) Set the axial clearance.
The axial clearance between the impeller and pump top needs to be set. From here on, the large shaft collar closest to the motor will be referred to as the back collar and the large collar closest to the pump assembly, the front collar. Loosen the back collar and gently push the shaft forward while rotating the shaft by hand. When light contact is heard between the impeller and pump top, tighten the back collar and readjust the front collar to lock the shaft in place. Note the tightening and loosening of the collar screws may move the shaft slightly. If so, make the required minor adjustments. Set up the dial gauge indicator against the small collar and set the face to 0 at the needle. Loosen the front collar and gently pull the shaft away from the pump. The target distance is the desired clearance minus the variation measured from step 2. For example, for an impeller running with a variation of ± 20 lm from true and a desired clearance of 200 lm, the shaft should be positioned until the dial gauge shows 180 lm. This sets the average clearance to the desired value. Tighten the shaft collars in place, these may need small adjustments if the shaft moves during tightening of the screws. Remove the dial gauge. Using the touch screen, position the motor until the cup joint engages with the roll pin (Fig. 27).   To start the test, click on ''Ramp reset"(1), ''Signal reset"(2) and ''Counter reset" (3). Then quickly select ''Counter ready" (4), ''Signal Regular"(5), ''Ramp ready"(6) then ''Start Recording"(7) in the given order (Fig. 29). This resets all timing variables for the experiment and starts the recording. 13) Before the first step is complete (75 s) set the ''Max Flow" to a value of 0.2 L/min lower than the maximum achieved flow rate from step 10. 14) Stop the experiment.
Click stop recording (1) after the flow rate signal (2) has reached a step higher than the value set in step 13 rounded up to the next 0.5 L/min. For example, if the maximum flow rate is set to 8.3 L/min, stop the recording at or after the signal shows 9.0 L/min (Fig. 30). This ensures that data has been recorded for the final data point. Turn off the flow PID controller and the motor.
15) Close the reservoir taps. Place a small container under the pump assembly to collect the fluid draining from the loop.
Remove the Tygon tubing from the outlet and inlet of the pump. Undo the nuts and bolts from step 5 and remove the pump top from the volute. 16) Loosen the back collar and slide the shaft forward to allow access to the impeller mount grub screws. Gently pry the impeller off the impeller mount and remove any residual epoxy. Loosen the grub screws and remove the impeller mount from the shaft. Slide the shaft back into position and tighten the back collar to secure in place. 17) Repeat steps 4, 5 and 6 (without the impeller or impeller mount). Wet the seal and lubricate the bearings as in step 11.
Set the pump speed to that used in the experiment and turn on the motor. Click ''Start immediate" (starts recording) and approximately 60 s later select ''Stop Recording". The voltage and current readings recorded indicate the power consumed by the test rig (bearings, seals, motor windings, etc.) in order to run the pump at the desired speed. 18) Turn off the motor and drain the loop as in step 15. Reattach the impeller mount to the shaft. 19) Repeat all steps for impellers to be examined. 20) Run the MatLab script to analyse the data and generate P-Q and efficiency curves.

Flow rate calibration
A simple bucket test was used to calibrate the flow rate readings for the working fluid using the 10PXL flow sensor and Transonic flow meter. The test rig setup outlined above was used. Two longer lengths of ½" Tygon tubing were connected to the pump inlet and outlet. The reservoir consisted of a bucket (bucket 1) with approximately 6 L of working fluid. Another bucket (bucket 2) was placed on a set of scales and zeroed. A small Hoffman clamp was used to add resistance and dictate the flow rate. The tubing from the pump outflow was quickly transitioned to bucket 2 and the stopwatch started. The flow rate shown in Control Desk was recorded. Just before bucket 1 is emptied, the outflow tube was transitioned back to bucket 1 and the stopwatch stopped. The mass showing on the scales was recorded.
Using the measured density (1104 kg/m 3 ), time and mass, the actual flow rate can be calculated. The actual flow rate and the readings from Control Desk were recorded. The fluid from bucket 2 was transferred to bucket 1. Bucket 2 is replaced on the scales and re-zeroed to account for any residual fluid. The Hoffman clamp was adjusted to alter the flow rate and the process repeated. The measured data was plotted against the actual flow rate (Fig. 31) and the equation for the line of best fit noted. These values provide the gain and offset for the flow rate (Table 1). To validate, the new gains were input into Control Desk and obtained data for additional points, ensuring they matched the actual flow rate.

Power calibration
In a similar fashion to the flow rate, the voltage and current readings must be calibrated to give accurate power recordings. The gains calculated from the resistors in the op amp circuits could not be used as the ADC of the dSPACE had input impedance which altered the output voltage of the op amps The test loop was setup as outlined in the build instructions and operation instructions. The PID controller for the pinch valve was kept off (PID gains had not yet been determined), with the flow rate adjusted using a Hoffman clamp. Initially the pump speed and flow rate were set relatively low. The voltage and current values shown on Control Desk were recorded. The actual voltage was measured at the motor terminals using a multimeter (DigiTech Cat: QM-1320, Harman International Industries, Stamford, USA). The current passing through the motor was determined by measuring the voltage across the current sense resistor (using the DigiTech multimeter) and calculated using the formula I = V/R, where V is the voltage across the resistor and R is the value of the resistor (0.1 ± 1% O).  The Hoffman clamp was slightly released to allow a higher flow rate and hence higher load on the motor. All necessary values were recorded and the process repeated for multiple flow rates. The process of adjusting the flow rate was repeated for different pump speeds. The recorded data was plotted against the actual results and applied a line of best fit (Fig. 32). From the linear regression formula, the new gain and offset values for the voltage and current were input to Control Desk ( Table 2). The new gains were checked by validating for a few different points. Additional data points may be required until satisfied that the recorded values match the actual values obtained from the multimeter.

Pressure sensor calibration
The pressure sensors used had been calibrated previously. To ensure the readings were still accurate, they were compared to those obtained using an NIST (certificate) calibrated pressure gauge (DPG1001B-15G, Omega Engineering, Norwalk, CT, USA). The pressure gauge was connected to the 3-way tap at the pump outlet along with one of the pressure sensors. The pump speed was increased and resistance added via the pinch valve in order to increase the pressure at the sampling point. The readings matched between the sensor and pressure gauge, confirming the sensor readings were still valid. The test was repeated with the second pressure sensor, which also produced validated measurements.

PID controller tuning
Tuning for each of the PID controllers used for pump speed (Arduino) and flow rate (dSPACE) could not be tuned individually. Since the pump speed effects the flow rate and vice versa (through pump load) the gain values were determined experimentally. The objective was to find a good balance between the settling time of the flow rate and maintaining pump speed when the target flow rate was changed by ± 0.5 L/min. The final values are presented in Table 3. Fig. 33 shows the flow rate and motor speed traces for an experimental run demonstrating the acceptable settling characteristics. Note the timing between the graphs is mismatched due to the motor speed being recorded from a different platform (Arduino serial port).
All calibration and tuning gains were hard-coded into the Simulink file. Therefore, upon start-up, the gains from Table 3 are the default values.

Setup repeatability
To determine the repeatability of the setup, an impeller and volute were designed with the following parameters (Table 4) and is available in the supplied files.
The impeller, volute and pump top (STL files provided) were 3D printed. Four identical copies of the impeller were printed to take into account any variation from the 3D printer. The first impeller was attached and the procedure followed as outlined in the operation instructions up to step 14. This starts the flow rate at 0 L/min and increases until the maximum flow is reached. The second test ran in reverse, decreasing the flow rate from maximum to 0 L/min. The purpose was to examine if any hysteresis exists in the circuit.
The housing was then removed as in step 15 and reattached to introduce any variation in the pump assembly setup. The previous two experiments were then repeated by increasing and decreasing the flow rate. These (four previous) experiments were repeated for all four impeller prints, resulting in 16P -Q and efficiency curves. The average standard deviation for the P -Q curves was 0.7 mmHg and 0.46% for the efficiency curves (Fig. 34). These results are deemed well within acceptable bounds.   For these repeatability tests, the detected pump speed was output via the Arduino serial port. The results showed that during the settled periods (data time intervals used to plot the curves) the speed varied by a maximum of ± 2 rpm with the vast majority of readings falling within ± 1 rpm. This confirms the PID gains for the speed controller are acceptable.

Repeatability over time
Each day data was collected for a single run of the ''repeatability" pump before gathering data for various pump designs. This allowed the performance parameters to be tracked over time (3 months, n = 38) as well as ensure that the test setup was functioning correctly.
The average standard deviation for these P -Q curves was 1.2 mmHg and 0.7% for the efficiency curves (Fig. 34). These variations are higher than those from the initial repeatability tests. Likely causes are the component wear over time and simply due to the larger number of experiments (n = 16 vs. n = 38). The mean P-Q curves over time are on average 2.5 mmHg higher than the initial tests and efficiencies 1.57% higher.
The difference in pressure places the initial (average) P -Q curve approximately two standard deviations below the (average) P -Q curve over time. The initial tests were performed using the same fluid. Before each 'check' repeatability test the fluid was adjusted to maintain a viscosity of 3.55 ± 0.05 mPas. The viscosity was measured using a Brookfield DV2T viscome- ter with a Brooks and Wells cup and plate attachment having an accuracy of 0.06 mPas. Small variations in the fluid properties would slightly influence the pressure generated by the pump, reflected in the results obtained. The power usage in the initial tests was slightly higher (resulting in lower efficiency), likely caused by using a new seal. Whenever a new seal was required for following tests, it was allowed to run for approximately 8 hrs to properly wear in. The new seal adds more load to the shaft. Although this extra power is negated by subtracting the power usage without the impeller (step 17 of the operation instructions), the additional load causes the motor to heat up, increasing the resistance and hence the power drawn. The current setup could be improved by introducing a temperature probe on the motor to account for these additional losses.
The purpose of the repeatability 'check' tests was to ensure correct functioning of the system and identify any component issues. Over the 3 month testing period which the test rig was utilised, only the seal required replacement. This was necessary approximately every 25 h of testing (excluding the 8 h run time to wear in the seal which was required with every seal replacement) to maintain acceptable accuracy levels. In the event of component failure, the 'check' test results would reflect the presence of an issue. The modular design of the system allows for easy replacement of components. The longevity of the system is maximised through the selection of high quality components and regular maintenance.

Declaration of Competing Interest
The authors declare that they have no known competing financial interests or personal relationships that could have appeared to influence the work reported in this paper.