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
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
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)....
Was soll das sparen an der Cpu. Die kleinste... nimm was groesseres. N' mega16 oder so.
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.
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.
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.
Markus Müller schrieb: > Signal CAN_CTRL - braucht es nicht. In der Regel 47K auf GND Evtl. sinnvoll für Powerdown vom Transceiver.
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
Ich würde noch einen 120 Ohm Widerstand zur CAN Terminierung vorsehen der per Jumper zugeschaltet werden kann.
- 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.