Hallo Zusammen!
Zunächst mal hoffe ich, das richtige Forum für meine Frage erwischt zu
haben.
Ich bin zur Zeit noch Student der Elektrotechnik und befinde mich
mittlerweile in den Schwerpunkt-Semestern. Für ein Projekt im Modul
"Digitaltechnik Praktikum" wurde uns die Aufgabe übertragen eine
Möglichkeit zu entwickeln ein CAN-Bus Signal kabellos zu übertragen. Wie
wir dieses Projekt umsetzen wurde allein uns überlassen.
Nach einigen Recherchen und aufgrund bisheriger gesammelter Erfahrung im
Bereich Arduino und Bluetooth, haben wir uns entschlossen die Umsetzung
des Projektes mittels folgender Bauteile zu versuchen:
2x Arduino Nano 328P, 2x HC-05, 2x MCP2515_CAN Board
Bilder der verwendeten HC-05 Module und der MCP2515_CAN Boards findet
ihr im Anhang.
Außerdem habe ich einen Prinzipschaltplan für das MCP2515 Board
angehängt.
Rx und Tx des HC-05 Moduls wurden über SoftwareSerial auf die Pins 4+5
gelegt.
Um das CAN Board anzusprechen und auszulesen haben wir folgende Git
Bibliothek verwendet:
https://github.com/coryjfowler/MCP_CAN_lib
Auf beiden Arduinos läuft folgender Code:
1
#include <SoftwareSerial.h>
2
#include <mcp_can.h>
3
#include <SPI.h>
4
5
SoftwareSerial BTSerial(4,5);
6
7
long unsigned int rxIdCAN;
8
long unsigned int rxIdBT;
9
unsigned char lenCAN = 0;
10
unsigned char lenBT = 0;
11
unsigned char rxBuf[8];
12
char msgString[128]; // Array to store serial string
13
byte data[8];
14
int counter;
15
16
#define CAN0_INT 2 // Set INT to pin 2
17
MCP_CAN CAN0(10); // Set CS to pin 10
18
19
20
void setup()
21
{
22
Serial.begin(9600);
23
BTSerial.begin(38400);
24
25
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
Wir haben nun von unserem Betreuer 2 Geräte Namens TinyCAN bekommen, die
wir über USB an 2 PC´s anschließen und mittels der mitgelieferten
Software ein CAN Signal ausgeben und empfangen können.
CAN High+Low werden jeweils mit dem MCP2515 verbunden.
Die beiden HC-05 sind bereits miteinander verbunden.
Senden wir nun von der einen Seite eine Nachricht, wird sie auf der
anderen Seite von der Software empfangen, alles scheint zu
funktionieren. Im nächsten Schritt wollte unser Betreuer, dass wir im
10ms Intervall Nachrichten übertragen. Auch dies funktioniert. Wenn wir
aber beginnen von beiden Seiten aus im 10ms Intervall Nachrichten zu
verschicken, entstehen irgendwann Fehler. Außerdem melden die
TinyCAN-Geräte eine Störung.
Mir ist bewusst, dass der Code für das empfangen der Nachricht via BT
nicht besonders schlau gelöst ist und die gesamte Nachricht als ein
Paket übertragen werden sollte, jedoch hatten wir hierzu bisher keine
Idee. Weder wie die Nachricht auf der Sender-Seite verschickt werden
sollte, noch wie wir sie auf der Empfängerseite wieder auseinander
nehmen können.
Wir sind mit der gesamten Thematik zur Zeit etwas überfragt.
Hilfestellung von unserem Betreuer bekommen wir wenig bis gar nicht. Wir
sind also über alle Ideen und Anregungen dankbar.
Viele Grüße
Julian
Klingt für mich nach Pufferüberlauf, aufgrund zu geringer
Übertragungsrate auf der Bluetooth Strecke (bzw. zu hoher Latenzen).
Bedenke auch, dass die SoftwareSerial viel CPU Zeit in Anspruch nimmt
und nicht gerne unterbrochen werden möchte. 38400 Baud ist damit nur
sehr bedingt machbar.
Also bei dem Stichworten Wireless und CAN wäre ich eher auf einen ESP32
gekommen, der kann vorgeblich beides, wenn auch CAN nicht so richtig
offiziell.
Hallo Rudolph,
Der ESP32 war auch meine erste Idee, jedoch hat ein anders Team selbiges
Projekt und verwenden bereits den ESP32 weshalb wir uns etwas anderes
überlegen mussten. Sollten wir die Baudrate der Softwareserial besser
auf 9600 setzen?
Julian H. schrieb:> Sollten wir die Baudrate der Softwareserial besser> auf 9600 setzen?Stefanus F. schrieb:> Ja mach das
Das ist doch murks für die angepeilte Lösung.. Da muss ein ganz anderer
Ansatz her.
Julian H. schrieb:> Ich bin zur Zeit noch Student der Elektrotechnik und befinde mich> mittlerweile in den Schwerpunkt-Semestern. Für ein Projekt im Modul> "Digitaltechnik Praktikum" wurde uns die Aufgabe übertragen eine> Möglichkeit zu entwickeln ein CAN-Bus Signal kabellos zu übertragen. Wie> wir dieses Projekt umsetzen wurde allein uns überlassen.
Gerade in den Schwerpunkt Semestern solltest Du Dich erstmal mit der
Aufgabe befassen und diese in einzelne Teile aufteilen. Es fängt
schonmal damit an, was CAN Wireless bedeutet, sollen da alle Aspekte
einer CAN Kommunikation implementiert werden, oder einfach nur die CAN
Messages hin und her gefunkt werden? Wie hoch soll die min. und die max.
CAn baudrate sein? Welche CAN Spezifikation, wie soll die
Fehlerbehandlung sein etc...
Was sind die max versträglichen Latenzzeiten der Funkübertragunen??
Das ist nur ein Bruchteil der Fragen die Du Dir selbst stellen solltest
bevor Du an irgendwelche Auswahl an Hardware machst.
Wenn Du jetzt hier auf vorgekaute Sachen ala Arduino etc zurückgreifst
wirst Du auch nie den Anspruch haben, tief in die Materia zu gehen. Das
ist aber etwas was man m.E. in einem Elektrotechnik Studium unbedingt
machen sollte.
Was die hardware angeht...denk da mal auch über einen STM32F04 und einem
NRF24 nach. Die Latzenzeiten beim NRF24 sind wirklich sehr sehr kurz und
optimaler als Bluetooth.
Hallo Bülent,
zunächst einmal Danke für deine Antwort.
Zum Thema Funktionalität:
Uns wurde von unserem Betreuer nichts weiter gesagt, als das CAN
Messages übertragen werden sollen. Während des Projektes, dann nur die
Erweiterung, dass es möglich sein muss in beide Richtungen fehlerfrei
alle 10ms eine Nachricht zu übertragen. Weitere Infos haben wir leider
rein garnicht bekommen.
Dein Rat, dass man in den Schwerpunktsemestern tiefer in die Materie
einsteigen sollte ist natürlich absolut korrekt. Man sollte jedoch den
zeitlichen Aspekt nicht vergessen. Sich so tief in all das einzuarbeiten
benötigt den Zeitanspruch eines ganzes Semesters für sich. Wir haben
allerdings noch weitere Praktika allein im selben Schwerpunkt, sowie
einen weiteren Schwerpunkt mit Vorlesungen und Praktika. Gerne würden
wir noch viel mehr Zeit in unser Digitaltechnik Projekt investieren, da
wir dieses mit Abstand am interessantesten finden. Doch dann bräuchte
unser Tag wohl eher 48 Stunden statt 24.
Hinzu kommt, dass für dieses Projekt nur wenige Wochen zur Verfügung
stehen und jetzt nochmal auf eine andere Hardware umzuschwenken wäre
schlicht nicht möglich.
Danke trotzdem für deine Antwort.
Dann plane schonmal Zeit ein, zu erklären, warum das Ziel nur
eingeschränkt erreicht wurde und was du zur Verbesserung anders machen
würdest. Ich vermute, dass solche Analysen auch zur Aufgabe gehören.
Es ist immer wieder schön zu sehen, wie einem in Foren weitergeholfen
wird. Auch die Tatsache, dass niemand Moralapostel spielen will finde
ich immer wieder befriedigend...
Mensch, man traut sich ja kaum noch etwas zu fragen.
Überlege mal, wie du (in der Rolle des Helfers) so eine Antwort
aufnehmen würdest. Wie würdest du das finden? Würdest du ihm
bereitwillig nochmal helfen?
Mein Hinweis war durchaus ernst gemeint. Du hast nicht mehr genug Zeit,
dein Problem vollständig zu beheben. Das ist meine Einschätzung, daher
der obige Ratschlag.
Alternativ kannst du gerne deine Zeit bis zur letzten Minute damit
vergeuden, das Unmögliche möglich zu machen. Dann läufst du allerdings
Gefahr, weder ein funktionierendes Gerät noch eine ordentliche Doku
abzugeben.
Nutze die Zeit lieber, wenigstens die Doku abzurunden.