POMEAS motorized zoom lenses are positioned by absolute pulse count, not by voltage and not by an analogue feedback signal. Each lens model is supplied with a pulse table in which the filename identifies the lens model and every line maps one optical magnification to its pulse position — for example 1X 4600, 2X 8400. Preset multi-position zooming is then simply a matter of storing those pulse values and issuing repeated MoveTo(pulse) calls.
Because the mapping is produced by factory calibration of a specific optical and mechanical assembly, pulse values must always be quoted together with the exact model number and motor type. The same magnification maps to different pulse counts on different models, on different motor generations, and on encrypted versus standard control cards.
| Item | Value |
|---|---|
| Positioning method | Absolute pulse count with a homing reference |
| Pulse table location | OP/*.txt in the SDK — filename = lens model, each line = one magnification |
| Typical granularity | 9 to 17 selectable magnification steps per lens, depending on model |
| Position read-back | Yes — GetPos() / serial XN |
| Relationship to magnification | Non-linear; pulse increments per magnification step shrink as magnification rises |
| Portability between models | None — tables are model-specific and motor-specific |
| Control method | Positioning | Repeatable? |
|---|---|---|
| DC motor with potentiometer | Analogue, no absolute reference | No |
| Stepper or servo with pulse counting | Absolute pulse count | Yes — readable and reproducible |
| POMEAS motorized zoom | Absolute pulse plus a home reference | Yes — MoveTo(absolute pulse) with position read-back |
The engineering consequences matter more than the mechanism:
The following table is the factory pulse table for the PMS-LZL-12109-3, a dual-motor 12.5X lens with a 3 mm powered focus trim motor. It provides nine magnification steps across its range.
| Optical magnification | Pulse | Optical magnification | Pulse |
|---|---|---|---|
| 0.58X | 10 | 4X | 13650 |
| 1X | 4600 | 5X | 15200 |
| 2X | 8400 | 6X | 16500 |
| 3X | 11700 | 7X | 17700 |
| — | — | 7.5X | 18650 |
Read the increments rather than the absolute numbers and the non-linearity is obvious: the step from 1X to 2X costs 3800 pulses, while 7X to 7.5X costs only 950. Pulse count tracks mechanical position; magnification is the optical result. The two are related by factory calibration, not by a formula you can extrapolate.
The table below belongs to the 6.5X 65-series platform, used by the PMS-LZ-650104 (motorized) and PMS-LZ-650105 (motorized, coaxial illumination). It has eleven steps and a total travel of 24400 pulses.
| Optical magnification | Pulse | Optical magnification | Pulse |
|---|---|---|---|
| 0.69X | 0 | 3X | 20000 |
| 0.7X | 500 | 3.5X | 21800 |
| 1X | 8000 | 4X | 23000 |
| 1.5X | 12000 | 4.5X | 24200 |
| 2X | 15500 | Total travel: 24400 | |
| 2.5X | 18000 | ||
Compare the two tables and the point becomes concrete: 1X is pulse 4600 on the 12.5X lens and pulse 8000 on the 6.5X lens. There is no shared scale. A pulse value is meaningless unless the model is stated alongside it.
Different motor generations use different step angles and micro-stepping, so the same optical magnification lands on a different pulse count. Always match the table to the control line actually fitted to your lens.
Lenses fitted with the encrypted control card have an independent mechanical zero calibration and a Flash parameter area. Their pulse tables differ from the standard version of the same optical platform — at 1X, for example, the 6.5X 1" platform reads 6500 on the encrypted card and 8000 on the standard card. Changing the control card means changing the table.
Rail-mounted zoom constructions use a different mechanical drive, which is also why the two variants of the 6.5X platform are specified with different object-space resolution figures. Specification data should be taken per model, not per series.
Pulse tables exist in more than one document, and they do not all agree. One widely circulated table in the product manual is an eight-column layout whose column headings do not line up with the data beneath them. Cross-checking that table against the actual per-model pulse files in the SDK shows the mismatch clearly:
| Column as labelled | What the data actually is | How we know |
|---|---|---|
| "650 series" | Correct — 65-series data | Matches the 65-series pulse file exactly, step for step (1X = 8000, 2X = 15500, 4.5X = 24200, total 24400) |
| "4K series" | Actually 12.5X data | Matches the 12.5X lens pulse file exactly (1X = 4600, 2X = 8400, 4X = 13650, 7.5X = 18650) |
The practical rule: take pulse values from the per-model pulse files supplied with the SDK, not from a summary table in a manual. A summary table that mixes platforms is a reading hazard, and using a column under its printed heading will send the lens to the wrong position.
| Route | Method | Typical use |
|---|---|---|
| Raw serial command | XG plus six HEX digits | PLC, motion controller, microcontroller |
| SDK legacy API | MoveGoto(Motor m, long dest) | Windows C++ / C# |
| SDK V4.4.7 | MoveTo(pulse) with GetPos() read-back | Recommended for new development |
(1) XM / GetMaxPos() read total travel, confirm the target is in range
(2) XH / GoHome() home the lens and establish the absolute reference
(3) XG <pulse> / MoveTo() move to the preset position
(4) XZ / GetStatus() poll until 0x55, or until status reads stopped
(5) XN / GetPos() read back and verify (closed loop)
(6) back to (3) for the next preset position
Point-to-point cycling is a native capability of the supplied demo application: enter a pulse value in the test-position field, load it as a recorded position, set a repeat count and a wait time, and run. That is the mechanism behind multi-position zoom sequencing — one lens serving several product variants by calling different position sets, with no lens change and no mechanical switching hardware.
// Move to a preset magnification and verify the result
int zoomTo(int fd, long targetPulse) {
char buf[16];
int n = snprintf(buf, sizeof(buf), "%c%c%6lX%c", 'X', 'G', targetPulse, '\r');
if (write(fd, buf, n) != n) return -1; // send
if (waitStop(fd, 10000) != 0) return -2; // wait for motion to end
long pos = readPos(fd); // read back
return (labs(pos - targetPulse) <= TOL) ? 0 : -3; // tolerance set by the integrator
}
The tolerance TOL must be chosen by the integrator according to the process requirement. The protocol supplies position read-back; it does not define a repeatability figure, and no numeric accuracy claim should be made without measurements taken on your own hardware under your own conditions.
If your process needs a repeatability figure, measure it. The procedure below produces a range value for one specific operating condition.
| Step | Action |
|---|---|
| 1 | Choose two preset positions far apart: A (low magnification) and B (high magnification) |
| 2 | Home the lens, MoveTo(A), wait for stop, record position P₁ with GetPos() |
| 3 | MoveTo(B), wait for stop, record the position |
| 4 | MoveTo(A), wait for stop, record P₂ |
| 5 | Repeat steps 3–4 N times — N of 30 or more is advisable — recording the position reached at A each time |
| 6 | Compute the range R = max(Pᵢ) − min(P₂) and the standard deviation |
| 7 | Swap the roles of A and B and repeat in the opposite direction (bidirectional testing) |
| 8 | Record ambient temperature, motor cable length and travel speed alongside the result |
Report the range R for that specific set of conditions, and state the conditions — a figure without its conditions is not usable by anyone.
No. Published values for the 12.5X platform differ by motor generation, and the numbers are not interchangeable. Quote the pulse value together with the model and the motor type, always.
No. Optical design, mechanical travel and motor micro-stepping all differ. Look up each model separately. The 6.5X platform alone has at least four distinct tables across its standard, encrypted and rail variants.
They do not. The encrypted card has its own zero calibration and Flash parameter area, so its table differs from the standard card on the same optics.
Pulse is position; magnification is the optical result. The relationship is established by factory calibration and is not linear.
Not reliably. Use the per-model pulse file shipped with the SDK. Summary tables in manuals can and do contain column misalignment, and the consequence is a lens driven to the wrong position.
From factory calibration of each individual lens model. They are distributed as plain text files in the OP folder of the SDK, where the filename is the lens model and each line pairs one magnification with its pulse position.
No. Pulse increments per magnification step decrease as magnification increases, because pulse count tracks mechanical position rather than optical power.
The lens accepts any pulse value within its total travel, so intermediate positions are reachable. Because the relationship is non-linear, the magnification at an intermediate pulse has to be established by measurement rather than by interpolation.
The lens does not move and reports no error. This is specified behaviour, and it is the reason a position read-back — not a move command — is the reliable way to confirm the link is alive.
Yes, if you want the absolute reference to be valid. Homing establishes the mechanical zero that the absolute pulse values are measured from.
XG, XM and XN commands used aboveMoveTo, GetPos, GoHome and the dual-motor API familyReal integration example: Motorized zoom lens equipment integration: WD, mechanical length and parfocality verified - a documented automation case, not a product spec sheet.
Simply enter your email to receive the latest news and insights from Pomeas. Stay connected with Pomeas and be the first to discover new innovations in optical excellence.