Forum: Mikrocontroller und Digitale Elektronik Bau eines einfachen Laborbussystem


von Repo (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
um in einem Labor Temperatur, Luftfeuchte etc. an verschiedenen Stellen 
zu messen, sowie zeitunkritsche Sachen wie Venile zu schalten, habe ich 
mir vorgenommen einen Laborbus zu bauen.
Geplant ist eine RS485 Kommunikation über die auch die Versorgung läuft.
Die maximale Kabellänge liegt so um die 30m.

Der Basis-Slave, so wie ich mir den immoment vorstelle, habe ich mal 
angehängt.
Da ich recht neu bin in der Elektronik würde ich mich über konstruktive 
Kritik über den Schaltplan/Layout freuen.

Mfg Repo

von B. S. (bestucki)


Lesenswert?

Habs nur flüchtig angeschaut:
- Der Reset-Eingang benötigt einen Pull-Up.
- Pull-Downs an den Eingängen PC0 bis PC3 fehlen.
- Löcher für Befestigungsschrauben vergessen (falls nötig).
- Abblockkondensatoren könnten besser geroutet sein (beim LT1785 fehlt 
er?).
- Masseführung, vor allem beim Quarz, könnte besser sein.

http://www.lothar-miller.de/s9y/categories/14-Entkopplung
http://www.lothar-miller.de/s9y/categories/33-Quarz

von Konrad S. (maybee)


Lesenswert?

be stucki schrieb:
> - Pull-Downs an den Eingängen PC0 bis PC3 fehlen.

Oder billiger: Schalter gegen GND und interne Pull-Ups verwenden.

Ist das Absicht, dass X3 kein GND bekommt?

AREF mit AVCC zu verbinden macht keinen Sinn. Dann lieber einen 
Kondensator von AREF nach GND.

von Max D. (max_d)


Lesenswert?

Ich hätte an deiner stelle noch ein paar pins zusätzlich auf den db-9 
stecker gerouted, für einen interrupt-channel oder plug-in detection 
(man könnte auch über den stecker teile der adresse vergeben, dann kann 
man die module in ihrer position im labor bestimmen (ausgehend von der 
idee einer festen verkabelung)....

von Purzel H. (hacky)


Lesenswert?

Was soll das sparen an der Cpu. Die kleinste... nimm was groesseres. N' 
mega16 oder so.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Wenn das was universellen werden sollte, das alles mögliche kann, dann 
empfehle ich gleich einen STM32 zu nehmen.
Der hat alle möglichen Schnittstellen, AD und DA Wandler schon drin. 
Auch genügend RAM um mal was aufzeichnen zu können.

Als Bus-System empfehle ich CAN zu nehmen.

Lese mal hier im Artikel: STM32

von Repo (Gast)


Angehängte Dateien:

Lesenswert?

be stucki schrieb:
> - Der Reset-Eingang benötigt einen Pull-Up.
> - Pull-Downs an den Eingängen PC0 bis PC3 fehlen.
> - Löcher für Befestigungsschrauben vergessen (falls nötig).
> - Abblockkondensatoren könnten besser geroutet sein (beim LT1785 fehlt
> er?).
> - Masseführung, vor allem beim Quarz, könnte besser sein.

Habs versucht zu verbessern, danke.

Konrad S. schrieb:
> Oder billiger: Schalter gegen GND und interne Pull-Ups verwenden.
>
> Ist das Absicht, dass X3 kein GND bekommt?
>
> AREF mit AVCC zu verbinden macht keinen Sinn. Dann lieber einen
> Kondensator von AREF nach GND.

Ah, so spart es noch ein wenig Platz :)

Max D. schrieb:
> Ich hätte an deiner stelle noch ein paar pins zusätzlich auf den db-9
> stecker gerouted,

Gute Idee.

Siebzehn oder Fuenfzehn schrieb:
> Was soll das sparen an der Cpu. Die kleinste... nimm was groesseres. N'
> mega16 oder so.

Mh, dachte schon eher dass ein Tiny reicht. Hauptsächlich soll diese 
Schaltung dazu dienen einen Sensor über IC2, ISP auszulesen oder einfach
mit I/O Signale langsame Sachen zu Steuern. Dazu kommt halt noch das 
RS485 Protokoll welches sicher sehr einfach ausfallen wird. Also mehr 
Pins bräuchte ich nicht. Meinst du das die 8K Flash bei den Dingen 
schnell weg sind wenn man mit C programiert. (asm wollte ich mir jetzt 
nicht antun)

von Repo (Gast)


Lesenswert?

Markus Müller schrieb:
> Wenn das was universellen werden sollte, das alles mögliche kann, dann
> empfehle ich gleich einen STM32 zu nehmen.
> Der hat alle möglichen Schnittstellen, AD und DA Wandler schon drin.
> Auch genügend RAM um mal was aufzeichnen zu können.
>
> Als Bus-System empfehle ich CAN zu nehmen.
>
> Lese mal hier im Artikel: STM32

Mh, auch wenn ich generell dazu tendiere die eierlegende Wollmilchsau zu 
bauen wollte ich es dieses mal einfacher angehen. Jedenfalls der 
BasisSlave sollte einfach einfach sein. Mal schaun evtl. bekommt der 
Extended Slave einen STM32.

CAN find ich schön, weil es standardisiert ist. Aber alles was ich 
darüber gelesen habe fand ich schon recht kompliziert und das wurde 
schnell zu viel für mich.

von alfredo (Gast)


Lesenswert?

Ich würde unbedingt die Leitungen RE DE auf getrennte Portleitungen 
anschließen. Falls Du den Bus "abhorchst" solltest Du nicht den Buspegel 
bestimmen.
Eine Lösung:
Horchen immer bestimmen. Also /RE immer auf LOW.
/DE auf LOW falls Du auf den Bus schreiben willst.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Repo schrieb:
> Markus Müller schrieb:
>> Wenn das was universellen werden sollte, das alles mögliche kann, dann
>> empfehle ich gleich einen STM32 zu nehmen.
>> Der hat alle möglichen Schnittstellen, AD und DA Wandler schon drin.
>> Auch genügend RAM um mal was aufzeichnen zu können.
>>
>> Als Bus-System empfehle ich CAN zu nehmen.
>>
>> Lese mal hier im Artikel: STM32
>
> Mh, auch wenn ich generell dazu tendiere die eierlegende Wollmilchsau zu
> bauen wollte ich es dieses mal einfacher angehen. Jedenfalls der
> BasisSlave sollte einfach einfach sein. Mal schaun evtl. bekommt der
> Extended Slave einen STM32.

Genau diese Eierlegende Wollmilchsau vermute ich auch anhand Deiner 
Projektbeschreibung.

>
> CAN find ich schön, weil es standardisiert ist. Aber alles was ich
> darüber gelesen habe fand ich schon recht kompliziert und das wurde
> schnell zu viel für mich.

CAN ist wohl zu einfach um zu verstehen ;-)
Die ganze Kommunikation, incl. Buscollision übernimmt die HW und auch 
den entsprechenden Resend.
Es gibt eine Telegramm-ID 11 oder 29 Bit und 8 Byte Nutzdaten.
Somit kannst Du Parameter mit 11/29 Bit breite definieren mit 
entsprechenden Daten Bit, Byte, Integer, 64Bit Integer usw. Oder einen 
String mit 8 Byte länge.

von Repo (Gast)


Lesenswert?

Markus Müller schrieb:
> Genau diese Eierlegende Wollmilchsau vermute ich auch anhand Deiner
> Projektbeschreibung.

Wenn wir mal annehmen ich würde nun CAN benutzen.
Wie würde man z.b. einen Temperatursensor oder I/O Ports auf CAN 
umsetzen ohne eine eierlegende Wollmilchsau zu entwickeln?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Du hast 4 DIP-Schalter vorgesehen, damit könnte man z.B. 16 Devices 
adressieren (ginge natürlich auch per Programmierung).

eine 11-Bit ID würde ich damit folgendermaßen aufbauen:

Bit 10..7 = Dip-Schalter
Bit 0..6 = Parameter-Nummer 0..127

Parameter-Nr:
0..9:  Reserviert.
10:    Port A, B, C, D (4x 16 Bit)
11:    Port E, F, G, H (4x 16 Bit)
12:    Port I
15:    AD-Wandler CH1, CH2, CH3, CH4 (4x 12Bit)
16..n: Weitere AD-Wandler
20..n: Temp-Wert 1..n
25:    Feuchte
50:    DA-Wandler Ausgabewert

Wenn die Haupt-Steuerung ein RTR Telegramm mit der ID (ohne Daten) 
schickt, so ist das eine Anfrage "Hole Wert".

Ansonsten würde jede Einheit automatisch jede 1..5 Sekunden die 
Parameter einfach losschicken, der Master (und jede andere Einheit) 
würden diese Werte automatisch empfangen.

Ich habe mit ein keines Haus-Bus System aufgebaut mit einigen 
Display-Einheiten, Heizungssteuerung, Außensensor usw. Alles geht über 
CAN, die Display-Einheiten können beliebig eingesteckt/ausgesteckt 
werden. Alles funktioniert asynchron, nach dem "Chaos" Prinzip. Jede 
einzelne Einheit empfängt das Telegramm mit den Infos (Temperatur usw.) 
das wird, sofern es benötigt wird, im RAM abgelegt, sowie bekommt es 
einen Zeitstempel. Wenn der Wert länger als 10..60 Sec. nicht mehr 
empfangen wird, so gilt die Messstelle als ausgefallen (Berechnet jede 
Einheit selbst, die einen Wert benötigt).

Somit kannst Du Deinen Laborbus problemlos erweitern und ändern, ohne 
jedesmal den Master umprogrammieren zu müssen. Es gibt nämlich keinen 
Master.

Die 8 Byte Daten kann mach auch unterteilen in z.B.:
Byte 0: Variablentyp
Byte 1..3: Reserve
Byte 4..7: Wert
Und somit nur einen Wert mit einer Variable übertragen.

von Repo (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
ich habe mich von Markus überzeugen lassen.
Anbei die neue Version mit CAN und STM32. Wiederum hätte ich gerne 
Kritik am Schaltplan und Layout.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

JP2 - Löschen >> R2 auf GND verdrahten (47KOhm)
S1  - Löschen, sowas hatte ich noch nie gebraucht.
Signal CAN_CTRL - braucht es nicht. In der Regel 47K auf GND
R1  - Löschen

Einen JTAG-Stecker würde ich auf das Board packen, schaue Dir mal meine 
Belegung/Beschreibung an:
http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual
Entweder nur die 5 Pins 1/3/5/7/9 oder doch alle. Der gezeigte 
Schaltplan ist ein Ausschnitt aus einem STM32 Plan von mir. PA9/10 ist 
ein UART, über den man auch laden könnte. Somit ist auf diesem 
10-Poligen Stecker der SWD/JTAG und ein UART (als LV TTL) verfügbar und 
man kann diese kleine Platine auch direkt proggen ohne 
Main-Trägerplatine.

Als Steckerbelegung für CAN würde ich mich an eine Norm anlehnen, so wie 
z.B. hier:
http://www.mmvisual.de/Hilfe/BinTerm/T042.htm

Ich würde einen mit 64 Pins nehmen, dann könnte man auch Upgraden auf 
einen STM32F4xx falls die Wollmilchsau doch dicker wird ;-)

Oder mal kontrollieren ob der 48-Pinner auch Pinkompatibel mit einem 
STM32F73x ist, damit könnte man Touch realisieren.

von (prx) A. K. (prx)


Lesenswert?

Markus Müller schrieb:
> Signal CAN_CTRL - braucht es nicht. In der Regel 47K auf GND

Evtl. sinnvoll für Powerdown vom Transceiver.

von Repo (Gast)


Angehängte Dateien:

Lesenswert?

erstmal danke für die vielen Tipps!
Anbei die finale Version oder gibt es noch etwas zu meckern?
Die Bohrungen wurden weggelassen, die Platine wird am Rand festgeklemmt.


Mfg Repo

von anderes ich (Gast)


Lesenswert?

Ich würde noch einen 120 Ohm Widerstand zur CAN Terminierung vorsehen 
der per Jumper zugeschaltet werden kann.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

- den X2 14 Polig machen, denn ein 12-Poligen Flachband-Kabel/Stecker 
ist ziemlich schwer zu bekommen. Man kann da z.B. PC13 oder CAN_L/H noch 
drauf legen (oder X3 löschen?).
- Die Bauteile die unten sind alle nach oben legen, denn:
  - günstiger da nur einseitig Bestückungsdruck
  - günstiger bei automatischer Bestückung
- als kleinstes Gehäuse 0805 verwenden, ist leichter von Hand zu löten
- Leiterbahn kann problemlos auf 0,25 mm herabgesetzt werden (Signale).
- Ja, die CAN Terminierung kann/sollte man machen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.