---
title: "Low side, high side or in line: where should a motor drive sense current?"
topic: "Sense position"
answer: "Low side, unless the motor needs every volt or a phase shorted to ground must trip the drive. Its amp sits at ground and costs least, but moteus-c1’s amp needs the bottom FET on for 3 µs of each 30 kHz cycle. That caps the motor at 43.7 V of 48 V at best, and moteus-c1’s firmware stops at 39.4 V. In line gives all 48 V and high side catches the short, each with an amp that rides 48 V."
url: "https://nearfieldnotes.com/notes/sense-position/"
site: "Near Field Notes"
author: "Michael Walker"
note: 19
family: "Sensing"
published: "2026-11-05"
revised: "2026-11-05"
revision: 1
video: "https://nearfieldnotes.com/videos/sense-position/"
---

Note 19 · [Sensing](https://nearfieldnotes.com/families/sensing/) · Rev 1 · [Watch the video · 0:49](https://nearfieldnotes.com/videos/sense-position/)

Sense position

# Low side, high side or in line: where should a motor drive sense current?

**Short answer:** Low side, unless the motor needs every volt or a phase shorted to ground must trip the drive. Its amp sits at ground and costs least, but moteus-c1’s amp needs the bottom FET on for 3 µs of each 30 kHz cycle. That caps the motor at 43.7 V of 48 V at best, and moteus-c1’s firmware stops at 39.4 V. In line gives all 48 V and high side catches the short, each with an amp that rides 48 V.

**Note 19’s opening figure: Phase A, three ways.** The shunt in each place in turn

![Note 19’s opening figure: Phase A, three ways](https://nearfieldnotes.com/notes/sense-position/fig-opening.png)

*What the figure shows:* Phase A of moteus-c1 as a half bridge, a 48 V rail over a top and a bottom FET with the motor's lead from the node between them, and two charts over one 30 kHz cycle at 65% duty: the shunt's current against the motor's steady 10 A, and the voltage the shunt's amp sits on. The shunt moves from the high side to the motor's lead to the low side. High side: it carries 10 A for 21.6 µs of the cycle, its amp at 47.2 to 48.6 V. In line: 10 A all the time, its amp swinging between 0 and 48 V. Low side: 10 A for 11.8 µs, its amp within half a volt of ground.

moteus-c1’s phase A over one 30 kHz cycle at 65% duty, 10 A out to the motor. The dashed line is the motor’s current, the solid one the shunt’s.

**The numbers**

| Shunt | Carries the motor’s 10 A | Reads 0 A | Its amp’s inputs |
|---|---|---|---|
| High side | 21.6 µs a cycle | 11.8 µs | 47.2 to 48.6 V |
| In line | All 33.3 µs | Never | −1.0 to 48.0 V |
| Low side | 11.8 µs a cycle | 21.6 µs | −199 mV to 440 mV |

## Three places for a shunt

*One half bridge per phase*

A three-phase motor drive has a [half bridge](https://nearfieldnotes.com/glossary/#g-half-bridge) for each phase. A top FET connects the phase to the supply, a bottom FET connects it to ground, and the motor’s lead leaves from the switch node between them.

A shunt can go above the top FET, in the motor’s lead, or below the bottom FET. Each needs [an amp](https://nearfieldnotes.com/glossary/#g-current-sense-amp) to read the few millivolts across it.

**Fig. 19: A shunt in each place.**

![Fig. 19: A shunt in each place](https://nearfieldnotes.com/notes/sense-position/fig-19.png)

*What the figure shows:* Figure 19: phase A's half bridge with a shunt in each of the three places it can go. A 48 V rail feeds the top FET, the switch node between the two FETs feeds the motor, and the bottom FET returns to ground. The high-side shunt sits between the rail and the top FET, the in-line shunt in the lead to the motor, the low-side shunt between the bottom FET and ground. Each has a current-sense amp across it.

Each triangle is the amp that reads the shunt beside it. A drive picks one place, not all three.

**The numbers**

| Shunt | Sits between | Its amp’s inputs sit at |
|---|---|---|
| High side | The 48 V rail and the top FET | The supply |
| In line | The switch node and the motor | The switch node, 0 or 48 V |
| Low side | The bottom FET and ground | Ground |

moteus-c1 is a 38 mm square motor controller from mjbots. It [senses low side](https://nearfieldnotes.com/glossary/#g-low-side-sensing). R6, R9 and R12 are its 2 mΩ shunts, one under each bottom FET.

A pair of thin traces runs from each shunt to U4, a DRV8323 gate driver with three amps built in. [Note 5](https://nearfieldnotes.com/notes/shunt-taps/) shows why those traces start where they do.

**Fig. 19b: moteus-c1’s power stage.**

![Fig. 19b: moteus-c1’s power stage](https://nearfieldnotes.com/notes/sense-position/fig-19b.png)

*What the figure shows:* Figure 19b: moteus-c1's power stage from its KiCad file, top copper. Six FETs in a row under the motor's pads A, B and C. Below them the three 2 mΩ shunts are lit: R6 for phase A, R9 for B, R12 for C. A lit pair of thin traces runs from each shunt down to U4, the DRV8323 gate driver, whose three amps read them.

Top copper from moteus-c1’s KiCad files. The motor’s pads A, B and C are along the top edge, the FETs under them.

**The numbers**

| Shunt | Phase | Value | Size | Read by |
|---|---|---|---|---|
| R6 | A | 2 mΩ | 0805, 2.0 × 1.25 mm | U4, DRV8323 |
| R9 | B | 2 mΩ | 0805, 2.0 × 1.25 mm | U4, DRV8323 |
| R12 | C | 2 mΩ | 0805, 2.0 × 1.25 mm | U4, DRV8323 |

## High side

*Between the supply and the top FET*

Start at the top. A high-side shunt carries phase A’s current only while the top FET is on, 21.6 µs of each 33.3 µs cycle here.

While the bottom FET is on, the motor’s current comes up from ground and misses the shunt. It reads 0 A for 11.8 µs while the motor still carries 10 A.

Its amp’s inputs sit on the supply, which rings from 47.2 to 48.6 V after each edge. The DRV8323’s amps take inputs within 0.15 V of ground, so a high-side shunt needs an amp of its own, like TI’s INA240, rated from −4 to 80 V.

In return it catches a phase shorted to ground. That current comes from the supply through the top FET, so it passes through the shunt.

**Fig. 19c: What a high-side shunt sees.**

![Fig. 19c: What a high-side shunt sees](https://nearfieldnotes.com/notes/sense-position/fig-19c.png)

*What the figure shows:* Figure 19c: the high-side shunt's current and the voltage its amp's inputs sit on over one 30 kHz cycle at 65% duty. The shunt carries the motor's 10 A while the top FET is on and drops to 0 A for 11.8 µs while the bottom FET is on. The amp's inputs sit on the supply at the FETs, which rings between 47.2 and 48.6 V after each edge.

One 30 kHz cycle at 65% duty, from the middle of the top FET’s on-time.

**The numbers**

| µs | High-side shunt, A | Its amp’s inputs, V |
|---|---|---|
| 0.0 | 10.00 | 47.57 |
| 5.0 | 10.00 | 47.87 |
| 10.0 | 10.00 | 47.82 |
| 11.0 | 10.00 | 47.85 |
| 12.0 | −0.01 | 48.22 |
| 16.7 | −0.00 | 47.66 |
| 22.0 | −0.00 | 48.19 |
| 23.0 | 0.00 | 48.00 |
| 24.0 | 10.00 | 47.50 |
| 30.0 | 10.00 | 48.10 |

## In line

*In the motor’s lead*

Move the shunt into the motor’s lead and it never goes blind. It carries the motor’s current all the time, so a reading can come at any moment and nothing caps the motor’s voltage.

The catch is where its amp sits: on the switch node. Every edge moves both inputs 48 V, up in 35.6 ns and down in 114 ns, 60,000 times a second.

Through that, the amp has to read 20 mV, what a 2 mΩ shunt like moteus-c1’s drops at 10 A. TI built the INA240 for this job, with what it calls enhanced PWM rejection.

**Fig. 19d: The switch node’s rising edge.**

![Fig. 19d: The switch node’s rising edge](https://nearfieldnotes.com/notes/sense-position/fig-19d.png)

*What the figure shows:* Figure 19d: the switch node, where an in-line amp's inputs sit, rising from 0 to 48 V as the top FET turns on. It takes 35.6 ns from 10 to 90% and climbs 6.5 V/ns at its fastest.

The top FET turning on with 10 A going out to the motor. Time from where the switch node passes 24 V.

**The numbers**

| ns | Switch node, V |
|---|---|
| −40 | −0.8 |
| −20 | −0.6 |
| −10 | 0.2 |
| 0 | 24.0 |
| 10 | 35.4 |
| 20 | 41.0 |
| 40 | 45.7 |
| 80 | 47.5 |
| 140 | 47.7 |

## Low side

*Between the bottom FET and ground*

At the bottom, the amp’s inputs stay near ground, so the cheapest amp will do. The DRV8323 has three built in, and moteus-c1 uses them.

The shunt sees phase A’s current only while the bottom FET is on, 11.8 µs of each cycle at 65%. For the other 21.6 µs it reads 0 A.

Each edge also rings across it. When the top FET turns on, the bottom FET’s 10 A stops in about 20 ns, falling at up to 0.9 A/ns. Through the shunt path’s 0.45 nH that kicks the voltage to 440 mV, past the 300 mV the DRV8323’s amps can read, and rings down to −199 mV. When the top FET turns off, it settles at −20 mV 1.3 µs after the command.

**Fig. 19e: The low-side shunt at both edges.**

![Fig. 19e: The low-side shunt at both edges](https://nearfieldnotes.com/notes/sense-position/fig-19e.png)

*What the figure shows:* Figure 19e: the voltage across the low-side shunt and the current up through it, at 65% duty, at both edges. When the top FET is told off, the bottom FET takes the motor's 10 A, and the voltage settles at −20 mV 1.3 µs after the command. When the top FET is told on, the bottom FET's current stops and the voltage rings from 440 mV down to −199 mV, past the amp's 300 mV range.

At 65% duty. Time from the moment the top FET is told to turn off, then on. Settled means within 2 mV of −20 mV. The current flows up from ground through the shunt, so 10 A puts its top 20 mV below ground.

**The numbers**

| Top FET | µs after the command | Across the shunt, mV | Up through the shunt, A |
|---|---|---|---|
| Told off | 0.00 | 0 | −0.00 |
| Told off | 0.50 | −0 | 0.01 |
| Told off | 0.60 | −1 | 0.09 |
| Told off | 0.65 | −9 | 0.37 |
| Told off | 0.70 | −55 | 12.94 |
| Told off | 0.80 | 35 | 10.44 |
| Told off | 1.00 | −34 | 9.77 |
| Told off | 1.30 | −20 | 9.90 |
| Told off | 1.50 | −20 | 9.97 |
| Told off | 2.00 | −20 | 9.98 |
| Told on | 0.700 | −22 | 10.03 |
| Told on | 0.750 | −0 | 9.92 |
| Told on | 0.760 | 303 | 6.54 |
| Told on | 0.764 | 440 | 3.64 |
| Told on | 0.766 | −199 | 3.27 |
| Told on | 0.770 | 203 | 2.51 |
| Told on | 0.800 | −37 | −4.06 |
| Told on | 0.900 | −72 | 0.54 |
| Told on | 1.000 | 10 | 1.09 |
| Told on | 1.200 | −3 | −0.20 |

## The read window

*3 µs at the bottom of every cycle*

A low-side reading needs the bottom FET on and the [ringing](https://nearfieldnotes.com/glossary/#g-ringing) gone. moteus-c1 reads all three shunts at once, in the middle of the bottom FETs’ on-time. Its firmware gives the amp 1.5 µs to settle at its gain of 20, so the bottom FET has to stay on for twice that:

`t_w = 2 · t_s`

where t_w: read window (µs); t_s: the amp’s settling time (µs).

`= 2 × 1.5 µs = 3 µs`

At 91% duty the window is as short as it can be. The switch node falls, the shunt takes the motor’s current, and the read comes 1.5 µs in.

The current only arrives 0.67 µs in, once the top FET has let go. It rides the bottom FET’s body diode through the [dead time](https://nearfieldnotes.com/glossary/#g-dead-time). The amp still gets 0.83 µs to settle, more than the 600 ns the DRV8323’s datasheet gives its amp at a gain of 20.

The shunt carries 10 A for 3.1 µs, a little longer than the 3.0 µs the bottom FET is told to stay on.

**Fig. 19f: The shortest window.**

![Fig. 19f: The shortest window](https://nearfieldnotes.com/notes/sense-position/fig-19f.png)

*What the figure shows:* Figure 19f: the read window at 91% duty, the most it allows at 30 kHz. The bottom FET is told on for 3.0 µs. Phase A's switch node falls to 0 V, the low-side shunt takes the motor's 10 A, and the read comes 1.5 µs in, in the middle.

At 91% duty, the most a 3 µs window allows at 30 kHz. Time from the moment the top FET is told to turn off.

**The numbers**

| µs after the top FET is told off | Phase A’s switch node, V | Low-side shunt, A |
|---|---|---|
| −0.50 | 47.7 | −0.00 |
| 0.00 | 47.7 | 0.00 |
| 0.50 | 45.2 | 0.01 |
| 0.70 | −0.8 | 12.94 |
| 1.00 | −0.2 | 9.77 |
| 1.50 | −0.2 | 9.97 |
| 2.00 | −0.2 | 9.97 |
| 3.00 | −0.2 | 10.00 |
| 3.50 | −0.7 | 10.02 |
| 4.00 | 47.6 | 1.09 |

At 30 kHz a cycle lasts 33.3 µs, so no phase can stay high for more than

`d_max = 1 − t_w/T`

where d_max: highest duty (share of the cycle); t_w: read window (µs); T: pWM period (µs).

`= 1 − (3 µs)/(33.3 µs) = 0.91`

The motor gets the difference between two phases. With one at 91% and another at 0%, that is at most

`V_max = d_max · V_bus`

where V_max: most the motor gets, line to line (V); d_max: highest duty (share of the cycle); V_bus: supply (V).

`= 0.91 × 48 V = 43.7 V`

A high-side shunt has the same cap, turned over. Its top FET must stay on 3 µs, so no phase can sit at 0 V.

**Fig. 19g: Most the motor gets, by shunt place.**

![Fig. 19g: Most the motor gets, by shunt place](https://nearfieldnotes.com/notes/sense-position/fig-19g.png)

*What the figure shows:* Figure 19g: the most the motor gets, line to line, from a 48 V supply at 30 kHz with moteus-c1's amp. In line: 48.0 V. High side, at best: 43.7 V. Low side, at best: 43.7 V. Low side, moteus-c1's firmware: 39.4 V.

At 30 kHz with moteus-c1’s amp at a gain of 20. The dashed line is the 48 V supply.

**The numbers**

| Shunt place | Share of the supply | Most the motor gets |
|---|---|---|
| In line | 100.0% | 48.0 V |
| High side, at best | 91.0% | 43.7 V |
| Low side, at best | 91.0% | 43.7 V |
| Low side, moteus-c1’s firmware | 82.0% | 39.4 V |

Read window

### The bottom FET’s 3 µs costs the motor 4.3 V

**Field marks.** Phase [duty](https://nearfieldnotes.com/glossary/#g-duty-cycle) that never passes 91%. A motor that tops out short of the speed its supply should give it, and only near top speed.

**Look-alike.** The limit of sine PWM. Driven with plain sine waves, a motor gets only 87% of the supply, 41.6 V here, and the shortfall looks the same. moteus centers its three phases the way space-vector PWM does, which reaches all 48 V. The 9% lost here is the [read window](https://nearfieldnotes.com/glossary/#g-read-window) alone.

**Range.** Reading two shunts and working out the third, since the three currents sum to zero, frees the phase with the highest duty. With moteus’s centering of the phases, that lifts the cap to 94.7%, 45.4 V. moteus-c1’s firmware keeps every phase clear of both ends, so it stops at 82%, 39.4 V. At a gain of 40, moteus waits 2.5 µs, and the 5 µs window leaves at best 85%, 40.8 V. moteus-c1’s firmware would stop at 70%, 33.6 V. In line has no window.

**Habitat.** Drives that read low-side or high-side shunts once a cycle, at the middle of the on-time: moteus-c1, and boards built on drivers with low-side amps inside, like the DRV8323.

## Where to sense

*A key*

Key to a sense position

### Where should your drive sense?

1. 1a The motor needs every volt of the supply In line, with an amp like the INA240
2. 1b It can spare a few volts Go to 2
3. 2a A phase shorted to ground must trip the drive High side
4. 2b Cost comes first Low side, like moteus-c1

moteus-c1’s answer is 2b: three 2 mΩ shunts read by the DRV8323’s own amps.

## Set the PWM yourself

*40 settings, every one drawn*

The amp sets the read window. Raise the PWM rate and the same window takes a bigger share of each cycle. Raise the gain and moteus waits longer for the amp.

**Note 19’s explorer: One cycle, and the most the motor gets.**

![Note 19’s explorer: One cycle, and the most the motor gets](https://nearfieldnotes.com/notes/sense-position/fig-explore.png)

*What the figure shows:* The bottom FET's read window in one PWM cycle, and the most the motor gets each way, for the chosen PWM rate and amp gain.

`d_max = 1 − (3.0 µs)/(33.3 µs) = 0.91`

where d_max: highest duty (share of the cycle).

Phase A as it is told to switch, without its edges. The window sits in the middle of the bottom FET’s on-time, where moteus reads. Settling times are moteus’s, for each gain of the DRV8323’s amps.

**Every case, as a table**

| PWM | Gain | Read window | Of each cycle | In line | High side, at best | Low side, at best | Low side, moteus-c1’s firmware |
|---|---|---|---|---|---|---|---|
| 10 kHz | 5 V/V | 1.5 µs | 1.5% | 48.0 V | 47.3 V | 47.3 V | 46.6 V |
| 10 kHz | 10 V/V | 2.0 µs | 2% | 48.0 V | 47.0 V | 47.0 V | 46.1 V |
| 10 kHz | 20 V/V | 3.0 µs | 3% | 48.0 V | 46.6 V | 46.6 V | 45.1 V |
| 10 kHz | 40 V/V | 5.0 µs | 5% | 48.0 V | 45.6 V | 45.6 V | 43.2 V |
| 15 kHz | 5 V/V | 1.5 µs | 2.2% | 48.0 V | 46.9 V | 46.9 V | 45.8 V |
| 15 kHz | 10 V/V | 2.0 µs | 3% | 48.0 V | 46.6 V | 46.6 V | 45.1 V |
| 15 kHz | 20 V/V | 3.0 µs | 4.5% | 48.0 V | 45.8 V | 45.8 V | 43.7 V |
| 15 kHz | 40 V/V | 5.0 µs | 7.5% | 48.0 V | 44.4 V | 44.4 V | 40.8 V |
| 20 kHz | 5 V/V | 1.5 µs | 3% | 48.0 V | 46.6 V | 46.6 V | 45.1 V |
| 20 kHz | 10 V/V | 2.0 µs | 4% | 48.0 V | 46.1 V | 46.1 V | 44.2 V |
| 20 kHz | 20 V/V | 3.0 µs | 6% | 48.0 V | 45.1 V | 45.1 V | 42.2 V |
| 20 kHz | 40 V/V | 5.0 µs | 10% | 48.0 V | 43.2 V | 43.2 V | 38.4 V |
| 25 kHz | 5 V/V | 1.5 µs | 3.8% | 48.0 V | 46.2 V | 46.2 V | 44.4 V |
| 25 kHz | 10 V/V | 2.0 µs | 5% | 48.0 V | 45.6 V | 45.6 V | 43.2 V |
| 25 kHz | 20 V/V | 3.0 µs | 7.5% | 48.0 V | 44.4 V | 44.4 V | 40.8 V |
| 25 kHz | 40 V/V | 5.0 µs | 12% | 48.0 V | 42.0 V | 42.0 V | 36.0 V |
| 30 kHz | 5 V/V | 1.5 µs | 4.5% | 48.0 V | 45.8 V | 45.8 V | 43.7 V |
| 30 kHz | 10 V/V | 2.0 µs | 6% | 48.0 V | 45.1 V | 45.1 V | 42.2 V |
| 30 kHz | 20 V/V | 3.0 µs | 9% | 48.0 V | 43.7 V | 43.7 V | 39.4 V |
| 30 kHz | 40 V/V | 5.0 µs | 15% | 48.0 V | 40.8 V | 40.8 V | 33.6 V |
| 40 kHz | 5 V/V | 1.5 µs | 6% | 48.0 V | 45.1 V | 45.1 V | 42.2 V |
| 40 kHz | 10 V/V | 2.0 µs | 8% | 48.0 V | 44.2 V | 44.2 V | 40.3 V |
| 40 kHz | 20 V/V | 3.0 µs | 12% | 48.0 V | 42.2 V | 42.2 V | 36.5 V |
| 40 kHz | 40 V/V | 5.0 µs | 20% | 48.0 V | 38.4 V | 38.4 V | 28.8 V |
| 50 kHz | 5 V/V | 1.5 µs | 7.5% | 48.0 V | 44.4 V | 44.4 V | 40.8 V |
| 50 kHz | 10 V/V | 2.0 µs | 10% | 48.0 V | 43.2 V | 43.2 V | 38.4 V |
| 50 kHz | 20 V/V | 3.0 µs | 15% | 48.0 V | 40.8 V | 40.8 V | 33.6 V |
| 50 kHz | 40 V/V | 5.0 µs | 25% | 48.0 V | 36.0 V | 36.0 V | 24.0 V |
| 60 kHz | 5 V/V | 1.5 µs | 9% | 48.0 V | 43.7 V | 43.7 V | 39.4 V |
| 60 kHz | 10 V/V | 2.0 µs | 12% | 48.0 V | 42.2 V | 42.2 V | 36.5 V |
| 60 kHz | 20 V/V | 3.0 µs | 18% | 48.0 V | 39.4 V | 39.4 V | 30.7 V |
| 60 kHz | 40 V/V | 5.0 µs | 30% | 48.0 V | 33.6 V | 33.6 V | 19.2 V |
| 80 kHz | 5 V/V | 1.5 µs | 12% | 48.0 V | 42.2 V | 42.2 V | 36.5 V |
| 80 kHz | 10 V/V | 2.0 µs | 16% | 48.0 V | 40.3 V | 40.3 V | 32.6 V |
| 80 kHz | 20 V/V | 3.0 µs | 24% | 48.0 V | 36.5 V | 36.5 V | 25.0 V |
| 80 kHz | 40 V/V | 5.0 µs | 40% | 48.0 V | 28.8 V | 28.8 V | 9.6 V |
| 100 kHz | 5 V/V | 1.5 µs | 15% | 48.0 V | 40.8 V | 40.8 V | 33.6 V |
| 100 kHz | 10 V/V | 2.0 µs | 20% | 48.0 V | 38.4 V | 38.4 V | 28.8 V |
| 100 kHz | 20 V/V | 3.0 µs | 30% | 48.0 V | 33.6 V | 33.6 V | 19.2 V |
| 100 kHz | 40 V/V | 5.0 µs | 50% | 48.0 V | 24.0 V | 24.0 V | 0.0 V |

#### Conditions

- **Board:** mjbots moteus-c1 r1.2, phase A, at 48 V with 10 A leaving the switch node
- **Bench:** The circuit of [Note 4](https://nearfieldnotes.com/notes/gate-ringing/): moteus-c1’s copper from an openEMS solve, the DRV8323S’s drive and Toshiba TPN19008QM FETs, the leg [Note 20](https://nearfieldnotes.com/notes/fet-choice/) also uses, run for one whole 30 kHz cycle at 65% and at 91% duty
- **Motor:** A steady 10 A out of the switch node, so an in-line shunt carries exactly the motor’s current
- **Waves:** Each run cut where both ends match, in the bottom FET’s settled on-time, so one cycle repeats exactly
- **Timing:** moteus’s firmware, read 2026-11-05: 30 kHz, all three shunts read in the middle of the bottom FETs’ on-time, the amp given 0.75, 1.0, 1.5 or 2.5 µs to settle at a gain of 5, 10, 20 or 40
- **Limits:** The largest line-to-line voltage with no phase clipped. At best, one phase at the highest duty and another at 0%. For moteus-c1’s firmware and for two shunts read, moteus’s own centering of the three phases, from a model run for every setting
- **Solver:** ngspice

Simulated only. Nothing on this page has been measured on a board yet.

#### Limits

- The bench has no high-side or in-line shunt. Their currents are the top FET’s and the motor’s, and their few millivolts of drop are left out.
- The amps themselves aren’t modeled. The DRV8323’s datasheet gives 600 ns for its amp to settle within 1% at a gain of 20. moteus allows 1.5 µs.
- Duty here is as told. In the sim, dead time and switching delays keep phase A’s switch node high for 90.5% of the cycle when told 91%.
- Fig. 19b’s sense traces come from the KiCad files. The bench solved phase A’s power loop, not them.
- Phases B and C, and the motor’s inductance and back-EMF, aren’t simulated.

#### Files

- psim/cycle.py The whole-cycle runs on the bench
- psim/edge.py The switch node’s edges
- psim/pwm.py moteus’s modulation and the duty limits

#### Sources

- [moteus’s firmware, Apache-2.0: fw/bldc_servo.cc and fw/drv8323.h](https://github.com/mjbots/moteus/tree/main/fw)
- [moteus-c1’s KiCad files, Apache-2.0](https://github.com/mjbots/moteus/tree/main/hw/c1)
- [TI, DRV8323 datasheet, SLVSDJ3D](https://www.ti.com/lit/ds/symlink/drv8323.pdf)
- [TI, INA240 datasheet, SBOS662C](https://www.ti.com/lit/ds/symlink/ina240.pdf)
- [ngspice, the circuit simulator](https://ngspice.sourceforge.io/)

What should the next note be? [Ask for one](https://nearfieldnotes.com/#ask-for-a-note)

---

Source: https://nearfieldnotes.com/notes/sense-position/

Cite as: Michael Walker, “Sense position”, Near Field Notes, Note 19, Rev 1, 5 Nov 2026. https://nearfieldnotes.com/notes/sense-position/

Figures: free to reuse under CC BY 4.0 (https://nearfieldnotes.com/license/). Each one's image is linked under its name. Credit Michael Walker, Near Field Notes, and link the figure: this address plus #fig- and its number, like https://nearfieldnotes.com/notes/sense-position/#fig-19.
