krishnax12/tensa-zangetsu-keychain-nfc
Summary: Calculates target inductance and estimated resonance for a 14.5 MHz square antenna using chip, interturn, bridge, and connection capacitances.
- Version
- 0.0.13
- License
- unset
- Stars
- 1
square-antenna.ts
type XY = [number, number]
export const coilWidth = 0.2
export const coilPitch = 0.4
export const coilTurns = 11
export const coilSide = 16
export const coilOrigin: XY = [1, 56]
const halfSide = coilSide / 2
const outerTerminalExtension = 1
// Keep the terminal outside the windings so the chip connection has an escape.
export const antennaRoute: XY[] = [
[-halfSide, -halfSide - outerTerminalExtension],
]
for (let turn = 0; turn < coilTurns; turn++) {
const inset = turn * coilPitch
const left = -halfSide + inset
const right = halfSide - inset
const bottom = -halfSide + inset
const top = halfSide - inset
antennaRoute.push(
[left, bottom],
[left, top],
[right, top],
[right, bottom],
[left + (turn === coilTurns - 1 ? 2 : 1) * coilPitch, bottom],
)
}
// Move the inner terminal into the opening so its via clears adjacent turns.
const innerLeft = -halfSide + (coilTurns - 1) * coilPitch
const innerBottom = innerLeft
antennaRoute.push([innerLeft + 2 * coilPitch, innerBottom + 2 * coilPitch])
export const outerTerminal = antennaRoute[0]
export const innerTerminal = antennaRoute[antennaRoute.length - 1]
// ST AN2866 section 4.2, square spiral estimate; excludes parasitic capacitance.
const outerDiameterM = (coilSide + coilWidth) / 1000
const innerDiameterM =
(coilSide - 2 * (coilTurns - 1) * coilPitch - coilWidth) / 1000
const averageDiameterM = (outerDiameterM + innerDiameterM) / 2
const fillRatio =
(outerDiameterM - innerDiameterM) / (outerDiameterM + innerDiameterM)
export const estimatedInductanceH =
(2.34 * 4 * Math.PI * 1e-7 * coilTurns ** 2 * averageDiameterM) /
(1 + 2.75 * fillRatio)
export const coilInductance = `${estimatedInductanceH * 1e6}uH`