IRI Filler Pro - Voice-coil direct drive (PREFERRED PATH)
Confidential - under NDA - YAVU - rev. D, 2026-08-10
Read MEASURED_DATA.md first. Every number here follows from it.
This is what YAVU wants to build. Revisions A-C of this document treated the voice coil as progressively less feasible and rev. C effectively wrote it off. That was wrong, and it was wrong because it used an estimated plunger geometry instead of the measured one, and continuous force ratings instead of pulsed ones. With the measured data the picture changes completely. We would like the voice coil, not the spring, if you can build it.
1 - Why we want it
- No cocking step and no cocking noise. The spring path needs 1.5-2.5 s of gearmotor whirr after every shot. This is the single biggest complaint about the current manual device's successor concept. The voice coil removes it entirely.
- A programmable shot. Bi-phasic firing - a short strong phase to breach the stratum corneum, then a gentler phase to deliver - which a spring physically cannot do.
- No stored mechanical energy at rest. No cocked spring to hold through a power failure, no non-backdrivable holding element, no dry-fire hazard from a loaded striker. Three of the open safety items on the spring path simply disappear.
- Dose accuracy in software, not in a mechanical stroke limiter.
2 - The requirement, from measured geometry
Effective plunger area is 10.18 mm² (Ø 3.60 mm) - derived from measured volume and travel,
confirmed independently on three devices. Force = pressure × area:
| Firing pressure | Force at the plunger |
|---|---|
| 74 bar - static equivalent of the existing spring (measured) | 75 N |
| 150 bar | 153 N |
| 250 bar | 254 N |
| 354 bar - upper bound, from the impulse simulation | 360 N |
| Stroke per 60 µl shot | 5.90 mm |
| Cumulative travel, 0.3 ml chamber | 29.5 mm (5 shots) |
| Nozzle | 0.18 mm (measured) |
| Shot duration at 266 m/s | ~8.9 ms for 60 µl |
Design against 360 N with margin, i.e. 500-600 N pulse capability, until the pressure measurement narrows it. If the real pressure turns out to be 150-250 bar, the actuator gets correspondingly smaller.
3 - Why this is an ordinary actuator, not an exotic one
A 5.9 mm stroke is the favourable regime for a voice coil. Force density rises as stroke falls: a short coil sits entirely in the strongest part of the gap, and the magnet assembly stays small. Long-stroke actuators are what get large and heavy.
And a shot is a pulse, not a load. 10 ms of firing every 800 ms is a duty cycle of 1.25 %. Coil heating follows RMS current, so at equal heating the peak current may be roughly 9× the continuous rating. Magnetic saturation limits it before heat does, so 2-4× the catalogue figure is realistic in this service.
Both of these were missed in revisions A-C, which compared a requirement computed from an estimated geometry against catalogue continuous ratings. That is what produced the "Ø 75-100 mm, 1.5-3 kg" conclusion. It does not hold.
Please state force at 1-2 % duty, not only the continuous or catalogue "peak" rating. That single number decides the size of the actuator.
4 - The one mechanism that must be added
A voice coil returns to centre after each shot; it cannot walk forward. The chamber holds 300 µl and one shot is at most 60 µl, so the plunger must advance 29.5 mm cumulatively across five shots.
Proposed hybrid: the coil fires, a small motor indexes. The coil needs only the single-shot stroke of ~6 mm plus over-travel. Between shots a small gearmotor or lead screw advances the plunger by one dose. That motor has 800 ms and no speed requirement at all, so it can be tiny, cheap and effectively silent - it does not reintroduce the cocking noise, because it is not fighting a spring and it is not in the firing path.
This keeps every advantage in section 1 and removes the only structural objection.
5 - Specification to source against
| Parameter | Requirement |
|---|---|
| Peak force, pulsed | 500-600 N design target (360 N requirement + margin for seal friction, viscous losses in crosslinked HA, ageing). Revise down once the pressure is measured. |
| Force at 1-2 % duty | Must be stated - not the continuous rating, not an unqualified "peak". |
| Stroke | ~6 mm usable + over-travel. Full ampoule travel is handled by indexing (section 4). |
| Km² = Kf²/R | The efficiency figure of merit. Must be stated. |
| Kf [N/A], R [Ω], L [mH] | Kf sets the current, R and L the achievable current rise time. |
| Max pulse current | Must be stated; the discharge switch must match it. |
| Plunger velocity | v = v_jet · A_nozzle / A_bore = 266 · 0.0254 / 10.18 ≈ 0.66 m/s |
| Mechanical power | F · v ≈ 240 W at 360 N |
| Capacitor bank | Mechanical work ~2.1 J per shot; at realistic pulse efficiency the bank lands between 5 and 20 J. Bench measurement decides. Headline cost and size driver. |
| Bleed-down | Bank must discharge within a defined time after power-off and on docking (IEC 60601-1, skin-contact device). |
| Recharge budget | 5-20 J within the 800 ms minimum interval = 6-25 W from the cell. |
| Duty | 300 shots/day per acceptance test E1; report coil temperature after 20 consecutive shots. |
6 - The firmware is written and tested
core/vc_shot is complete and covered by the automated suite: bi-phasic profile, breach volume
accounted against the dose, delivery time stretched by sqrt(breach_N/deliver_N) when the
delivery phase runs at lower force, 60 µl hard clamp, dock inhibit, minimum interval,
capacitor-charge watchdog. The profile requests a force in newtons; your HAL converts to
current with your coil's Kf.
us_per_ul now defaults to 180, matching the measured 0.18 mm nozzle. It is a bench
calibration value, settable at runtime and persisted in NVS.
Drive selection is automatic: if halVoiceCoil() returns a driver, this path runs. Nothing in
/core changes when you switch.
Open on our side: IVoiceCoilDriver has no completion signal, so a shot is currently
billed on the basis that fire() returned without error. We will add a busy()/completion
semantic - tell us which form suits your driver.
7 - What we ask
- Confirm feasibility against section 5, with force stated at 1-2 % duty, plus Km², Kf, R, L.
- Measure the firing pressure on the reference device we ship you - in-line transducer, optical jet velocity, or gel penetration against the reference. Any one closes the last gap and will likely let us reduce the force target.
- Quote the hybrid of section 4: voice coil for the shot, small indexing motor between shots.
- Bench test: fire into a load cell over the stroke; fire into a shot-weight target through
the production nozzle to derive
us_per_ulandbreach_ul. - Report the actual size and mass of the actuator that met the force.
The motor-cocked spring (MOTOR_SPRING_DRIVE) remains our fallback and is the lower-risk
option. But if the voice coil is buildable at a sane size and cost, that is the product we
want to make.
Source: firmware repo docs/VOICE_COIL_DRIVE.md · confidential · NDA