|
Motion Master 6.0.0-alpha.86
Next-generation motion control software
|
The register maps of the two iC-Haus chips inside a Circulo's internal encoder — reference data for OS command 0, and documentation in its own right. More...
#include <array>#include <cstddef>#include <cstdint>#include <nlohmann/json_fwd.hpp>#include <span>#include <string>#include <string_view>Go to the source code of this file.
Classes | |
| struct | mm::node::somanet::IcHausField |
| One field of a register — a named piece of it, with what the datasheet calls it. More... | |
| struct | mm::node::somanet::IcHausRegister |
| One row of a register map — usually one address, sometimes a printed range. More... | |
| struct | mm::node::somanet::IcHausRegisterSpace |
| One addressable register space of one chip. More... | |
Namespaces | |
| namespace | mm |
| namespace | mm::node |
| namespace | mm::node::somanet |
Pure SOMANET (Synapticon manufacturer-specific) vocabulary — object indices, sub-entry numbers and enumerations, with no dependency on Device. | |
Enumerations | |
| enum class | mm::node::somanet::IcHausChip : uint8_t { mm::node::somanet::kIcMu , mm::node::somanet::kIcPvl } |
| Which chip a register space belongs to. More... | |
Functions | |
| constexpr std::string_view | mm::node::somanet::toString (IcHausChip chip) |
Name of a chip, as the console and logs should render it. Never returns nullptr. | |
| void | mm::node::somanet::to_json (nlohmann::json &j, const IcHausField &field) |
Serialises an IcHausField. Participates in nlohmann ADL. | |
| void | mm::node::somanet::to_json (nlohmann::json &j, const IcHausRegister &r) |
Serialises an IcHausRegister, layout() included. Participates in nlohmann ADL, so a span of them converts on its own. | |
| void | mm::node::somanet::to_json (nlohmann::json &j, const IcHausRegisterSpace &space) |
Serialises an IcHausRegisterSpace, registers included. | |
| std::span< const IcHausRegisterSpace > | mm::node::somanet::icHausRegisterSpaces () |
| Every register space of both chips, in the order a reader should meet them: the iC-MU's two, then the iC-PVL's three. | |
Variables | |
| constexpr size_t | mm::node::somanet::kMaxFieldsPerRegister = 8 |
| How many fields one register row can name. | |
The register maps of the two iC-Haus chips inside a Circulo's internal encoder — reference data for OS command 0, and documentation in its own right.
Pure data with no dependency on Device, like kuebler_registers.h, which does the same job for the Integro's internal (Kübler) encoder. Served as-is by GET /api/meta/ic-haus-registers.
Two chips, and the iC-MU is the one in charge. The iC-MU is the position encoder proper: a magnetic off-axis absolute chip speaking BiSS-C to the drive. The iC-PVL is a battery-buffered Hall multiturn counter behind it, counting revolutions while the drive is unpowered; the drive reaches it over I²C through the iC-MU, never directly, using the device ids the iC-MU's I2C_DEVID register (0x5E) carries. At startup the firmware syncs the two — reading the iC-PVL's SYNC bits, converting them to an angle, and correcting the iC-MU's SPO_MT.
The space is part of a register's identity, not a heading. Addresses collide across the five spaces below — iC-PVL 0x00 is EN_PAR/EN_ERR/DIR/… in EEPROM and Table 6, and PRESET/PDR/BAT_WRN/… in the limited I²C window — so an address alone names nothing.
Transcribed from the vendors' datasheets: iC-MU Series Rev B1 (Tables 90 and 91) and iC-PVL Rev F2 (Tables 5, 6 and 7). A register carries the datasheet's own fields, most significant bit first; a row spanning several addresses is kept as one row, exactly as the datasheets print it.
Each field's description is the datasheet's own one-liner for it, from the CONFIGURATION PARAMETERS index (iC-MU p. 18-19, iC-PVL p. 12) and, for the status registers the iC-PVL breaks out bit by bit, from its status byte tables. The prose behind those lines is not reproduced — this is the map with its legend, not the manual.
Granularity follows each datasheet's own register map. The iC-PVL prints its status registers bit by bit, so those appear here as eight fields; the iC-MU prints its own as STATUS0(7:0), so that is one field. Neither is re-cut to match the other, because the map is what a reader will have open beside this.