Skip to content
Snippets Groups Projects
Select Git revision
  • abf6cd3fe2fd083fdcfc0694f5c56eada9016dfc
  • master default protected
2 results

motor-testing-data

Name Last commit Last update
images
README.md

Dynamometer

Week 3

This week all of the remaining subsystems came together (except for a thermocouple which I would like to add for some future sweeps) and I was able to generate some interesting data as shown in the plots below. Back in week 2 I sketched out an illustration of the sweep I was planning to make: Commutate at some constant RPM and then incrementally increasing opposing torque via the absorber. At each increment, measure torque via the load cell, RPM via the encoder, stepper voltage and current consumption via the INA260. For an open loop stepper, stepper voltage and current comsumption will remain relatively constant across the entire sweep, increasing slightly with increasing RPM. The product of these two will give us electrical power consumption. As torque increases, we eventually stall or backdrive the motor as shown in the video below. At this point we have acheived the peak torque output of the motor at that RPM. The plot (and V = L*di/dt) suggest that for a motor that is not acheiving steady state current consumption for an inductor, as RPM increases, max torque decreases, because we are not giving enough time for current to fully develop in the inductor before commutation occurs and we attempt to reverse polarity and therefore current direction.

We can also calculate mechanical power output at each increment by taking the product of torque and RPM. By dividing mechanical power output by electrical power input, we can determine motor efficiency across the entire torque speed curve. So our final plot shows us not only the standard torque speed curve (the interpolation of points spanning peak torque at each RPM), but also motor efficiency there as well.

alt_text

It would be fair to say that those peak values are the only really useful bits of data generated here, but I would argue that given how frequently open loops steppers are used, there are valuable insights to be had below that interpolated line. For example, if driving an electric vehicle with an open loop stepper (not recommended), this data informs us about the power consumption headroom we have by switching to a closed loop system (you don't get to choose torque demand for some commutation speed when driving on a road). For a closed loop motor, this data becomes much more relevant, which will be a good future direction to take the project. Several things to note from looking at the graph above:

  • All of the efficiencies at RPM = 0 are dark blue, or 0%. This makes sense considering we are doing 0 work at 0 RPM, and the product of (0 RPM x some torque = 0).
  • Similarly all of lower torque values have efficiencies close to 0. Our open loop stepper is blindly dumping current into the motor windings, and it isn't until we actually start oposing that electrical power with the absorber, that we can actually say work is being done.
  • There are anomalies in the peak torque and efficiency data for RPMs spanning 50-350 RPM. This happens for reasons I will discuss below, but I expect that with some tweaking I should be able to get much cleaner results in that RPM regime.

As expected, the absorber proved to be the most difficult system to integrate. Most dynamometers operate under a resistive, but not actively driven load, like an induction motor wired as an eddy current brake, or some mechanical system like a disc brake or flywheel. I wanted to pull useful data from the 0 and low RPM regime as well, which is often where steppers are driven, so I wanted an absorver that was also capable of actively generating a torque on the DUT. My initial thought was that by just using a brushed DC motor, I would be able to directly drive it with a variable power supply (fortunately I have one that's capable of taking analog 0-5V input from a micro as shown last week). By putting a diode in series with the power supply, I intended to prevent back EMF from flowing, which is problematic because it would generate an unwanted torque floor at higher RPM, as well and/or damage my switching power supply. What I had missed is that back EMF is actually generated in the same direction as the resistive torque I wanted to generate on my load, so I spent an embaressing amount of time flipping the diode and motor polarity back and forth trying to figure out what was happening. *It's worth noting that this system works for a configuration where I wanted to stall the motor in the forward direction, which is not an entirely un-useful test to run, but I don't think would agree with a properly run test. What I wound up doing is ditching the variable power supply (it's actually useful for sweeping through stepper input voltages), and running the absorber motor off of a fixed voltage driven through a micro controlled brushed motor driver (an H-bridge). This way I can control the absorber in two ways:

  • At low RPM I PWM the H-bridge between load and recirculation, which is standard fare for driving a brushed DC motor, generating an active torque on the DUT.
  • At high RPM I PWM the H-bridge between high impedance and recirculation, which effectively turns it into an eddy current brake. The way the inductances of all of my motors stack up, the stepper will start stalling via this case at around 250 RPM.

So that all actually seems to work quite well. The catch is that I am using a standard arduino analogWrite to generate those PWMs, which is fixed at 500 Hz without spending a day reading the SAMD51 datasheet and flipping registers to switch clocks/timer multiplexing/prescalers. Because 500 Hz is approaching cogging ripple of the brushed DC motor and stepper at certain RPMs, I believe I am getting a very choppy back torque on the stepper as I flip in and out of harmonics between the absorber and driver. Next steps here will be to actually go register spleunking and speed up that PWM frequency.

Future things to get to

One very useful parameter space to explore will be the bounds on peak torque through increasing peak current limit. Let's imagine a 58mm long NEMA 23 stepper with 3 ohms of winding resistance, and 10 mH of winding inductance (made up numbers). The manufacturer will recommend some peak current for a motor with these parameters (guessing at 2A). I am still unsure if that peak current is thresholded by motor saturation, or temperature (what I think is more likely). With a thermocouple on the motor, I plan to add another dimension to sweep, which will be peak current in the motor. With this data it should be possible to really get into optimizing stepper closed loop stepper driving, where we could tap into a thermally not-sustainable current regime for added torque over some stretch of time. This data would also allow us to make more informed decisions when selecting between steppers with varying winding resistance and inductance, when trading off between peak speed and torque. Lots more to get to for this section, but I am running out of time for this week.

Week 2

Picture above is a link to a video. Still waiting on an INA260 from digikey for power measurement, after which I should be able to fully characterize steppers (and other motors) with speed-torque curves heatmapped with efficiency. This should look like the image below:

alt_text

Below is a high level overview of the dynamometer showing each major subsystem (aside from the power measurement IC which is being shipped from digikey). Each one is discussed in further detail below (please pardon my use of a breadboard at this stage :D).

alt_text

Week 1

RPM Measurement

RPM is measured with a 32ppr optical quadrature encoder mounted to the back of the absorber. Only one channel of the encoder is used, but rising and falling edges are both used. Measuring RPM is then done with a single interrupt triggering a counter and a timer.

alt_text

Torque Measurement

From the pictures below you can get an idea of how torque from the test motor travels through the frame and is ultimately constrained by the load cell. From early testing this system is sensitive down to the g*mm.

alt_text

Torque is measured with a 5kg load cell and a HX711 Load Cell Amp on a breakout board with serial output using its own protocol (it doesn't actually use a peripheral). Torque was calibrated using 1kg and 0.5kg weight at the 75mm moment arm shown below. With the configuration below, the setup is capable of measuring a peak torque of 54kgcm, which can be increased to 208kgcm with a 20kg load cell (or ~20Nm).

alt_text

Absorber and Back-Torque Generation

A brushed DC motor with a protected variable power supply is being used as the absorber, with the primary benefit of low RPM torque generation. Alternative absorbers considered were an eddy current brake (or an industrial induction motor with variable DC applied to one of the windings), or a bicycle disc brake.

Here's a link to the BK-1687B power supply which can accept 0-5V voltage and current control (also via USB and the DRO). The motor is a Midwest Motion Products brushed DC motor rated to 12A and 24V and 2000 rpm MMP D33 655E 24V. The power supply is protected via a diode in series with the absorber motor, which effectively keeps the absorber in open circuit until the power supply overcomes the back EMF of the absorber, and then (at least from my understanding) the DC motor starts generating torque proportional to the forward current. Inside the variable power supply is a rectifier and buck converter capable of closed loop voltage and current control. It's dangerous to drive large inductive loads (like motors) with switching power supplies because of flyback, and so there are two diodes oriented as shown below, where D1 keeps the absorber's windings (while being driven) in an effectively open circuit, and D2 is insurance in case that diode fails.

Because the power supply can only be controlled to 24V with our 3v3 analog outputs, a non-inverting op amp (OPA2337) was used to achieve the full 0-5v range. Because most of the micros that I use operate at 3v3 I am planning to permanently adhesive the breadboard that I used to do this to the back of the power supply (also convenient because the power supply has both the 0 and 5V rail voltages required.

alt_text

Pre-HTMS: Stall Condition Motor Test Rig

Goals

  • Standardize peak torque data relative to power (servos are typically giving peak torques when subject to many amps of current)
  • Add real time temperature data to get an idea of sustainability of above ^
  • Better understand tradeoffs between DC motors (hobby servos) - Steppers - BLDCs (both with and without reduction)
  • Inform design/selection for future actuator use cases
  • Complement a real dynamometer to acheive higher fidelity at stall condition

Link to motor testing data

This rig allows for peak torque measurements at stall for a variety of actuators, and precise measurements of torque ripple (in motors with less/no reduction). It also allows for measurement of torque required for backdrivability, particularly in motors with significant amounts of reduction, as well as angular jitter from the motor's feedback loop.

Measurements include torque and rotational position and a 5kg (interchangeable) load cell with an HX711 amplifier and an AMS 5047D rotary encoder measuring 14 bits of shaft rotation. The stepper shown below is just a shell for mounting the shaft, and has had its rotor removed and replaced with a dummy stainless shaft (to eliminate cogging). The EDM'd 1-piece shaft coupler shown in the photo below added a ton of torsional elasticity to the measurement and was later replaced with a spider'd shaft coupling.

alt_text

alt_text

alt_text