Motion Master 6.0.0-alpha.86
Next-generation motion control software
Loading...
Searching...
No Matches
ic_haus_registers.h File Reference

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>
Include dependency graph for ic_haus_registers.h:
This graph shows which files directly or indirectly include this file:

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 IcHausRegisterSpacemm::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.
 

Detailed Description

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.