- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: CAN-Bus

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9

    CAN-Bus

    Anzeige

    Praxistest und DIY Projekte
    Hallo Forum,

    ich möchte euch mal das zeigen woran ich im Moment und in naher Zukunft noch arbeiten möchte.
    Und zwar handelt es sich um einen CAN-Bus mit einem Mega32, einem MCP2515 CAN-Controller und einem MCP2551 CAN Transreciever.
    Das Internet gab leider nicht all zu viele Informationen her und dementsprechend ist sehr viel davon selbst erarbeitet (nochmals danke an den Verfasser dieses C-Tutorials http://www.kreatives-chaos.com/artik...cp2515#receive).
    Die erste Idee zu dem Projekt kam mir beim lesen eines Buchs über den CAN-Bus vom Elektorverlag.
    Da ich mich etwas mit dem Bus beschäftigen wollte, habe ich dazu eine kleine Platine entworfen.
    Leider hat die Version 0 meiner Platine zwei kleine Fehler (Testpin des FT232 ist nicht mit GND verbunden und deswegen ist es Glück ob der funktioniert. Aber das Problem lässt sich mit einer kleinen Lötbrücke lösen und die Rx und Tx LEDs sind falsch angeschlossen.
    Den Schaltplan des CAN-Knotens habe ich mal als Anhang angehängt.
    Der Bus sieht im Moment so aus, dass ich einen fertig bestückten CAN-Knoten habe und ein RN-Control + Steckbrettaufbau.
    RN-Control + MCP2515 und MCP2551:
    Bild hier  

    CAN-Knoten (selbst entworfen und bestückt):
    Bild hier  

    Das RN-Control sendet im Sekundentakt eine sich ständig erhöhende Zahl und der CAN-Knoten empfängt diese und gibt die auf einem PC Terminal aus:
    Sender:
    Bild hier  

    Empfänger:
    Bild hier  

    Das ganze läuft komplett Interruptgesteuert ab. Somit wird der Controller nicht zu stark ausgelastet. Als Spannungsversorgung für die CAN-Knoten habe ich solch ein Kabel:
    Bild hier  

    Dabei handelt es sich um ein Netzteil, welches ich bei mir aus der Firma bekommen habe, weil es sonst im Müll landet würde
    Und um die Knoten miteinander zu verbinden, habe ich mir dieses Kabel hier gebaut:
    Bild hier  

    Bild hier  

    Über das Kabel wird die 12V Spannungsversorgung der einzelnen Knoten gewährleistet und es wird das CANH und CANL Signal übertragen.
    Durch die 12V Spannungsversorgung ist es möglich, dass nur ein Knoten am Stromnetz hängt und die anderen Knoten werden dann über die CAN-Kabel versorgt. Auf den Platinen befindet sich ein 7805 kompatibler Schaltregler, der bis zu 1,5A Strom bereitstellen kann.

    Die nächsten Schritte werden dann sein, dass ich eine PC-Software dafür schreiben wollte (mit Visual Basic oder so) womit die Knoten ausgelesen werden können (z.B. Sensorwerte anderer Knoten).
    Außerdem wollte ich gucken ob ich die Anbindung eines MCP2515 an mein Raspberry Pi hin bekomme. Dann würde das Pi den Job des "CAN Master" übernehmen. An die Knoten selber wollte ich verschiedene Sensoren anschließen und damit was aufbauen.
    Zwei Sensoren habe ich hier schon rumliegen (einmal Luftdruck und Temperatur und einmal Feuchtigkeit). Den Feuchtigkeitssensor kann ich aber nicht ohne weiteres nehmen, da dieser eine von der Feuchtigkeit abhängige Frequenz angibt und ich bei meinem CAN-Knoten keine Interrupts rausgeführt habe.....
    Mal schauen wie sich das Problem lösen lässt. Vielleicht steige ich auch auf eine I²C Variante um.
    Vielleicht wandel ich die Frequenz auch in eine analoge Spannung um und messe diese einfach.
    Wie dem auch sei. Ich werde schauen, dass ich diesen Thread hier nach und nach aktualisiere sobald es was neues gibt. Dies soll für die Leute sein, die selber mal mit dem Controller rumspielen möchten. Bei meiner Recherche habe ich gemerkt, dass es nicht all zu viel über CAN und Bascom im Internet gibt. Deswegen möchte ich hier gerne etwas für die Leute schaffen womit ihnen der Einstieg erleichtert wird.
    Ich stehe auch gerne jedem zur Seite, der sich selber mit dem Controller beschäftigt und dabei Hilfe braucht

    Für weitere Infos usw. könnt ihr auch auf meine Page schauen:

    http://kampis-elektroecke.de/?page_id=453
    Angehängte Dateien Angehängte Dateien
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    So ein kleines Update.
    Nachdem meine ersten Gehversuche am Wochenende erfolgreich waren und ich händlich den Rx-Buffer auslesen könnte, arbeite ich nun an dem Code um die komplette CAN-Nachricht zu empfangen und auszuwerten.
    Sobald dies klappt werde ich es hier posten
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    32
    Beiträge
    802
    Mit welchem CAN-Protokoll arbeitest du denn?
    Kultuverein Metal Resurrection, für mehr Bands und Konzerte in Österreich (:

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Was meinst du mit Protokoll ?
    Soweit ich weiß ist der Aufbau einer CAN-Nachricht festgelegt. Ich mache es erstmal recht einfach, indem ich einen 11Bit Identifier habe +1Byte als Datenpaket.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    32
    Beiträge
    802
    Nein, CAN als sich selbst definiert nur die Topologie und die den Aufbau der Messages. Das wären Layer 1 und 2 im OSI/ISO-Model. CAN-Geräte verwenden dann ein höheres Protokoll zur Kommunikation, z.B. CANopen oder DeviceNet
    Kultuverein Metal Resurrection, für mehr Bands und Konzerte in Österreich (:

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ahh ok.
    Naja so weit bin ich noch nicht
    Ich will erstmal eine vernünftige Kommunikation mit dem MCP2515 hinbekommen, sprich Nachricht + festgelegten Identifier versenden und richtig empfangen. Dabei Identifier berücksichtigen und dann die Daten richtig zusammensetzen.
    Wenn das alles klappt wie ich es mir wünsche kommt ein Protokoll da rein
    Ich stehe ja gerade noch am Anfang von dem ganzen und muss mich da erstmal vernünftig reindenken
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    So wiedermal ein Update vom Bus:

    Empfangsroutine ist nun auch fertig. Das Programm ließt die Daten einzelnt ein und setzt die ID zusammen (im moment nur Standard ID aber es ist auch geplant das die Extended ID verwendet werden kann). Anschließend ließt das Programm die Länge aus und ließt dann dementsprechend die Datenbytes.
    In dem Sendeprogramm hat man eine Sendefunktion um eine ID vorzugeben und man kann entscheiden ob Extended oder Normal (wobei erst Normal implemetiert ist ). Anschließend wird die ID zerlegt und passend verteilt. Die Daten werden in die richtigen Register geschrieben und der ganze Rummel wird abgesendet.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ein neues Update zum Bus:

    Das Wochenende habe ich mal damit verbracht um schonmal ein wenig an der PC Software zu arbeiten.
    Der erste Entwurf sieht so aus:

    Bild hier  

    Im Grunde erstmal nur ein "Terminal" aber die eigentlichen Funktionen werden noch dazukommen
    Gedacht ist, dass es ein Feld für den Identifier gibt, ein Feld für 1-8 Datenbytes und das die Filter noch über die Software eingestellt werden können.
    Zudem dachte ich, dass vielleicht auch eine Möglichkeit kommt angeschlossene I²C Devices auszulesen.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Heyho,

    ich wollte den Thread mal ein wenig Updaten.....die letzten freien Tage habe ich mal wieder dazu genutzt um an dem Bus weiter zu arbeiten (wird auch demnächst auf meiner Homepage aktualisiert usw.).
    Herausgekommen ist, dass ich das Programm etwas umdesignt habe. Außerdem habe ich noch ein kleines Userinterface für eine einfache Konsole entwickelt (der UART soll später über Interrupts arbeiten.....nicht wie in der aktuellen Version über "Input". Damit wird das ganze Programm Interruptgesteuert und ich habe die Mainloop frei):

    Bild hier  


    Die Befehle die das Interface verwendet, wollte ich dann (irgendwann) auch für eine PC-Software verwenden.
    Im Gegensatz zu meinem ersten Programmentwurf ist dieses Programm etwas variabler, sprich durch den Aufruf der "Data" Funktion werden nicht wie beim ersten Entwurf permanent 8 Byte gesendet sondern dies ist unterschiedlich (je nachdem wie viel gesendet werden soll).
    Ein Wechsel des Controllers in den "Loopback" Modus + Senden und Empfangen von Daten sieht dann z.B. so aus:

    Bild hier  


    Der Befehl "Data,7,8,15,7,12,78,16,1,144,179" ist dabei wie folgt aufgebaut:
    1. Data -> Wählt die Funktion zum Senden von Daten aus
    2. 7 -> der Identifier (0-2047)
    3. 8 -> Anzahl der zu übertragenden Bytes
    4. Die 8 Werte die übertragen werden soll.

    Eine ähnliche Funktion gibt es für den Remoteframe. Hier jetzt im Nomalmode und als Antwort kommen 8 Bytes von einem zweiten Knoten zurück wo ein LM75 angeschlossen ist, der die Temperatur meines Wohnzimmers ausgibt (der Knoten hat noch die aller erste Softwareversion drauf, deswegen 8 Bytes die gesendet werden obwohl er nur ein Wert ermittelt ):

    Bild hier  


    An der Funktion zum einstellen der Filter arbeite ich noch....irgendwie verwirft der Controller die Einstellungen beim verlassen des Unterprogramms.....
    Ebenso Suche ich noch einen Weg einen Mega32 als I²C Slave zu betreiben.....ich habe gesehen, dass es da sogar eine Bascomfunktion für gibt aber die ist bei mir wohl irgendwie nicht drin, sprich ich muss es händisch machen.
    Im Anhang ist mal der (aktuelle) Quellcode. Falls irgendjemand was dazu sagen möchte....nur zu
    Posten tue ich den mal nicht, weil das über 1000 Zeilen sind und das ist glaube ich zuviel für einen Beitrag.
    Angehängte Dateien Angehängte Dateien
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus