Mikrocontroller - Anfängerfragen

7
  • Wie bestimmen Sie, wie viele Sensoren ein Mikrocontroller verwenden kann?
  • Meines Wissens nach können Sie C # nicht direkt auf einem Mikrocontroller verwenden, aber Sie können C # verwenden und über USB kommunizieren und nach einem bestimmten Anschluss suchen. Ist das wahr?

In meinem Fall habe ich mich auf die drei folgenden Mikrocontroller eingegrenzt:

  • Arduino
  • Netdurino
  • AVR

Dies ist, was ich als erstes Projekt versuche und natürlich ist dies möglicherweise kein einfaches Projekt.

Ich möchte in der Lage sein, ein Thermometer anzuschließen und wenn die Grad + -3 einer Basistemperatur erreichen, ein Requisitenfenster öffnen oder schließen. Außerdem möchte ich die Thermometerinformationen in einer MySQL-Datenbank speichern können.

Wenn also die Basistemperatur 80 beträgt, wenn die Temperatur größer als 83 ist, möchte ich das Fenster öffnen. Und wenn es 77 ist, möchte ich das Fenster schließen.

Ich bin nicht an dem genauen Mechanismus interessiert, der die Fenster öffnet und schließt, sondern nur daran, wie man die Signale sendet, um sie zu öffnen oder zu schließen.

user2278106
quelle
Nur zu Ihrer Information, Arduino und Netdurino sind Entwicklungsboards und keine Mikrocontroller. Arduino basiert auf dem AVR und Netduino basiert auf dem STM32F-Mikrocontroller
efox29
@ChrisStratton Ich vermute, OP fragt nach der Betätigung eines physischen Fensters, das irgendwie geöffnet und durch Bewegen des Propellers / Aktuators geschlossen wird.
Anindo Ghosh
Schauen Sie sich dieses Mikrocontroller-Kit an. Es ist drahtlos und verfügt bereits über einen eingebauten Temperatursensor, der drahtlos an einen Empfänger gesendet werden kann. Noch besser ist, dass der enthaltene Beispielcode dies für Sie erledigt. ti.com/tool/ez430-rf2500
Analog Arsonist

Antworten:

10

Informationen zum Mikrocontroller:

Während Netduino C # verwendet, sind die meisten anderen Mikrocontroller in C programmiert - das sind zwei völlig unterschiedliche Programmiersprachen. Darüber hinaus verwendet Arduino eine Version von C ++, die sich noch unterscheidet.

Mikrocontroller werden normalerweise in C oder in Assembly (ASM) programmiert. Wenn Sie neu sind, würde ich empfehlen, dass C. Arduino kein Mikrocontroller ist, sondern ein Entwicklungsboard (normalerweise), das auf einem AVR-Mikrocontroller basiert, obwohl andere MCUs verwendet werden. Auf den integrierten MCUs (Mikrocontroller-Einheiten) ist ein Bootloader installiert. Dies ist ein spezieller Codeabschnitt, der die Funktionsweise der MCU ändert. Im Fall von Arduino ermöglicht es die Programmierung über die serielle Schnittstelle im Gegensatz zu Standardprogrammiermethoden sowie den Zugriff auf spezielle Bibliotheksfunktionen. Auf der Platine befindet sich (normalerweise) ein USB-zu-Seriell-Konverter, da viele kleinere Chips keine interne USB-Hardware haben und der USB-Anschluss für eine ordnungsgemäße Kommunikation konvertiert werden muss.

Frage 1:

Eine MCU verfügt über eine bestimmte Anzahl von E / A-Pins. Dies sind Pins, die Ein- oder Ausgänge sein können. Sie können so viele digitale Sensoren direkt anschließen, wie E / A-Pins vorhanden sind. Analoge Sensoren sind jedoch auf die Anzahl der verfügbaren ADC-Pins (Analog-Digital-Wandler) beschränkt. Nicht alle MCUs verfügen über eine ADC-Einheit. Sie können auch viele, viele weitere Sensoren anschließen, indem Sie externe GPIO-Expander oder parallele serielle Ausgangsregister verwenden. Diese können mit wenigen MCU-Pins gesteuert werden und die Anzahl der verfügbaren E / A-Pins erheblich erhöhen.

Frage 2:

Sie schreiben ein Programm auf den Computer, der auf der MCU installiert ist. Wenn der Code eine externe Kommunikation ermöglicht (über USB, seriell, SPI, I2C usw.), können Sie mit dem Chip kommunizieren, während er ausgeführt wird. Diese Fähigkeit hängt jedoch von dem Code ab, den Sie schreiben. Welche Sprache Sie für die Kommunikation mit der MCU verwenden, ist für alles, was Sie möchten, ziemlich offen, da die eigentliche Kommunikation von der Hardware und nicht von der Programmiersprache erfolgt. Vielleicht haben Sie das mit der Erwähnung von "C #" gemeint.

Dein Projekt:

Realistisch gesehen klingt Ihr Projekt nicht so kompliziert: Lesen Sie einen Temperatursensor (klingt wie analog) und treiben Sie einen Motor an, um ein Fenster basierend auf diesem Sensorwert zu öffnen / schließen. Wann der Motor gestoppt werden muss, hängt wahrscheinlich von einem anderen Sensor ab, der am Fenster angebracht ist. Dies kann mit einer sehr kleinen MCU mit wenigen Pins und wenig Programmraum (wie dem ATtiny24 oder ATtiny25) erfolgen. Aber ich denke, Sie werden auf viele Probleme stoßen, wenn Sie nicht zuerst an etwas Kleinerem arbeiten. Die Standard- "Hallo Welt" von MCUs besteht darin, eine LED zu blinken. Bauen Sie dann darauf auf, indem Sie versuchen, die Blinkgeschwindigkeit mit einem Knopf zu steuern und dann einen Motor usw. anzutreiben.

Persönliche Meinung...

Ich habe weder den Wunsch noch jemals, Arduino zu verwenden. Ich baue alle meine eigenen Schaltkreise, normalerweise mit AVR-MCUs, aber ich verstehe den Grund, warum Leute sie verwenden. Persönlich denke ich, dass es weitaus besser ist, zu lernen, wie man eine eigene Schaltung entwirft und programmiert, als den Code anderer Leute zu kopieren und zufällige Dinge zusammenzusetzen - was die meisten Arduino-Benutzer tun. Es gibt VIELE Online-Tutorials für den Einstieg in Mikrocontroller ohne Arduino. Ich würde Ihnen empfehlen, dies zu prüfen, wenn Sie Pläne haben, in Zukunft Ihre eigenen Schaltkreise zu entwerfen. Wenn Sie keine Lust haben, etwas zu lernen, kopieren Sie auf jeden Fall weg, aber seien Sie gewarnt, dass es oft viel einfachere und effektivere Möglichkeiten gibt, Dinge zu tun, die Sie nie verstehen werden, wenn Sie nicht wissen, was los ist.

Kurt E. Clothier
quelle
Das Speichern der Informationen ist möglicherweise etwas komplexer, aber nicht unmöglich. Die Kommunikation über USB ist nicht einfach, kann aber durchgeführt werden, wenn Sie wissen, was Sie tun. Anstatt zu versuchen, Code für USB zu schreiben (es ist sehr kompliziert ...), würde ich vorschlagen, einen USB-zu-Seriell-Konverter-Chip zu verwenden und stattdessen über Seriell zu kommunizieren. Es ist viel, viel einfacher zu codieren und wird auf einigen Mikrocontrollern als interne Standardhardware geliefert. Aber wie ich bereits erwähnt habe, ist auf vielen Arduino-Boards ein USB-Konverter-Chip vorhanden, da diese so programmiert sind.
Kurt E. Clothier
2
Dies beginnt mit einer falschen Annahme. Das Vorhandensein von Netduino in der Geräteliste ist ein spezifischer Verweis auf einen eingebetteten Mikrocontroller, auf dem C # -Code ausgeführt wird.
Chris Stratton
Guter Anruf. Ich bin damit nicht vertraut.
Kurt E. Clothier
1
-1 für den Arduino-Schiefer. Für diejenigen, die sich mehr für Software und Dinge vom Typ "Maker" interessieren, wie Künstler usw., ist es überhaupt nichts Falsches, nicht alle Feinheiten von MCU-Architekturen, komplexen physikalischen Schaltkreisen usw. zu lernen. Einige Hobbyisten sind softwarezentriert, andere Hardware -, einige beide, andere wollen nur, dass etwas mit minimalem Aufwand / Verständnis funktioniert. Es ist nichts Falsches daran, jemand anderen Code zu hacken, damit etwas schnell funktioniert, auch wenn Sie nicht alles verstehen.
Brad
1
@Brad: Ich habe nie gesagt, dass etwas nicht stimmt. Ich verstehe, dass einige Leute sich nicht für Hardware interessieren, und das ist völlig in Ordnung. Ich habe lediglich festgestellt, dass es sich lohnen würde, mit dem Bare-Chip anstelle eines Entwicklungsboards zu beginnen, wenn jemand Interesse daran hätte, in Zukunft Schaltkreise (HARDWARE) zu entwerfen. Auch die "Feinheiten der MCU-Architektur" haben nichts damit zu tun. Es ist mir egal, was im Silizium passiert, aber wenn Sie nicht auf das Datenblatt schauen und ein wenig für sich selbst lernen, wissen Sie nicht, was ein Chip kann, sondern nur, was andere Leute damit gemacht haben.
Kurt E. Clothier
4

Die Wahl zwischen den Plattformen

  • Arduino ist eine Open-Source-Plattform, die (hauptsächlich) auf AVR-Chips (ATmega) basiert, mit einer Ausnahme: Der Arduino Due basiert auf einer Cortex-M3-CPU. Es ist in C, C ++ programmiert.
  • Netduino ist eine Plattform, die auf Cortex- M3- und Cortex-M4-Chips basiert . Es ist in C # programmiert
  • AVR ist eine Familie von Mikrocontrollern von Atmel, die in C, C ++ oder Assembly programmiert sind. Die Mikroprozessoren sind das Herzstück der meisten (aber nicht aller) Arduinos.

Welches Sie wählen, ist eine Frage des persönlichen Geschmacks. AVR ist niedriger als Arduino. Wenn Sie also gerade erst anfangen, ist es definitiv einfacher, schnell mit Arduino zu beginnen. Netduino gibt es, wenn Sie wirklich C # wollen, Arduino wird jedoch besser unterstützt als Netduino.

Schnittstelle zum seriellen / USB-Anschluss des PCs

Auf der PC-Seite können Sie unabhängig von Ihrer Wahl eine Schnittstelle zu Ihrem Arduino / Netduino / Bare-AVR-Chip / Schaltkreis über die serielle Schnittstelle / USB herstellen. Auf der PC-Seite können Sie jede gewünschte Programmiersprache verwenden, solange Sie Zugriff auf serielle Schnittstellen haben. Dies funktioniert so, dass Arduino / Netduino / Bare AVR vom seriellen / USB-Anschluss liest / schreibt, ebenso wie Ihr PC-Programm. Kommunikation folgt.

Auf der eingebetteten Seite haben die meisten Dinge, die Sie in Betracht ziehen, einen USART, was bedeutet, dass die serielle Kommunikation eingestellt ist. Menschliche reine AVR-Chips verfügen jedoch per se nicht über einen USB-Anschluss : Sie müssen eine USB-Unterstützung über einen separaten Schaltkreis erstellen. Kurt E Clothier weist jedoch darauf hin, dass einige AVR-Chips über eine integrierte USB-Unterstützung verfügen . Einige AVR-Chips verfügen nicht über einen integrierten USART, aber Sie werden diese wahrscheinlich nicht auswählen.

Temperaturerfassung

In Bezug auf die Temperaturerfassung bieten Ihnen alle von Ihnen vorgeschlagenen Plattformen die Möglichkeit, dies zu tun. Das Ablesen einer Temperatur kann so einfach sein wie das Ablesen eines ADC, wenn Sie einen LM34- oder einen LM35-Temperatursensor verwenden. Auf Arduino wird dies mit einer Zeile erreicht: myReading = analogRead(pinNumber); Sie müssen den Temperaturwert in die tatsächliche Temperatur umwandeln, dies ist jedoch nicht besonders schwierig.

Motoren

Die Motoren sind etwas komplizierter: Bei den meisten (fast allen) Motoren kann Ihr Arduino / Netduino / AVR-Chip den Motor nicht direkt antreiben. Sie benötigen mindestens einen MOSFET / BJT- Schalter (siehe hier für weitere Informationen) und eine Dämpfungsdiode oder robuster eine Motortreiberschaltung. Die Arduino-Plattform verfügt über eine Vielzahl von Peripheriegeräten (im Allgemeinen als Abschirmungen bezeichnet , obwohl Olin den Begriff Tochterplatine bevorzugt ), einschließlich einer Motorabschirmung. Wenn Sie einen Hochleistungsmotor verwenden, ist dies der richtige Weg.

Angelatlarge
quelle
3
Schöne Erklärung, obwohl ich Ihren Gedanken nicht zustimmen würde, dass Arduino definitiv einfacher ist. Ich bin fest davon überzeugt, dass es Ihnen in Zukunft enorm helfen wird, sich im Voraus etwas mehr Zeit zu nehmen, um zu erfahren, was los ist. Die Verwendung von Arduino schränkt die Gestaltungsmöglichkeiten stark ein. Aber andererseits ist das nur meine Meinung - nicht mehr gültig als deine. Eine andere Sache, es gibt einige AVR-Chips, die USB eingebaut haben, zum Beispiel: hackaday.com/2011/08/07/1-chip-usb-avr-development
Kurt E. Clothier
Warum gibt es ein analogRead, wenn digitalRead den gleichen Job macht?
Jippie
@ KurtE.Clothier: Danke für diesen Link. Formulierung zum Einstieg: Was denkst du?
Angelatlarge
@ Jippie: Sie sind natürlich richtig, Sir. Das war ein Gehirn-o (wie Tippfehler, aber wenn Gehirnstörungen)
Angelatlarge
Sieht gut für mich aus.
Kurt E. Clothier
2

Auf dem Netduino wird eine Version der .NET-Laufzeit ausgeführt, die als "Micro Runtime" IIRC bezeichnet wird. Sie schreiben Code in C # und er wird auf dem Netduino interpretiert. Das Netduino wird mit Bibliotheken geliefert, um auf die verschiedenen Funktionen des Mikrocontrollers zuzugreifen, und diese Bibliotheken sind in C geschrieben. Der von Ihnen geschriebene C # -Code ist sehr langsam auszuführen, obwohl der Bibliothekscode schnell ist. Ich schreibe C # -Code für meinen Lebensunterhalt, aber ich denke nicht, dass das Netduino eine gute Wahl für einen Mikrocontroller ist. Es ist in mancher Hinsicht schwieriger zu verwenden als ein Arduino, hat weitaus weniger Unterstützung (weniger Beispielcode, weniger kompatible Hardware) und kostet mehr. Ich denke auch nicht, dass C # die richtige Sprache für Controller ist.

Ich habe Projekte mit benutzerdefiniertem Code für AVRs und andere Projekte mit Arduinos durchgeführt. Wenn Sie gerade erst anfangen, hat das Arduino jede Menge Vorteile, und der einzige Nachteil sind die höheren Kosten als bei einem rohen AVR.

Ich empfehle, einige der Einführungen für den AVR und für das Arduino zu lesen. Ich denke, das gibt Ihnen eine gute Vorstellung davon, welches für Sie besser ist.

Eric Gunnerson
quelle
1

Wie bestimmen Sie, wie viele Sensoren ein Mikrocontroller verwenden kann?

Das hängt davon ab, wie kreativ Sie sein können, wie viele Iopins verfügbar sind und wie viele Pins der Sensor benötigt. Wenn Sie 4 3-Pin-Sensoren haben, bedeutet dies nicht unbedingt, dass Sie 12 Pins benötigen, um sie zu steuern. Sie können sie multiplexen und 5 Pins verwenden und 7 Io-Pins speichern. Es kommt also wirklich darauf an. Eine Sichtweise ist jedoch, wie viele verfügbare Io-Pins Sie haben und wie viele Pins Ihre Sensoren benötigen. Dies würde Ihnen eine Untergrenze für die Anzahl der Pins geben, die Sie haben können. Kreativität, Erfahrung und Verständnis dafür, wie alles funktioniert, können die Anzahl der Sensoren erhöhen.

Meines Wissens nach können Sie C # nicht direkt in einen Mikrocontroller einbetten, aber Sie können C # verwenden und über USB kommunizieren und nach einem bestimmten Anschluss suchen. Stimmt das?

Obwohl ich nicht viel USB gemacht habe, weiß ich, dass wenn Sie USB von Grund auf neu machen, dies das Schreiben von Treibern auf Ihrem Host-Computer beinhalten würde. Am beliebtesten ist es, einen IC zu verwenden, der bereits das gesamte USB-Protokoll und die Treiber verwaltet und sich wie eine serielle Schnittstelle Ihres Computers verhält. Grundsätzlich verfügen Sie über eine USB-Serial-Bridge, die an eine serielle Schnittstelle Ihres Mikrocontrollers angeschlossen werden kann. Ich glaube, der Arduino macht das. Ich bin mir nicht sicher über Netduino. Ja, Sie können C # verwenden, um über USB über einen bestimmten Anschluss zu kommunizieren (vorausgesetzt, Sie tun dies auf einfache Weise und verwenden eine USB-Serial-Bridge).

Was Sie vorschlagen, ist definitiv möglich. Sie können ein Programm schreiben, das mit Ihrer Datenbank verbunden ist und serielle Daten an Ihren Mikrocontroller senden und empfangen kann.

efox29
quelle
Danke für die Antwort. Ich kann auf Sparkfun sehen, dass sie die Steuerungen und das Thermometer haben, aber welche Art von Motoren funktionieren mit einem Mikrocontroller?
user2278106
Jeder Motor wirklich. Jeder Motor muss gesteuert werden, und je nach Motor kann dies zwischen Modellen, Typen usw. variieren. Wenn Sie wissen, wie der Motor gesteuert wird, müssen Sie eine Schaltung erstellen (ein Mikrocontroller allein reicht nicht aus). das verbindet Ihren Mikrocontroller mit dem Motor.
efox29
2
@ user2278106 Motoren benötigen einen höheren Strom, als ein typisches Mikro liefern kann. Sie benötigen höchstwahrscheinlich einen Motortreiber oder eine ähnliche Lösung (z. B. eine H-Brücke). Die Auswahl des Motors hängt von den mechanischen Anforderungen des Systems ab (wie viel Drehmoment zum Öffnen / Schließen des Fensters erforderlich ist und wie schnell das Öffnen / Schließen des Fensters erfolgen soll). Die Fahrer werden nach Auswahl eines Motors ausgewählt / konstruiert
helloworld922
1

Um einen bestimmten Punkt zu beantworten, könnte an einem Mikrocontroller vermutlich eine (sehr hohe) Anzahl von Sensoren angebracht sein. Die Verwendung von Bussensoren wie i2c, spi, ein Draht, seriell oder einem anderen Busprotokoll würde es Ihnen ermöglichen, x viele pro Bus zu haben, wobei x die Grenze für einen bestimmten Bus ist. Sie müssten einige technische Spezifikationen für die Verkabelung des Busses befolgen und könnten mit mehreren desselben Busses noch mehr erweitern.

Die Grenze liegt wirklich in Bezug auf Geschwindigkeit und Praktikabilität. Ich könnte tausend Sensoren auf einem einzelnen Arduino haben, aber könnte ich diese Informationen in angemessener Zeit mit Strom versorgen, lesen, verarbeiten und anzeigen? Vielleicht hängt es davon ab, wie gut Sie codieren können oder wie einfallsreich Sie werden.

Sogar analoge Sensoren können auf diese Weise mit Multiplexern oder ADCs hergestellt werden. Die bessere Frage ist nicht "wie viele Sensoren ein Mikrocontroller verwenden kann", sondern "wie viele Sensoren brauche ich" und nehmen sie von dort.

Passant
quelle