Repository navigation
LinkSensors de
English · Deutsch
Diese Seite ist ein Abschnitt von Der Link, der die Verkabelung, das Frame-Format, die Page Map und die übrigen Pages enthält. I2C steht für Inter-Integrated Circuit.
SENSE_MAP (0x35), SENSE_WIN_A (0x37) und SENSE_WIN_B (0x38) sind neu in 4.25,
SENSE_LIMIT (0x36) in 4.27.
SENSE_MAP richtet bis zu 4 Strommonitore TI INA3221 auf dem Sensorbus ein,
den SENSE öffnet, an 0x40 bis 0x43: welche Bauteile bestückt sind, einen
Shunt für jeden ihrer 12 Kanäle, was jeder Kanal misst, und den FAST-Kanal.
Die beiden Fenster-Pages tragen das letzte 50-ms-Fenster jedes Kanals.
SENSE_LIMIT hält eine Stromgrenze für jeden Kanal und markiert die Fenster
darüber. shared/outputs/sense_map.c und sense_limit.c halten die Regeln;
test_sense_map und test_sense_limit testen sie auf dem Host.
Kanal c ist Kanal ch von Bauteil a für c = 3 a + ch - 1, also 0 bis 11: Kanal 0 ist CH1 des Bauteils an 0x40, Kanal 11 ist CH3 des Bauteils an 0x43.
| Register | Name | Bedeutung |
|---|---|---|
| 0 | ENABLE |
Bit a: das Bauteil an 0x40 + a ist bestückt. 0 bis 15 |
| 1 | FAST |
der Kanal, der jede 1 ms gelesen wird, 0 bis 11, oder 0xFF für keinen. SERVO_WIN trägt seine letzten 4 Fenster, und SERVO_SENSE misst an ihm die Zeit einer Bewegung |
| 2 bis 13 | SHUNT[c] |
der Shunt von Kanal c in 0,1 mΩ, 50 bis 10000 (5 mΩ bis 1 Ω); 0 schaltet den Kanal ab: er wird nie gelesen |
| 14 bis 25 | WATCH[c] |
was Kanal c misst: 0 nichts genannt, 0x01 bis 0x08 Ausgangskanal 1 bis 8, 0x10 bis 0x13 Programmierport 1 bis 4, 0x20 die Versorgung. Der IOmcu hält den Wert und handelt nach nichts davon |
| 26 bis 29 | ID[a] |
nur lesbar: die Die-ID, die Bauteil a bei seiner letzten Abfrage geantwortet hat, 0 vor der ersten |
| 30 | FLAGS |
nur lesbar: Bit a Bauteil a online; Bit 4 + a Bauteil a hat mit einer anderen Identität geantwortet; Bit 8 die Map wurde geschrieben und wird gehalten (IN_FORCE); Bit 9 sie wurde nie geschrieben und ist das eine Bauteil von SENSE (DERIVED) |
| 31 | reserviert | liest 0 |
Die Register 0 bis 25 hält der IOmcu im Flash. Ein Schreiben liegt in ihnen: eines, das Register 26 erreicht, wird mit READ_ONLY abgewiesen. Die geschriebenen Register werden in die Map übernommen, und die ganze Map wird geprüft; eine abgewiesene Map lässt jedes Register, wie es war. Mit BAD_VALUE abgewiesen:
-
ENABLEüber 15; -
FASTnicht 0xFF und über 11, auf einem nicht bestückten Bauteil oder auf einem Kanal mit Shunt 0; - ein Shunt ungleich 0 außerhalb von 50 bis 10000;
- ein
WATCH-Wert außerhalb der Liste oben; - ein bestücktes Bauteil mit allen drei Shunts 0;
- ein bestücktes Bauteil auf der Adresse des INA228, solange SENSE den INA228 freigibt;
- eine Map, deren gespiegelte SENSE-Konfiguration (unten) SENSE selbst abweist: die Pins des Busses, solange die Map den Bus öffnet;
- jede Änderung, solange die Bank einen Ausgang treibt.
Ein nicht bestücktes Bauteil behält die für es geschriebenen Werte, nur auf
ihren Bereich geprüft. Eine Änderung von ENABLE, FAST oder einem Shunt
ist eine neue Konfiguration: Core 1 richtet den Bus neu ein, und jede Lesung
und jedes Fenster der Konfiguration davor fällt weg. Eine Änderung nur von
WATCH ist keine neue Konfiguration. Ein Schreiben der geltenden Map ändert
nichts und wird in jedem Zustand der Bank angenommen, ebenso ein erstes
Schreiben der abgeleiteten Map, wie sie liest.
Bis SENSE_MAP zum ersten Mal geschrieben wird, ist die Map aus dem einen
INA3221 von SENSE abgeleitet: ENABLE Bit a für das Bauteil an Register 8
von SENSE, solange Bit 1 von ENABLE in SENSE gesetzt ist, der Shunt von SENSE
auf jedem Kanal in Register 10 von SENSE, FAST CH1 dieses Bauteils,
solange CH1 gelesen wird, und nichts beobachtet. Bit 9 von FLAGS sagt das.
Eine Bench, deren Panel SENSE_MAP nie schreibt, läuft wie vor 4.25.
Das erste Schreiben setzt die Map in Kraft, und sie bleibt in Kraft: kein Schreiben macht sie wieder zur abgeleiteten Map. Von da an spiegeln Bit 1 von ENABLE und die Register 8 bis 10 von SENSE die Map:
| SENSE | Mit der Map in Kraft |
|---|---|
| ENABLE Bit 1 | gesetzt, solange ein Bauteil bestückt ist |
8 I3221_ADDR
|
das Spiegelbauteil: das Bauteil von FAST, oder das niedrigste bestückte, solange FAST 0xFF ist |
9 I3221_SHUNT_DMOHM
|
der CH1-Shunt des Spiegelbauteils, oder sein erster Shunt ungleich 0 |
10 I3221_CHANNELS
|
die Kanäle des Spiegelbauteils mit einem Shunt |
Ein Schreiben an SENSE, das Bit 1 von ENABLE oder die Register 8 bis 10
ändern würde, wird dann mit BAD_VALUE abgewiesen; ein Schreiben an SENSE,
das sie so trägt, wie sie lesen, wird angenommen. Die Flag-Bits 4 bis 6 von
SENSE und seine INA3221-Die-ID sind die des Spiegelbauteils. Die Register 0
bis 11 von SERVO_SENSE sind die drei Kanäle des Spiegelbauteils. SERVO_WIN
ist der Ring von FAST, und Kanal 1 einer Messung auf SERVO_SENSE ist
FAST: ein Scharfschalten der Messung, solange FAST 0xFF ist, wird mit
BAD_VALUE abgewiesen.
Das Fähigkeitsbit 3 von IDENTITY (SERVO_SENSE, Strom je Ausgang) ist das
INA3221-Bit von SENSE, solange die Map abgeleitet ist. Mit der Map in Kraft
ist es gesetzt, solange ein Kanal, den die Map liest -- ein bestücktes
Bauteil, ein Shunt ungleich 0 --, einen Ausgangskanal oder einen
Programmierport beobachtet. Es ändert sich nur mit einem angenommenen
Schreiben an SENSE oder SENSE_MAP.
Das letzte vollständige 50-ms-Fenster jedes Kanals: Kanäle 0 bis 5 auf SENSE_WIN_A, 6 bis 11 auf SENSE_WIN_B. Jedes Schreiben wird mit READ_ONLY abgewiesen. Nichts wird gehalten.
| Register | Name | Bedeutung |
|---|---|---|
| 0 | WINDOW |
die Nummer des Fensters modulo 65536, Register 12 von SERVO_SENSE |
| 1 | FLAGS |
Bit a Bauteil a online, auf beiden Pages; Bit 8 ein Fenster hat unter der geltenden Konfiguration geschlossen (HAVE) |
| 2 + 5 k | MEAN_MA |
Eintrag k, Kanal k der Page: mittlerer Strom in mA, mit Vorzeichen |
| 3 + 5 k | MAX_MA |
höchster Strom in mA, mit Vorzeichen |
| 4 + 5 k | MEAN_MV |
mittlere Busspannung in mV, an der Lastseite des Shunts |
| 5 + 5 k | MIN_MV |
niedrigste Busspannung in mV |
| 6 + 5 k | E_FLAGS |
Bit 0 Stromsamples, Bit 1 Spannungssamples, Bit 2 ein Stromsample am oberen Bereichsende, Bit 3 eines am unteren |
Eintrag k von SENSE_WIN_B ist Kanal 6 + k. Ein Sample am Bereichsende bleibt aus den Werten heraus, wie auf SERVO_SENSE. Ein abgeschalteter Kanal oder einer eines Bauteils, das nicht online ist, liest durchweg 0.
Die Raten, je 1-ms-Tick bei 400 kHz: FAST jede 1 ms; jeder andere Kanal
mit einem Shunt reihum, einer je Tick, 1000 / n Hz bei n davon (500 Hz je
für CH2 und CH3 eines Bauteils, 90,9 Hz je bei 11); jede Busspannung alle
24 ms (41,7 Hz); Mask/Enable und das Zurücklesen der Konfiguration jedes
Bauteils mit 25 Hz. Der längste Tick hält 742,5 µs Buszeit. 4 Bauteile mit
12 Kanälen, der INA228 und der Ausgangs-Encoder AS5600 belegen 60,8 % des
Busses; ein Bauteil mit 3 Kanälen und der INA228 43,4 %. Höchstens ein
Bauteil wird je Tick abgefragt.
Eine Stromgrenze für jeden Kanal, und die Kanäle, deren Fenster sie überschritten hat. Nur ein Alarm: eine überschrittene Grenze stoppt nichts, schaltet nichts auf SAFE und treibt nichts.
| Register | Name | Bedeutung |
|---|---|---|
| 0 bis 11 | LIMIT_MA[c] |
die Grenze von Kanal c in mA, 1 bis 32767; 0 = keine |
| 12 | OVER |
nur lesbar: Bit c, ein Fenster von Kanal c lag seit dem letzten Lesen dieses Registers über seiner Grenze |
| 13 | OVER_COUNT |
nur lesbar: Kanal-Fenster über der Grenze, modulo 65536, seit dem Start des IOmcu |
| 14, 15 | reserviert | lesen 0 |
Die Register 0 bis 11 hält der IOmcu im Flash. Ein Schreiben liegt in ihnen: eines, das Register 12 erreicht, wird mit READ_ONLY abgewiesen, ein Wert über 32767 mit BAD_VALUE, und ein abgewiesenes Schreiben speichert keines seiner Register. Ein Schreiben wird in jedem Zustand der Bank angenommen.
Core 1 prüft das 50-ms-Fenster jedes Kanals einmal, wenn das Fenster schließt. Ein Fenster liegt über der Grenze, wenn sein höchster Strom, in mA wie SENSE_WIN ihn zeigt, über der Grenze liegt: bei einer Grenze von 100 mA liegen 100,4 mA nicht darüber und 100,5 mA schon. Ein Fenster liegt auch darüber, wenn eines seiner Samples das obere Bereichsende gelesen hat und dieses Ende, ungerundet, über der Grenze liegt: 163,8 mV über dem Shunt, 1638,0 mA an 0,1 Ω, 163,8 mA an 1 Ω, so dass eine Grenze von 163 mA an 1 Ω überschritten wird. Ein negativer Strom liegt nie darüber. Ein abgeschalteter Kanal oder einer eines Bauteils, das beim Schließen des Fensters nicht online ist, liegt nie darüber. Core 1 zählt die Fenster jedes Kanals über der Grenze; Core 0 addiert, was die Zähler gewonnen haben, sooft er den Snapshot von Core 1 übernimmt, so dass kein Fenster verloren geht, gleich wie lange Core 0 braucht. Eine geschriebene Grenze gilt ab dem nächsten Fenster, das schließt.
OVER hält seine Bits, bis ein Lesen Register 12 abdeckt: dieses Lesen gibt
sie zurück und löscht sie. Eine auf dem Link verlorene Antwort verliert diese
Bits; OVER_COUNT zählt sie trotzdem. Eine neue Konfiguration lässt OVER
und OVER_COUNT stehen. Die Konsolenzeile liest beide, ohne zu löschen.
Der IOmcu hält die Register 0 bis 25 von SENSE_MAP, ob die Map in Kraft ist, und die Register 0 bis 11 von SENSE_LIMIT in seinem Speicher-Record, Version 8. Ein Record der Version 8 ist 308 Bytes groß und füllt einen Slot aus zwei Flash-Pages zu 256 Bytes: 8 Slots je Sektor zu 4096 Bytes, 16 im Speicher. Ein Speichern programmiert beide Pages in einem Fenster. Ein in einer der beiden Pages abgebrochenes Programmieren liest als kein Record: die Zahl der 0-Bits des Records und seine CRC-16 decken beide Pages ab.
Beim Booten kommen die Grenzen durch die Prüfungen eines Schreibens an SENSE_LIMIT zurück; ein gehaltener Wert über 32767 lässt jede Grenze auf 0. Die Map kommt nach der Konfiguration von SENSE zurück, durch die Prüfungen des Schreibens, und nur, wenn die Konfiguration von SENSE angenommen wurde. Eine gehaltene Map, die dort abgewiesen wird, kommt nicht zurück, und die Map liest abgeleitet.
Ein Speicher, den ein früherer Build geschrieben hat, hält Records der Versionen 3 bis 7 in Slots aus einer Page. Dieser Build liest den neuesten davon, solange der Speicher keinen Record der Version 8 hält: die Map liest dann abgeleitet. Der Sektor mit diesem Record wird erst gelöscht, wenn der erste Record der Version 8 geschrieben ist, so dass ein Stromausfall davor nichts verliert. Ein IOmcu-Image älter als 4.25 liest keinen Record der Version 8 und startet wie mit einem leeren Speicher.
| Panel | IOmcu | SENSE_MAP, SENSE_WIN_A, SENSE_WIN_B und SENSE_LIMIT |
|---|---|---|
| 4.25 oder neuer | 4.27 oder neuer | bedient. Das Panel liest SENSE_MAP bei jedem Link-Aufbau ganz, schreibt die Register 0 bis 25 in einem Schreiben so, wie SETUP > SENSOREN sie einstellt, und liest die Register 26 bis 30 alle 500 ms, solange ein Baustein bestückt ist. Nach einem angenommenen Schreiben liest es SENSE und IDENTITY neu: Fähigkeitsbit 3 kann sich schon mit WATCH allein ändern. SENSE_WIN_A liest es ganz, solange 0x40 oder 0x41 in der Map in Kraft bestückt ist, SENSE_WIN_B, solange 0x42 oder 0x43 es ist, jede in jedem Poll nach SERVO_WIN und höchstens alle 40 ms, in ARMED wie in SAFE, für die Spalten des Lauf-Logs (Screens). Es liest und schreibt keine Grenze |
| 4.25 oder neuer | 4.25 oder 4.26 | SENSE_MAP wie oben; der IOmcu beantwortet SENSE_LIMIT mit BAD_PAGE und prüft keine Grenze |
| 4.25 oder neuer | 4.24 oder älter | das Panel sendet an keine der vier Pages und richtet den einen INA3221 von SENSE auf einen bestückten Baustein ein (Screens) |
| 4.24 oder älter | 4.25 oder neuer, Map abgeleitet | das Panel liest und schreibt die vier Pages nie. SENSE läuft wie zuvor. Gehaltene Grenzen werden geprüft, und OVER hält seine Bits, bis etwas es liest |
| 4.24 oder älter | 4.25 oder neuer, Map in Kraft | Bit 1 von ENABLE und die Register 8 bis 10 von SENSE lesen das Spiegelbauteil. Ein Schreiben an SENSE, das sie ändert, wird mit BAD_VALUE abgewiesen, so dass dieses Panel die INA3221-Konfiguration nicht ändern kann. Der INA228, der Encoder und die Pins bleiben seine |
Ein mit IOMCU_CONSOLE=ON gebautes Image druckt die Map alle 3 s, solange
ein Bauteil auf SENSE freigegeben ist, nach den beiden sense-Zeilen
(Erster Lauf auf der Hardware):
rcbench-iomcu: sense map fit 0x3 fast 0 flags 0x0103 | mA 120 4 0 310 0 0 0 0 0 0 0 0 | over 0x008 count 3
fit ist ENABLE, fast ist FAST (255 für keinen), flags ist
FLAGS, die 12 Werte sind MEAN_MA jedes Kanals ab Kanal 0, und over und
count sind OVER und OVER_COUNT von SENSE_LIMIT.
rcbench
English
Using the bench
- What this is for
- Building
- Bringing up the link
- First run on hardware
- Screens
- Balancing
- Servo procedures
- Servo programmer for KST and Chaservo servos
- Stick programming
- Receiver buses
- Safety
- Parameters of ESCs with BLHeli_32 firmware
Reference
- The link
- The programming port for KST and Chaservo servos
- The programming port for Hitec servos
- The INA3221 map and windows
- The bench console
- DShot and the output drivers
- The OpenYGE protocol
- ESC programming profiles
- Performance
- Interface language
Deutsch
Den Prüfstand benutzen
- Worum es geht
- Bauen
- Den Link in Betrieb nehmen
- Erster Lauf auf der Hardware
- Bildschirme
- Auswuchten
- Servoverfahren
- Servo-Programmierer für KST- und Chaservo-Servos
- Stick-Programmierung
- Empfängerbusse
- Sicherheit
- Parameter von ESCs mit BLHeli_32-Firmware
Referenz