08 — Stegmotor för flödesbromsen (CL57RS)¶
Stegmotorn -MA1 vrider flödesbromsens snedsätesventil -QN7 genom en vinkelväxel.
Drivaren -TB1 sitter på Modbus-kedjan som slav 2 — inkoppling, DIP-lägen och
terminering står i 05-modbus.md. HMI-sidan (MQTT-topics,
handratt, gränssnitt) beskrivs i projektdokumentet
claude/hmi-brake-stegmotor.md.
Allt i avsnitten om enheter och homing är uppmätt eller provat på bänken 2026-09-29.
Status 2026-09-30.
Flip-PLCpå grenenclaude/homing-params-persist(byggd påclaude/nonblocking-modbus-homing, commit 06fbf69) har homingen inbyggd och styr bromsen i varv från homingläget, öppet = positivt — se PLC-grenen. Den grenen är inte provkörd på Opta och inte sammanslagen medmain.Flip-HMIanvänder fortfarande de gamla topics (cmd/zero,cmd/position_steps) som inte finns i grenen. Avsnitten "Vad som inte stämmer i dag" och "Så går den till" nedan beskriver läget före grenen (testprogrammet ochmain).
PLC-grenen: varv, homing och parametrar (2026-09-30)¶
Källa: Flip-PLC include/stepper_control.h, src/stepper_control.cpp,
src/persist.cpp och README 2026-09-30. Ej verifierat på hårdvaran.
- Position i varv på ventilaxeln från homingläget, öppet = positivt (0 = stängt/homingläge). 200 000 kommandosteg = 80 000 encoderpulser = 1 varv.
- Efter PLC-omstart är bromsen EJ HOMAD och vägrar positionskommandon tills
cmd/homekörts. Homingen startar aldrig av sig själv. Nollan sätts bara av homingen;cmd/zeroochcmd/position_stepsär borttagna. - Gräns:
position_turnsklipps till 0 …max_turns(default 5 varv). - Kommandon:
flipbench/plc/brake/cmd/home,cmd/stop,cmd/position_turns,cmd/reset_alarm,max_turns/set,homing/<namn>/set. - Status:
status/position_turns(bara när homad),status/homing_state(NOT_HOMED/HOMING/HOMED/FAILED),status/direction(OPENING/CLOSING/STOPPED),status/overload,comm,moving,alarm_code,torque_percent; retained ekomax_turnsochhoming/<namn>. - Rörelsespärr: nya mål vägras om senast uppmätta kraft under rörelse ≥ 100 %.
Nollställs av lyckad/avbruten homing och av
cmd/reset_alarm.
Homing-parametrar över MQTT¶
Alla 15 parametrar läses från retained eko flipbench/plc/brake/homing/<namn>
och ändras med …/<namn>/set (inte retained). Ogiltigt avvisas och gällande
värde ekas; utanför min/max klipps. Homingen arbetar mot en ögonblicksbild tagen
vid cmd/home. Defaultvärdena är identiska med de tidigare fasta värdena.
<namn> |
Default | Min – max | Betydelse |
|---|---|---|---|
direction |
1 | −1 eller 1 | +1 = sök mot stängt |
seek_rpm |
20 | 1 – 100 | motor-rpm |
backoff_rpm |
100 | 1 – 300 | motor-rpm vid backning |
acc_ms |
300 | 10 – 3000 | ms per 1000 rpm |
load_threshold_percent |
60,0 | 5 – 100 | % load för anslag |
hits |
2 | 1 – 20 | mätningar i rad |
blank_ms |
600 | 0 – 10 000 | ignorera efter sökstart |
backoff_steps |
10 000 | 100 – 200 000 | kommandosteg |
travel_steps |
2 000 000 | 20 000 – 4 000 000 | kommandosteg (10 varv) |
sample_interval_ms |
100 | 50 – 1000 | tid mellan prov |
seek_timeout_ms |
900 000 | 10 000 – 1 800 000 | max söktid |
settle_stop_ms |
200 | 0 – 5000 | efter anslag, före backning |
settle_timeout_ms |
3000 | 500 – 30 000 | backa senast efter |
backoff_settle_ms |
300 | 0 – 5000 | efter backning, före "klar" |
backoff_timeout_ms |
30 000 | 1000 – 120 000 | backningen klar inom |
Min/max är rimlighetsspärrar valda i koden, inte uppmätta gränser för drivare eller ventil.
Beständig lagring (flash)¶
Modul persist.h/.cpp (mbed KVStore). Sparas vid ändring och läses in vid
uppstart: de 15 homing-parametrarna, max_turns samt tankarnas börvärde och
hysteres. heater_enabled sparas medvetet inte — elpatronerna startar
alltid AV efter omstart. Skrivning fördröjd 3 s och sammanslagen, högst en per
loop-varv, ny försök efter 30 s; lagringen är aldrig kritisk (default vid fel).
Persist::begin() körs före watchdogen eftersom första start formaterar flash.
Kontrollpunkter vid första start finns i Flip-PLC README 2026-09-30.
Antaganden att verifiera: sketchen under 768 kB, KVStore-ytan oanvänd av annat,
och att en flash-radering inte överskrider watchdogens 4 s.
Komponenter¶
| Beteckning | Del | Typ | Data |
|---|---|---|---|
| -TB1 | Drivare | StepperOnline CL57RS | 48 VDC, Modbus RTU slav 2, 9600 8E1 |
| -MA1 | Motor | StepperOnline 17E1K-07 | NEMA 17 closed loop, 1,8° = 200 helsteg/varv, 72 Ncm, 2,0 A |
| -MA1 | Encoder | inbyggd i motorn | Optisk inkrementell, differentiell, 2 kanaler, 5 V, 1000 PPR = 4000 CPR |
| -MA1 | Växel | StepperOnline RYG17-G20 | Vinkelväxel 20:1, glapp 20 bågminuter |
Motorns fasanslutning: stift 1 A+, 2 A−, 3 B+, 4 B−. Motor och encoder ansluts till -TB1 med kabel -WD20.
Upplösning, enheter och riktning (verifierat 2026-09-29)¶
Uppmätt på bänken 2026-09-29 med testprogrammet stepper-homing-test
(CL57RS ensam på bussen, styrt från seriella monitorn).
Drivarens upplösning¶
| Parameter | Register | Värde | Källa |
|---|---|---|---|
| Pulser per motorvarv | Pr0.00, Modbus 0x0001 | 10 000 P/R (fabriksvärde, intervall 200–51 200) | CLRS-manualen + mätning nedan |
| Mikrosteg | – | 50 per helsteg (10 000 / 200) | Beräknat |
Mikrostegningen sätts inte med DIP — CL57RS:s SW1–SW8 används för adress, baud och terminering. Den ändras bara via Pr0.00 (Modbus eller tuningprogrammet). Ändras Pr0.00 ändras alla omräkningar nedan.
Två olika enheter — blanda dem inte¶
| Vad | Enhet | Per motorvarv | Per ventilvarv (20:1) |
|---|---|---|---|
Kommandosteg — PR0-mål, jog, cmd/position_steps |
Pr0.00-pulser | 10 000 | 200 000 |
Återläsning 0x1014/0x1015 (feedback position) |
Encoderpulser (CPR) | 4 000 | 80 000 |
Kvot: kommandosteg = 2,5 × encoderpulser, alltså pos = 2,5 × rått
och rått = pos / 2,5.
Verifierat på två sätt:
* jog -1000 (relativ PR0-rörelse) ändrade återläsningen med −400.
* jog -200000 vred ventilaxeln exakt ett varv, mot öppet.
4 000 helsteg per ventilvarv i avsnittet ovan är fortfarande rätt —
det är helsteg före mikrostegning. I kommandosteg är samma varv 200 000.
Absoluta PR-mål och återläsningen delar inte nollpunkt¶
Drivarens absoluta PR0-mål (Pr9.00 = 0x0001) och återläsningen 0x1014 har varken samma enhet eller samma nollpunkt. Ett absolut mål som räknats fram ur återläsningen ("kör till där axeln står", "backa N från här") hamnar därför fel — i fält både för kort och åt fel håll, med en brytpunkt som ändrade sig mellan körningar.
Det som fungerar är relativa rörelser: Pr9.00 = 0x0041 (TYPE=1 positionering + bit6=1 relativ). Provat i fält 2026-09-29 för sökning, backning och jog. Det som ska visas räknas om från återläsningen med kvoten 2,5 och en egen nollpunkt.
Riktning¶
- Positiva steg stänger, negativa öppnar. Bekräftat i fält; stämmer
med
Flip-PLC(stepper_control.cpp) ochkBrakeClosingIsPositive = trueiFlip-HMI(seclaude/hmi-broms-riktning-overlast.md, där konventionen tidigare stod som antagande). - Homing görs mot stängd ventil (+). Lägen för öppen broms blir därmed negativa räknat från homingnollan.
Vad som inte stämmer i dag (Flip-PLC main, före grenen)¶
Flip-PLCmain skickar HMI:ts steg rakt till PR0 (kommandosteg) men publicerar återläsningen 0x1014 oskalad (encoderpulser). HMI:t visar därför 0,4 × det beordrade läget. Nollpunktens_zeroOffsetStepsär ett encodervärde som läggs direkt på ett absolut PR0-mål — samma blandning som ovan, och troligen en del av förklaringen till att nollningen verkade "glömmas". Inte åtgärdat.kBrakeStepsMin/Max= ±50 000 iFlip-HMI/include/net_config.här i kommandosteg bara ¼ varv på ventilaxeln. Gränsen behöver sättas efter ventilens verkliga slag (antal varv stängt → öppet, inte uppmätt ännu).
Homing mot stängt — sensorlöst (testprogram 2026-09-29)¶
CL57RS har ingen inbyggd sensorlös homing. Pr8.10 (0x600A) erbjuder bara gränslägesbrytare, nollägesbrytare och Z-signal. Homingen görs därför i programmet, mot stängd ventil, genom att känna när motorn tar i.
Så går den till¶
- Sök — relativ PR0-rörelse (Pr9.00 = 0x0041) i +-riktning (mot
stängt), längst
travelkommandosteg, medseekrpm. - Känn anslaget — följefelet 0x1010/0x1011 läses ungefär var 100 ms
och räknas till load-% =
|följefel| / Pr0.05(samma mått som HMI:ts Load). De förstablankms ignoreras, eftersom accelerationen också ger utslag. - Stopp — när load ≥
thrihitsmätningar i rad: snabbstopp (Pr8.02 = 0x0040). - Backa — relativ rörelse
backoffkommandosteg mot öppet (−), medmoverpm. Det släpper uppspänningen i växel och ventil efter anslaget. - Nolla — där axeln står efter backningen blir pos 0. Nollpunkten hålls i programmet som ett sparat råvärde från 0x1014, inte med drivarens eget 0x0021 (som inte nollställer pålitligt).
Därefter är alla lägen negativa mot öppet och positiva mot stängt,
räknat i kommandosteg (pos = 2,5 × (rått − nollpunkt)).
Värden i bruk (Daniel, 2026-09-29)¶
| Inställning | Värde | Betyder |
|---|---|---|
dir |
+ | Sök mot stängt |
seekrpm |
20 | 20 motorvarv/min = 1 varv/min på ventilaxeln |
moverpm |
100 | Fart vid backning (och jog/go) |
acc |
300 | ms per 1000 rpm, acc och dec |
thr |
60 % | Load-tröskel för anslag |
hits |
2 | Mätningar i rad över tröskeln |
blank |
600 ms | Ingen detektering direkt efter start |
backoff |
10 000 | Kommandosteg = 1 motorvarv = 1/20 ventilvarv (18°) |
travel |
2 000 000 | Kommandosteg = 10 ventilvarv, längsta sökväg |
| Pr0.05 | 4000 | Läst ur drivaren, nämnare i load-% |
Erfarenheter från fält¶
- Load stiger gradvis medan axeln går i full fart — sätet tar emot mer och mer. Det blir ingen tvärstopp, så tröskeln avgör hur hårt ventilen dras mot sätet innan stopp. Tidigare prov med 70 % fungerade också.
- Kort backning (några hundra steg) lämnar kvar last i vila — växel och ventil är fortfarande uppspända.
- Följefelet står på ett fast värde även i vila (t.ex. −52 428 ≈ 13 % load, oförändrat före och efter en jog). Jämför load mot vilovärdet, inte mot noll.
- Absoluta PR0-mål får inte räknas fram ur återläsningen — se avsnittet om enheter. Tidiga versioner gjorde det och backade då åt fel håll vid kort backoff.
Testprogrammet (stepper-homing-test) är ett fristående PlatformIO-projekt
för Opta och ligger inte i något repo. Homingen finns i Flip-PLC bara på
grenen claude/nonblocking-modbus-homing och claude/homing-params-persist
(se PLC-grenen ovan), inte på main. Värdena i tabellen ovan är där
defaultvärden för parametrarna.
Larmåterställning¶
Larmkoden som synts orsakades av mekanisk överlast; drivaren fastnar i felläge
tills larmet återställs. Flip-PLC skriver 0x1111 på cmd/reset_alarm till
Pr8.02 (0x6002), overifierat. CLRS-manualen anger i stället kontrollordet
0x1801; testprogrammet har båda (reset = 0x1801, reset2 = 0x6002). Den
som faktiskt tar bort larmet avgör.