Dann warten wir mal, welche Vorschläge
@nikolauzi hat.
Ja, Wink mit dem Zaunpfahl verstanden
Also mal eine kurze Zusammenfassung, was ich bei mir wie umgesetzt habe, als
Diskussionsgrundlage:
1. wichtigster Punkt ist der Bus, da habe ich mich des Physical Layers vom RS422/485 bedient.
Gründe: Mit dem MAX487 gibt es einen günstigen, störunanfälligen und sparsamen (120µA) Treiber. Hatte mir eine Stange für ein paar Euro bestellt. CAN braucht 10-50 mal mehr Strom, fällt also flach.
2. Protokoll: Das RS422/485 Protokoll habe ich nicht übernommen, wollte was praktisches und einfaches, ergo vier Byte:
0x80 (Sync), Service, Option, Checksum (=Service+Option+0xea)
0x80 (LSB first) ergibt mit dem Startbit 8 Bits, die mißt ein Timer, teilt das durch 8 und gibt das als Timebase an die UART für die folgenden 3 Byte -> Autosync
3. Controller: ist ziemlich egal, Hauptsache Timer und UART, ich habe einen STM8S103 genommen, gab da mal 10 Platinen für 9€ bei Ebay, Atmel tut's da aber auch locker.
4. Bus Struktur:
Theoretisch Multi Master/Multi Slave machbar, Single Master/Multi Slave ist bei mir aktuell umgesetzt, paßt ganz gut soweit.
5. Services
Service/Bezeichnung/Option (mein Vorschlag):
08 Brake 0x0f
10 Horn 0x0f
18 Blinker lf,lmid,lr,laux, rf,rmid,rr,raux (als Option, falls man später z.B, mal die Blinker rund um VM laufen lassen will, praktischerweise ist der Standart 0xf0, 0x0f oder 0xff (Warnblinker)
20 Light tfl_l,tfl_r,abl,fl,back,back_l,back_r (d.h. z.B. daß beim Blinker RR (rear right) auch das Rücklicht RR ausgehen könnte, das zentrale Rücklicht aber an bleiben würde)
30 light position (servo), 8bit (Leuchtweiteneinstellung/Fernlicht)
Dx 0xXX (aux functions, Steuersignale z.B. für Unterbodenbeleuchtung, Musik, Scheibenwischer & Co)
Diagnose (0xEX ist eine Diagnosenachricht an einen Knoten, d.h. der Rest hält den Mund, 0xFX ist die Antwort des Knotens auf die Diagnosenachricht, z.B. zur zyklischen Abfrage, ob alle Knoten im Bus aktiv sind, ob es draußen dunkel ist, oder vorne die Luft nahe 0°. Anmerkung: das ist nicht schön gelöst, es müßte noch ein Service Kommando rein für solche Infos geben, à là: Weiß jemand, ob es dunkel ist? Ob es kalt ist? Etc.)
E0/F0 Req/Diag steer
E1/F1 Req/Diag back
E2/F2 Req/Diag front
E3/F3 Req/Diag center
E8/F8 Req/Diag aux1 Unterboden Beleuchtung
..
EF/FF Req/Diag Node 15
Aktuell wäre also 16 Knoten möglich.
6. Service Handling:
Die Services werden in einem festen Zeitraster vom Master gesendet, jeder Knoten hält den Service nur so lange aktiv, bis eine gegenteilige Serviceanfrage kommt, oder das Zeitraster um 50% überschritten wird. Dadurch geht z.B. der Blinker im Zweifelsfall automatisch aus. Fehlt die Knotendiagnose (0xdx) für 500ms, geht der Knoten in den Limp Home Modus, d.h. als Fail Safe wird z.B. das Rücklicht eingeschaltet, wenn der Knoten vom Netz getrennt wird.
Bekommt der Knoten am Tiller von einem Knoten keine Antwort auf eine Knotendiagnose, geht dort die MIL Lampe an als Warnung für den Fahrer, daß ein Knoten fehlt.
7. Baudrate: habe da mal einfach 32kbaud genommen, d.h. eine Nachricht (4 Byte) dauert etwa 1.2ms, was soweit ganz ok scheint. Ist aber eh wurscht, das System adaptiert sich ja eh, d.h. man könnte für z.B. Crash Sensor einfach temporär auf bis zu 250kBaud springen.
Soviel mal als grober Überblick, ich guck mal, was mir noch so einfällt oder was ich vergessen habe
