dyno updates: new power supply, e-stop, and further testing [updates]
So we realized a few things last time right, we first needed a bigger power supply. So let's deal with that situation first. We wanted a supply that could supply around 40A per motor and maybe be a little bigger for when we test things like CHIP. Essentially we want a 12V 100A power supply. We weren't finding good industrial/bench supplies we really wanted to buy (too expensive, not powerful enough) so we improvised a little.
This: https://www.amazon.com/gp/product/B08HGQKBQZ/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1 is the Dark Power Pro 1200W computer power supply and we're going to take this and turn it into our personal bench supply for 12V systems. Each of the PCIe ports can do up to 35A if we combine all the connectors together which we intend to do. So we started by taking two of the PCIe cables and making them XT90 connectors on the end.
Most of these power supplies also need to be activated by plugging them into a motherboard to signal them to turn on. This was achieved by connecting an E-STOP button to the ports shown below.
So we essentially need to short the PS-ON to ground to make the power supply turn on. So wiring an E-STOP to this is perfect!!! Shoutout to MAKE (https://makezine.com/projects/computer-power-supply-to-bench-power-supply-adapter/)
Now here's the finished supply, it's really that easy to make a high current supply. The last thing we added was a low current 12V power tap for the RoboRIO to one of the lower current 12V lines coming out of the power supply. The finished result is below.
The next step was to move the Dyno and get this all setup. We decided that a good idea would be to put the Dyno on a cart so it's pretty easy to get it out of the way. So we did that by just taping it down to a cart in the shop. We'll move it to the biomimetics lab later.
And then we moved onto running the same test program as last time with the one exception that we are running the applied duty cycle as well as the current output in logging. And we started getting data! Here it is.
Here are the first two graphs we got out after changing literally nothing. The applied current on the motor 1 goes up to 30A! And the applied duty cycle is shown below at around 0.15 which makes sense since the position error isn't super high. But we were skeptical of this current so we ran the test again with a current probe attached to the input.
Ok lol, we got around 2.0A current on the input when we ran that test... let's check the torque we get and see the torque constant of the motor (at one data point of course). And we get ~0.5-0.6 Nm at 2.0A of input current to the motor controller! That's a torque constant of about 0.25 Nm/A if we consider the input current to the main terminal. If we consider the current that's measured at around 30A, that's 0.01666666666 Nm/A. From the torque-speed curve we calculated roughly 0.0181215 Nm/A. I would say the torque constant is pretty accurate since we're guessing values here :))). Ok so when we run the system at 12V we can get accurate current and other readings so that's exactly what we're going to do. We also know now that the torque-speed curve is with respect to the phase current! Let's try some other torques.
So it seems our 18V supply was the problem... at 12V the system works perfectly fine on the current sensing side. Now the next steps are to tune a current controller and then develop an impedance controller around the current controller. We will likely use the accepted torque constant.
So the above data was collected when we commanded 1.0A with a very very basic current controller just a random P-term. The position of this system was also oscillating a lot so this data is probably not representative but it does show that we could do something with this system. Here's one with no oscillations physically.
Clearly it needs some tuning. So we want to start developing the infrastructure to be able to SET the PID constants over the Network Tables implementation. We also wanted to speed up the RIO loop as fast as possible with Teleop_Continuous() so we'll start making those edits and then move to the next phase of testing.