Ich bin auf der Suche nach dem richtigen Mikrocontroller für meine
Anwendung.
Leider bin ich bei Atmel nicht auf den passenden µc gestoßen und bei
anderen Herstellern habe ich keine Erfahrungswerte, vielleicht könnt ihr
mir helfen.
Spannungsversorgung 5Volt
Hardware Multiplier und Divider
15-20 I/Os
1-2 Uart ( der zweite wäre n1 wenns ein USB ist ( Host funktionalität
wird nicht benötigt))
6 Timer ( 16-bit )
1-2 mal SPI
2-3 ADC ( mind 4 Kanäle pro ADC )
externe Interrupts ( idealerweise mit Prioritätenmanagement)
idealerweise noch Eeprom ( kann ich aber auch über Spi realisieren)
mfg Jan
Es ist für den Hobbybetrieb gedacht, daher ist der Preis eher
zweitrangig sollte natürlich sagen wir mal 30 € nicht übersteigen.
Es sollte ein hobbymäßig lötbares Format sein. ( Die Pins außen nicht
untendrunter). Stecksockel geht natürlich auch
p.s. er sollte nicht zu empfnindlich gegenüber Vibrationen sein.
mfg Jan
Auch, wenn Du meinem Rat mit Sicherheit nicht folgen wirst, nachfolgend
die "Richtigen" für Dich:
SH7286 läuft mit 5V und ist sehr leistungsfähig oder
H8SX1668 läuft nur mit 3,3V hat dafür aber noch USB
Unter 30€ wird locker eingehalten, sofern Du mit dem Preis nicht Deine
Gesamtkosten gemeint hast.
Wenn es 5V sein müssen dann kann ich nicht dienen. Aber bei 2..3,3V
hätte ich da einen.
Der STM32F103xC-D-E (ab 256KB Flash) hat 3AD-Wandler (16CH) und 8 Timer,
genügend UARTs, SPI und IIC.
Gibt es in verschiendene Gehäuse, Pins außen (nicht unten).
Schaue mal hier, Artikel: STM32
EEPROM muss extern sein oder man nutzt das Flash für Parameter die wenig
ändern.
>SH7286 läuft mit 5V und ist sehr leistungsfähig oder>H8SX1668 läuft nur mit 3,3V hat dafür aber noch USB
Der Sh7286 hat doch auch USB ?
Leider gibts den bei Farnell nicht.
* LQFP-176 (20mm x 20mm, 0.4mm pitch)
* LQFP-176 (24mm x 24mm, 0.5mm pitch)
Und der ist dann pinmäßig doch etwas übertrieben für meine Anforderungen
( 15-20 Pins ) ^^
5Volt sollten es schon sein, da ich noch peripherie habe die ich mit
5Volt betreiben möchte.
Ein SN74LVC8T245 (z.B. TI) könnte als Level-Shifter dienen. Ich weiß ja
nicht wie viele Signale auf 5V bleiben sollten.
Der STM32 ist bei den meisten Eingängen 5V Tolerant.
Ansonsten wenn eine Galvanische Trennung nötig ist, kann ein ADUM1201
verwendet werden, der kann 3,3 und 5V.
Ansonsten ein dsPIC30Fxxxx. Aber den kann ich nicht empfehlen, denn der
Stromverbrauch ist enorm, der glüht wenn man ihn mit voller Leistung
betreiben möchte. Ich habe damit schon gearbeitet, war nicht zufrieden
(und hab ihn gegen einen STM32 getauscht).
Daher empfehle ich den STM32 mit einem Level-Shifter. Ist in jedem Fall
etwas für die Zukunft. Der dsPIC30 wird nicht mehr weiter entwickelt.
>Der Sh7286 hat doch auch USB ?
Oh, da hast Du gut aufgepaßt :-)
Wenn Dich die vielen Pins stören, der SH7285 hat nur 144 und der SH7243
nur noch 100. Den gibt es auch nicht bei Farnell, aber bei Distributoren
von Renesas.
>Es ist für den Hobbybetrieb gedacht,
Damit scheiden die erwähnten Lieferanten aber aus.
> 5Volt sollten es schon sein, da ich noch peripherie habe die ich mit> 5Volt betreiben möchte.
Dann ist Renesas schonmal nicht schlecht. Selbst ein moderner R32 mit
50Mhz und Fliesskommaeinheit kann noch mit 5V laufen. Allerdings wohl
auch leicht uebertrieben fuer deine Beduerfnisse.
Schau doch mal was es an M16C gibt.
In der Mittelklasse benutze ich gerne den M16C29:
8x Timer
2x Uart syncron/async
1x Uart syncron/Async/I2c
2x SPI
1x Multimaster I2C
10Bit AD mit 27Kanaelen
2x DMA
CRC-Generator
64pin oder 80pin Gehaeuse.
Das Problem ist natuerlich wenn du mehr Rechenleistung willst, wie z.B
im R32, so werden die vermutlich ueberall mehr Pinne haben. Wenn die
Hersteller schon ein grosses Stueck Silizium brauchen dann machen sie
halt rundrum alles voller Pinne. :-)
Es gibt auch welche mit integriertem USB. (M16C6C)
BTW: Hier im Markt-Forum hat jemand eine Rolle mit alten M16C62A
(M30624FGAP) und verkauft sie preiswert. Der hat nur den Nachteil das er
kein Interface zum E8 hat und nur ueber RS232 programmiert werden kann.
Ansonsten aber auch ein toller Prozessor mit viel Ram. Es kann sich
lohnen davon 10Stueck zu beschaffen. Layout fuer ein Testboard koennte
ich zur Verfuegung stellen.
Olaf
> Leider bin ich bei Atmel nicht auf den passenden µc gestoßen und bei> anderen Herstellern habe ich keine Erfahrungswerte, vielleicht könnt ihr> mir helfen.
Der ATMEGA1280 könnte passen. Ist zwar ein bisschen gross, erfült aber
deine anforderung. Gibt es sogar auf einem Arduino Ev. Board.
http://de.farnell.com/multicomp/mc-mega/bord-atmega1280-mega-compatible/dp/1813413
oder
Sparkfun.com
Tytus
Den Megas fehlt auch der 2. oder 3. ADC. Ebenso eine
Prioritätenzuteilung von Interrupts.
An diesem Punkt muß jetzt die Frage kommen: Wozu brauchst Du denn das
Alles?
Und dann werden die Anforderungen solange reduziert, bis ein ATtiny 45
sowie ein paar Schieberegister und LEDs reichen :-)
Aber ernsthaft: für welche Hobbyanwendung braucht man die erfragten
Eigenschaften?
> Den Megas fehlt auch der 2. oder 3. ADC.
Das fehlt den M16C/R32 auch. Wenn ich ehrlich bin ich kann mich auch
nicht erinnern jemals einen Controller gesehen zu haben der mehr als
einen AD-Wandler hatte.
> Ebenso eine> Prioritätenzuteilung von Interrupts.
Das allerdings koennen doch IMHO alle Controller ausser den ollen alten
Atmels oder? Ist auch IMHO unverzichtbar.
> Wozu brauchst Du denn das Alles?
Bitte! Keine intelligente Fragen in Threads! Wo kommen wir denn da hin?
Olaf
Ich wollte meine erste Variante meines Motorsteuergeräts neu aufsetzen,
diese arbeitet im Moment mit 3V3. Für die IGBTs und den IC vom Knock
interface wären aber eigentlich 5Volt besser daher die Frage. Ich denke
es würde auch dem ADC der Gaspedalposition gut tun, den ich allerdings
bis jetzt noch nicht integriert habe ( daher weiß ich es nicht).
mfg Jan
Welchen µC verwendest Du jetzt? (bleib ruhig, Olaf, sonst erzähl ich
allen, welche Macken die M16 und R32 haben :-)
Hast Du Probleme wegen der 3,3V?
Der SH728x läuft gerade auch mit 5V, um die Störfestigkeit zu erhöhen.
> Ich wollte meine erste Variante meines Motorsteuergeräts neu aufsetzen,> diese arbeitet im Moment mit 3V3.
Glyn sagte mir das irgendein deutscher Autohersteller
den R32 verwendet. Allerdings wuerde ich den privat nicht empfehlen
weil es fuer die R32 keinen gcc gibt und man sonst die 64k Grenze hat.
> Ich denke> es würde auch dem ADC der Gaspedalposition gut tun, den ich allerdings> bis jetzt noch nicht integriert habe ( daher weiß ich es nicht).
Also fuer solche Aufgaben reicht doch mit Sicherheit immer ein
eingebauter ADC. Es gibt doch am Automotor keinen analogen Messwert den
du oefters als 100mal pro Sekunde brauchst. Da kann man dann doch wohl
den eingebauten Wandler auf einen anderen Kanal umstellen.
Eine Frage die du unbedingt Stellen solltest ist aber nach dem
Temperaturbereich. Du brauchst einen Controller der im Motorraum im
Sommer und Winter ueberlebt!
> Welchen µC verwendest Du jetzt? (bleib ruhig, Olaf, sonst erzähl ich> allen, welche Macken die M16 und R32 haben :-)
Ich arbeite nicht fuer Renesas und kann die Wahrheit gut vertragen. :-)
Also erzaehl mal ruhig.
R32 hat sicher die Macke das er alles kann und Dinge eingebaut sind die
man niemals fuer moeglich haelt und das man deshalb leider oft lange im
Datenblatt nach irgendeinen §$%§$%"$% Bit sucht das man auch noch setzen
muss damit eine Funktion endlich laeuft. Ausserdem merkt man dem Teil an
das er wohl fuer wichtige Steuerungen wie z.B Motorsteuergeraete gedacht
ist. Es gibt bergeweise Bits mit denen man Registerzugriffen
freischalten muss damit ein ausserkontrolle laufendes Programm nicht zu
viel zerstoert.
Im Gegenteil dazu merkt man den SH deutlich an das sie bereits eine
lange Geschichte haben. Irgendwie gereifter, aber teilweise (z.B
Taktgenerierung) sehr primitiv.
Der M16C hat unter dem gcc die bloede Macke das der gcc nur Pointer
vom Type 16bit unterstuetzt und dies bei 24Bit Adressen leider zu einer
Sprungtabelle im kostbaren Ram fuer jede Funktion fuehrt die man
verwendet.
Sonst wueste ich jetzt aber nichts.
BTW: In den letzten Tagen habe ich das erstemal seit zehn Jahren wieder
in Assembler programmiert. (Scheduler fuer Multitasking auf dem M16C) Es
ist schon interessant was man da mittlerweile fuer Befehle hat. Da
koennte es fast wieder Spass machen sich auf alte Tugenden zu besinnen.
:-)
Kann ein AVR sowas auch: mov.w 12[fp],2[sp]
Da fragt man sich ja fast wofuer die CPU noch Register hat.
> Der SH728x läuft gerade auch mit 5V, um die Störfestigkeit zu erhöhen.
Ist das denn wirklich von Bedeutung? Ich wuerde sagen Stoerfestigkeit
erreicht man doch ueberwiegend durch Layout und Gehaeuse.
Olaf
Fritz schrieb:> Hardware Multiplier und Divider
Ich halte die Forderungen für übertrieben.
Wozu braucht man bei Motorsteuerungen schnelles Rechnen?
Das ist doch Mechanik und die ist per se viel langsamer als Software.
Die zeitkritische Steuerung machen ja die PWM-Einheiten in Hardware.
> 6 Timer ( 16-bit )
6 Timer habe ich noch nie benötigt.
Ein Timer reicht eigentlich immer, wenn er die benötigte Anzahl
PWM-Einheiten hat. Es ist Unsinn, für jede Timeraufgabe nen extra Timer
zu benutzen.
> 2-3 ADC ( mind 4 Kanäle pro ADC )
Warum nicht ein ADC reicht, erschließt sich mir nicht.
Es ist doch wurscht, ob ein schneller ADC oder viele langsame ADCs.
Informativer wäre daher die Angabe der maximalen Wandlungen pro s und
natürlich die Auflösung.
Peter
> 6 Timer habe ich noch nie benötigt.
Ich auch nicht. Aber so 3-4 braucht man schon. Man kann dann verschieden
wichte Aufgaben mit verschiedenen IRQ-Prioritaeten laufen lassen.
Ein Beispiel...
Ich lese den DS1820 mit einer Statemachine im IRQ aus. Ist sehr wichtig
also hohe Prioritaet weil sonst die Uebertragung schief gehen kann.
Scheduler fuer Multitasking hingegen ist relativ unwichtig und kann
gerne auch mal verzoegert laufen. Also eigener Timer mit geringer
Prioritaet.
Eigener Timer fuer die Delayfunktion ist auch nett.
Ich weiss wenn man nichts hat kann man es sich immer auch irgendwie
hinbiegen. Aber es macht einfach mehr Spass wenn man ein paar Timer mehr
hat.
Olaf
Peter Dannegger schrieb:> Fritz schrieb:>> Hardware Multiplier und Divider>> Ich halte die Forderungen für übertrieben.> Wozu braucht man bei Motorsteuerungen schnelles Rechnen?> Das ist doch Mechanik und die ist per se viel langsamer als Software.> Die zeitkritische Steuerung machen ja die PWM-Einheiten in Hardware.
Um eine präzise Berechnung des Zündzeitpunkts und der Einspritzmenge zu
erreichen, mache ich die Berechnung nicht über das verschieben. Diese
Tatsache im Zusammenhang damit, dass ich viele Zähne auf dem
Inkrementenrad habe ( Zündaussetzererkennung und wasted spark nach dem
Anlassen). Führt dazu, dass diese Berechnungen sehr schnell ausgeführt
werden müssen. Abgesehen davon möchte ich auch noch zusätzlich ein
Telemetriesystem benutzen.
>> 6 Timer ( 16-bit )>> 6 Timer habe ich noch nie benötigt.> Ein Timer reicht eigentlich immer, wenn er die benötigte Anzahl> PWM-Einheiten hat. Es ist Unsinn, für jede Timeraufgabe nen extra Timer> zu benutzen.>
Aufstellung der Timer:
1. Drehzahl
2. Einspritzzeitpunkt / Einspitzzeit Bank A
3. Einspritzzeitpunkt / Einspitzzeit Bank B
4. Zündzeitpunkt/Ladezeit Bank A
5. Zündzeitpunkt/Ladezeit Bank B
6. Rundenzeit
Wenn ich jetzt Bank A und B über einen Timer laufen lassen ergibt sich
bei meinem Inkrementenrad eine rechnerische Höchstdrehzahl, die leider
unter meiner geforderten liegt.
>> 2-3 ADC ( mind 4 Kanäle pro ADC )>> Warum nicht ein ADC reicht, erschließt sich mir nicht.> Es ist doch wurscht, ob ein schneller ADC oder viele langsame ADCs.> Informativer wäre daher die Angabe der maximalen Wandlungen pro s und> natürlich die Auflösung.
Die Gaspedalstellung wird über zwei gegenläufige Widerstände errechnet.
Diese möchte ich aus Sicherheitsgründen nicht über denselben ADC laufen
lassen.
Außerdem werden noch einige Betriebsparameter des Motors erfasst.
mfg Fritz
>> Der SH728x läuft gerade auch mit 5V, um die Störfestigkeit zu erhöhen.>Ist das denn wirklich von Bedeutung? Ich wuerde sagen Stoerfestigkeit>erreicht man doch ueberwiegend durch Layout und Gehaeuse.
Die µC internen Schaltschwellen haben bei höherer Vcc einen größeren
Abstand '0' zu '1'.
>Ich halte die Forderungen für übertrieben.>Wozu braucht man bei Motorsteuerungen schnelles Rechnen?
Ich weiß nicht, was Fritz letztlich vor hat, aber bei neueren Autos -
zum Beispiel - werden mehrere Einspritzungen pro Zündvorgang gesteuert.
Da ist keine Zeit für Bittrixereien.
Mehrere ADCs braucht man in der Regel bei Elektromotoren, um die
Phasenströme synchron zu messen.
Fritz schrieb:> Um eine präzise Berechnung des Zündzeitpunkts und der Einspritzmenge zu> erreichen, mache ich die Berechnung nicht über das verschieben.
Du hast ein mechanisches System mit einer Trägheit, quasi ein
Schwungrad.
Du kannst die Zündzeitpunkte nicht abrupt verschieben, sondern mußt sie
in kleinen Schritten nachführen. Sonst werden die mechanischen Kräfte zu
groß und alles fliegt Dir um die Ohren.
Überschlage doch erstmal, welche und wieviele Berechnungen pro Sekunde
Du brauchst und mit welcher Genauigkeit.
Jeder 8051 hat übrigends HW-Multiplikation/Division.
> Wenn ich jetzt Bank A und B über einen Timer laufen lassen ergibt sich> bei meinem Inkrementenrad eine rechnerische Höchstdrehzahl, die leider> unter meiner geforderten liegt.
Heißt das jetzt, Bank A, B sind 2 Motoren mit verschiedenen Drehzahlen?
Ansonsten, wenn Du 4 Zeitpunkte brauchst, die zueinander synchron sind,
brauchst Du nur einen Timer mit 4 Capture-Ausgängen.
> Die Gaspedalstellung wird über zwei gegenläufige Widerstände errechnet.> Diese möchte ich aus Sicherheitsgründen nicht über denselben ADC laufen> lassen.
Das bringt genau 0,nix an Sicherheit.
Wenn durch ESD was kaputt geht, dann ist es der Eingangspin und nicht
der ADC.
Sicherheit bringt nur eine Schutzbeschaltung und ein entsprechendes
Layout.
Peter
Olaf schrieb:> Das fehlt den M16C/R32 auch. Wenn ich ehrlich bin ich kann mich auch> nicht erinnern jemals einen Controller gesehen zu haben der mehr als> einen AD-Wandler hatte.
Die STM32 haben bis zu 3 ADCs.
> Die Gaspedalstellung wird über zwei gegenläufige Widerstände errechnet.> Diese möchte ich aus Sicherheitsgründen nicht über denselben ADC laufen> lassen.
Das ist quatsch! Ich wuerde Sicherheit eher so angehen das ein externes
primitives Monoflop die Zuendung ausschaltet wenn es nicht regelmaessig
von der Leseroutine zurueckgesetzt wird. Oder man vergleicht die
Widerstaende ueber ein Opamp und stellt alles ab wenn es unplausibel
wird.
Dem Code im Prozessor kann man nicht trauen.
> Jeder 8051 hat übrigends HW-Multiplikation/Division.
Die haben Bosch ja auch fuer die ersten Steuergeraete gereicht. Ich hab
mal sowas vom Lancia Theme V6 zerlegt weil der Zuendaussetzer hatte. Da
war ein MCS51 im Zuendsteuergeraet und einer im Einspitzsteuergeraet.
Oh..und letztens habe ich ein ABS-Steuergeraet von BMW auf dem Tisch
gehabt. Da war ein 6805 oder was aehnliches drin. Und erzaehlen sie
immer was von hochentwickelter Technik und man muesse schon verstehen
das ein Ersatzeil 1000Euro kostet....
Aber gut, ich wuerde gerade fuer private Projecte immer einen Controller
nehmen der deutlich groesser ist als man es brauchen wuerde. Macht die
Entwicklung und Fehlersuche doch etwas angenehmer. Vor allem da man
privat nicht unbedingt die ganzen Luxus Debugger und Emulatoren hat. Da
ist es doch nett wenn man ordentlich Code fuer die Fehlersucher und
Ueberwachung in sein Programm packen kann.
> Sicherheit bringt nur eine Schutzbeschaltung und ein entsprechendes> Layout.
Ich wuerde bei soetwas wichtiges wie der Gaspedalstellung schon eine
gewisse Sicherheitsueberwachung haben wollen. Bei Motorraedern hat man
ja nicht ohne Grund immer einen Killschalter. Wundert mich eigentlich
das soetwas bei Autos nicht vorgeschrieben ist.
Olaf