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
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.
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)....
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
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)
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.
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.
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.
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?
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.
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.
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
- 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