Forum: Mikrocontroller und Digitale Elektronik Genervt über Feature-Politik von Atmel - ATmega/ATtiny


von Robert B. (robertb)


Lesenswert?

Hallo!

Ich muss hier mal meinen Unmut kundtun in der Hoffnung dass jemand mir 
doch noch einen guten Tipp geben kann:

Ich habe eine Schaltung die eine Frequenz messen und per 
Miniaturschrittmotor analog anzeigen soll (ein DZM - oh Wunder!). Zum 
Ansteuern des Steppers verwende ich Microstepping und variable Rampen - 
dafür brauche ich also einen schnellen Timer für die PWM und einen Timer 
um bei einem Compare Match den nächsten Schritt des Steppers auszugeben. 
Für die Freuqenzmessung verwende ich den ACO der den Input Capture 
triggert. Zudem benutze ich den UART zum Debugging.

Ergibt in Summe 3 Timer: PWM (Clk/1), Step-Timing (Clk/64), 
Frequenzmessung (Clk/64).

Wenn ich es in einem ATmega168 drauf anlege kann ich letztere 
Zusammenlegen, da Compare Match (für Step-Timing) und Input Capture (für 
Frequenzmessung) zusammen laufen können.

Nun wollte ich gerne die PWM-Frequenz erhöhen. Dazu entweder die 
Auflösung reduzieren oder die Timer-Frequenz erhöhen. Beides geht nicht 
mit dem mega168, aber der tiny861 eignet sich super: 64 MHz PLL-Clk und 
einstellbare Auflösung.

Die sonstigen Daten sind allerdings grottig: neben dem 10bit "PWM-Timer" 
bleibt mir nur ein verkrüppelter 16bit-Timer. Die absolute Krönung ist 
die Tatsache dass dieser nicht mal Input Capture und Compare Match 
parallel kann. Damit kann ich also nicht gleichzeitig Step-Timing und 
Frequenzmessung realisieren. Was ist das für ein Sparwahn?

Der tolle USI als UART-Ersatz ist natürlich ohne eine Timer zu 
spendieren auch nicht brauchbar - super! Ein schneller Soft-Uart in der 
Hauptschleife ist aufgrund des kritischen Timings und der Interrupts 
kaum denkbar.

Da hilft mir auch die sehr willkommene Hystherese des ACO nicht...

Tiny861: 64 MHz PLL und Hystherese am ACO

Es gibt scheinbar keinen ATmega der diese Features bietet - wie doof ist 
das denn?

Grüße
Robert

: Verschoben durch Moderator
von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn der Controller nicht kann, was man sich wünscht, muß man halt die 
Anwendung anpassen oder externe Bauteile verwenden. Was willst Du 
eigentlich? Die eierlegende Wollmilchsau? Kann Dir keiner bieten.

von Hannes L. (hannes)


Lesenswert?

Die AVRs sind exakt so ausgestattet, wie es die Großkunden, die ja mit 
ihren Großaufträgen die Entwicklung bezahlen, angefordert bzw. bestellt 
haben. Also nimm sie wie sie sind, oder bestelle (und kaufe dann) so 
viele, dass sie Dir Deinen Wunsch erfüllen.

;-)

...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Robert B. schrieb:

> Es gibt scheinbar keinen ATmega der diese Features bietet - wie doof
> ist das denn?

Die Idee ist offenbar, dass du mit einer schnellen PWM einen
Controller (ATtinyX61) für sich allein betraust, der dann weiter
nichts macht als diese PWM.

Für die Steuerung durch den Master-Controller nimmst du dann die USI
im SPI-Slave-Modus.  Dafür brauchst du keinen Timer, weil der Master
den Takt vorgibt.

von STK500-Besitzer (Gast)


Lesenswert?

>dafür brauche ich also einen schnellen Timer für die PWM und einen Timer
>um bei einem Compare Match den nächsten Schritt des Steppers auszugeben.

Falsches Konzept. Aus "schnellen" Timern kann man langsamere mit etwas 
Hirnschmalz ableiten.

von Robert B. (robertb)


Lesenswert?

gähn Wahnsinn, darauf wäre ich glatt nicht gekommen. Danke für eure 
Binsenweisheiten, Jungs!

So wie der tiny861 gebaut wurde kann man dann gleich nen ASIC nehmen. 
Wie füllte man 8kb Code mit so wenig sinnvoller Hardware? Nicht mal den 
16bit Timer (den einzigen neben dem PWM-Timer) vollständig auszustatten 
ist echt behämmert. Die paar Buffer wären wohl noch für 0,00567 Cent 
drin gewesen. Gleiches gilt für den besch... UART. Hab ja nicht nach 
Hardware-USB gefragt...

von STK500-Besitzer (Gast)


Lesenswert?

Eigentlich ein Grund, den Thread ins Offtopic zu verschieben (gibt es da 
schon ein Unterforum "Jammern, was das Zeug hält"?)

von Hannes L. (hannes)


Lesenswert?

Stimmung, Konfetti...

...

von MarioT (Gast)


Lesenswert?

Robert B. schrieb:
> Wie füllte man 8kb Code mit so wenig sinnvoller Hardware?
Kannst ja Windows draufspielen. Ist viel Code, mit wenig sinnvoller 
Hardware.

von Robert B. (robertb)


Lesenswert?

STK500-Besitzer schrieb:
>>dafür brauche ich also einen schnellen Timer für die PWM und einen Timer
>>um bei einem Compare Match den nächsten Schritt des Steppers auszugeben.
>
> Falsches Konzept. Aus "schnellen" Timern kann man langsamere mit etwas
> Hirnschmalz ableiten.

Nomen est omen.... Super Idee aus einem 64 MHz Timer der ohne Prescaler 
läuft und evtl. noch eine reduzierte Auflösung hat andere Zeitbasen 
abzuleiten. Da bin ich ja nur noch im Interrupt...

Oder meinst du den 16bit - grandiose Idee, aber der kann wenn im 
korrekten Bereich mit Input Capture betrieben gar kein Output Compare 
mehr - und nur Overflow erlaubt keine dynamische Schrittweite 
(=Beschleunigung).

von Robert B. (robertb)


Lesenswert?

Ok, nach dem sich die Wogen hoffentlich bei allen gelegt haben versuchen 
ich es noch mal betont produktiv:

Hat jemand eine Idee wie ich meine obigen Anforderungen irgendwie 
umgesetzt kriege?

Momentan komme ich mit einem 24 MHz Quarz und Prescaler=1 bei einem 
mega168 auf max. 93,75 kHz PWM-Frequenz. Dies würde ich gerne ändern, da 
ich sowohl Probleme damit habe dass der OC0A bzw. OC0B nicht direkt sich 
ändert (siehe Beitrag "COM0A1, COM1A1, COM2A1 etc - wird per Pin sofort aktualisiert oder erst beim nächsten Zyklus?") und 
die PWM-Frequenz auch bei dieser Art des Miniatursteppers eh höher sein 
sollte. Zu allem Überfluß würde ich gerne noch den Phase Correcz Mode 
nutzen. Dies alles ginge mit dem tiny861 - aber halt mit obigen 
Problemen. Denke bei derlei "hohen" Frequenzen ist es unvorteilhaft 
mittels Overflow Interrupt weitere Zeitbasen von dem PWM-Timer 
abzuleiten.

Alternativ habe ich das Problem mit dem Generieren der Schritte. Ich 
habe eine Beschleunigungs-/Bremsrampe die die Zeiten zwischen den 
einzelnen Micro-Schritten steuert. Momentan benutze ich den 16bit Timer 
dazu den Schritt-Wert auf den aktuellen Zähler draufzuaddieren und dann 
in jedem OC den nächsten Schritt zu planen.

Gerne würde ich meinetwegen UART und Schrittweitentiming im 
Hauptprogramm machen - aber wie soll das funktionieren wenn parallel die 
Interrupts mir das Timing versauen?

Grüße
Robert

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Hallo Robert B.,

ich würde keinen Schrittmotor einsetzen, sondern ein einfaches 
Drehspulinstrument. Das versorgt man dann mit einer PWM die der AVR ja
in Hardware bietet. Man muß nur ein Register setzen.
Also muß man in der Software nur die Umrechnung von Eingangsfrequenz auf 
den zu setzenden Registerwert machen.

Gruß

Olaf

von faustian (Gast)


Lesenswert?

Frag mich ja wieviele scheinbar unterschiedliche Typen ein und der selbe 
Die sind, nur mit unterschiedlichen defekten/marginalen Features ;)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Robert B. schrieb:
> Hat jemand eine Idee wie ich meine obigen Anforderungen irgendwie
> umgesetzt kriege?

Was spricht gegen meinen oben gemachten Vorschlag?  Einen ATtiny261
als PWM-Prozessor, der via SPI seine Befehle von einem Hauptprozessor
bekommt.  Für den nimmst du dann einen ATmega88 oder sowas.

von Simon K. (simon) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Robert B. schrieb:
>> Hat jemand eine Idee wie ich meine obigen Anforderungen irgendwie
>> umgesetzt kriege?
>
> Was spricht gegen meinen oben gemachten Vorschlag?  Einen ATtiny261
> als PWM-Prozessor, der via SPI seine Befehle von einem Hauptprozessor
> bekommt.  Für den nimmst du dann einen ATmega88 oder sowas.

Ich hab auch schon mal öfter an sowas Gedacht. Allerdings hat die Sache 
einen Haken (finde ich): Du brauchst schon mal zwei 
Programmierschnittstellen und das ist nicht besonders platzsparend.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Simon K. schrieb:
> Du brauchst schon mal zwei
> Programmierschnittstellen und das ist nicht besonders platzsparend.

Kann man auf einen Stecker führen, man braucht nur noch einen weiteren
(2-Wege-)Jumper, der das SCK abwechselnd auf den einen oder den
anderen Controller legt.

von Simon K. (simon) Benutzerseite


Lesenswert?

Und MISO, der würde sonst kurzgeschlossen mit dem jeweils anderen AVR. 
Oder?

von Robert B. (robertb)


Lesenswert?

Hi!

Danke für die vielen Antworten.

Also mit einem Drehspulinstrument wollte ich es nicht machen. Ist mehr 
ein Bauchgefühl. Zum einen machen alle modernen Kfz-Tachos es so. Ich 
habe die Stepper da und die passenden Nadeln. Digital finde ich einfach 
schicker. Zudem ist natürlich die Reproduzierbarkeit/Genauigkeit besser. 
Alles keine perfekten Argumente, ich weiß. Vielleicht ist es auch 
einfach sportlicher Ehrgeiz. wie gesagt, die Jungs von Motometer, VDO 
und Co machen es auch so.

Ja, der tiny861 bzw. dann 261 als Steppercontroller wäre eine Lösung. 
Nun, auch das mag komisch klingen, aber von so einer 2-Chip-Lösung 
wollte ich gerade weg. Momentan benutze ich nämlich einen mega168 und 
einen MC33977. Dieser ist ein ASIC speziell für diese Aufgabe - 
allerdings höllisch groß verglichen zu so einem süßen kleinen mega168 im 
MLF32-Package. Der tiny861 wäre dann genauso groß - das wäre mit 
Sicherheit schon mal besser. Wahrscheinlich muss das dann die Lösung 
sein. Hatte halt den sportlichen Ehrgeiz nur einen uC zu verwenden - bei 
den Tachos hängen die Stepper nämlich auch direkt am Hauptcontroller - 
jedoch haben diese zumeist Hitachis auch andere Ausgänge...

Vielen Dank!

Grüße
Robert

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Simon K. schrieb:

[ISP sharing]

> Und MISO, der würde sonst kurzgeschlossen mit dem jeweils anderen AVR.
> Oder?

Nein, der wird erst aktiviert, nachdem der AVR die Initialisierungs-
sequenz erkannt hat.  Ohne SCK erkennt er sie nicht, damit ist er
im Reset, und alle Pins sind hochohmig.

Man muss den SCKs natürlich noch zwei Pulldowns von ca. 1 MΩ
spendieren, damit der jeweils unbenutzte nicht in der Luft hängt.

Da der zweite ja sowieso Slave-SPI am ersten ist, könnte man natürlich
die Programmierung des zweiten auch gleich über den ersten mit
erledigen. ;-)

von gtf (Gast)


Lesenswert?

Was spricht den gegen eine kleinen XMEGA?
Der hat auch eine PLL und eine Sack voll Peripherie :- )

von Robert B. (robertb)


Lesenswert?

Ja, die Idee hatte ich auch schon und wollte das XPlain mal bestellen. 
Bis zu 8 16-bit Timer reichen selbst mir ;-). Zumal da Atmel auch die 
Möglichkeit geschaffen hat die PWM-Outs direkt/sofort zu invertieren! 
Sehr schick. ABER: Die Dinger gehen nur bis 3,3V - die Stepper sind auf 
5V/20mA ausgelegt. Schätze mal dann bleibt nicht mehr genug Leistung, 
zumal die Ports am Xmega nur mit 20mA angegeben sind und ich schätze 
stärker unter Belastung einbrechen als die mit 30mA angegebenen Ports 
des tinys.

Ich merke schon - ich hab wohl wirklich zu viel verlangt.
Also entweder
- dedizierter tiny
- fertigen ASIC
- Xmega mit Treibern
einsetzen.
Schade, aber scheint echt nicht anders zu gehen.

Grüße
Robert

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was mir gerade noch einfällt: guck dir mal die AT90PWMxx-Controller
an, ob du deren (ebenfalls mit einer PLL hochgetaktete) Power stage
controller zur Generierung deiner PWM benutzen kannst.  Die haben
unabhängig von den PSCs noch zwei weitere Timer und eine UART.
Vielleicht passt das ja.

von faustian (Gast)


Lesenswert?

OK, mal eine ganz bekloppte Idee: Die langsame PWM nehmen und 
vertiefpassen, mit der daraus gewonnenen Analogspannung wieder einen 
simplen PWM-Modulator (zB Rampengenerator mit Komparator) antreiben....

von Robert B. (robertb)


Lesenswert?

Habe gerade noch mal mit einem Kollegen diskutiert: Was wäre wenn man 
PWM und Input Capture als ISRs laufen läßt und das Step-Timing in der 
Hauptschleife erzeugt. Idee: Man pollt quasi den 16bit Timer und 
vergleicht mit dem eigenen "OC"-Wert. Wenn der Wert drüber liegt führt 
man den Code aus der vorher in dem Compare Match ISR war. Anschließend 
könnte man sogar je nach Timing noch per Soft-UART ein Byte 
rausdüdeln...

Grüße
Robert

von Simon K. (simon) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Simon K. schrieb:
>
> [ISP sharing]
>
>> Und MISO, der würde sonst kurzgeschlossen mit dem jeweils anderen AVR.
>> Oder?
>
> Nein, der wird erst aktiviert, nachdem der AVR die Initialisierungs-
> sequenz erkannt hat.  Ohne SCK erkennt er sie nicht, damit ist er
> im Reset, und alle Pins sind hochohmig.

Das klingt praktisch. Muss ich mal im Hinterkopf behalten!

von spess53 (Gast)


Lesenswert?

Hi

robertb will lediglich eine Frequenz messen und einen Schrittmotor 
ansteuern.
Warum hat hier noch niemand einen 32-Bitter oder Mini-PC vorgeschlagen. 
Mit einen ATMega48 steuere ich 2 Schrittmotoren mit Mikroschritt, 
Rampen, Kommunikation usw.

MfG Spess

von Robert B. (robertb)


Lesenswert?

spess53 schrieb:
> Hi
>
> robertb will lediglich eine Frequenz messen und einen Schrittmotor
> ansteuern.
> Warum hat hier noch niemand einen 32-Bitter oder Mini-PC vorgeschlagen.
> Mit einen ATMega48 steuere ich 2 Schrittmotoren mit Mikroschritt,
> Rampen, Kommunikation usw.
>
> MfG Spess

Genau DAS kriege ich ja auch mit einem ATmega_8 hin - nur jedoch ohne 
Hystherese und mit einer für meine Anwendung zu niedrigen PWM-Frequenz.

Ein zweiter Motor ist ja nur ein zweites Step-Timing (also weiterer OC 
am GLEICHEN 16bit-Timer!) und zwei weitere PWM Ausgänge (also den Timer0 
bzw. Timer2 mit seinen OC0A/OC0B bzw. OC2A/OC2B). Das der mega_8 dann 
noch einen echten UART hat statt nur einem USI ist auch klar. also ist 
das was du da machst kein Kunststück - geht aber leider an meiner 
problemstellung vorbei.

Die AT90PWM3B sehen übrigens gut aus - das wäre der nächste Ansatz!

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Hallo Robert,

was ich nicht verstehe ist, warum Du unbedingt einen Schrittmotor 
einsetzen willst. Das lohnt den ganzen Aufwand nicht.

Ich würde Dir meinen Ansatz empfehlen und einen relativ simplen ATmega 
empfehlen.

Gruß

Olaf

von Peter D. (peda)


Lesenswert?

Gib dochmal Butter bei die Fische, um wieviel Schritte/Microschritte 
gehts denn überhaupt?
Du brauchst bestimmt keine 16Bit Microschritte.

Ich würde die Vollschritte/Microschritte in Software machen mit nem 
Timerinterrupt. 50..100Hz Interruptrate sollten reichen.

Und der andere Timer macht dann die Frequenzmessung.


Peter

von gsyg<cfbsdk (Gast)


Lesenswert?

SOO genau ist ein DZM sowieson nicht, bzw haengt von dessen supergenauer 
Anzeige im Auto sowieso nicht viel - genauer gesagt - fast nichts - ab.

Gast

von Иван S. (ivan)


Lesenswert?

Selbst schuld, wer sich auf die AVR-Familie einlässt. Solche 
Gegebenheiten sind doch typisch für Atmel. Ich bin ja Gästen gegenüber 
immer etwas skeptisch eingestellt, aber der von mit geschätzte Gast 
Yoshi Famosi hat doch im FRED 
Beitrag "[FYI] Lieferantenliste elektronische Bauelemente" eine relativ gute Liste 
(http://www.mikrocontroller.net/attachment/55437/lieferliste.pdf) von 
bevorzugten und eher lieber nicht zu verwendenden Herstellern gepostet.

Daran halte ich mich und fahre eigentlich sehr gut damit.

Mit Gruß, hth, Iwan

von Mark B. (markbrandis)


Lesenswert?

Ja, eine von irgend jemandem erstellete Liste ohne nähere Angabe von 
Hintergründen verwende ich auch jeden Tag für alle wichtigen 
Entscheidungen meines Lebens. ;-)

von Иван S. (ivan)


Lesenswert?

Mark Brandis schrieb:
> Ja, eine von irgend jemandem erstellete Liste ohne nähere Angabe von
> Hintergründen verwende ich auch jeden Tag für alle wichtigen
> Entscheidungen meines Lebens. ;-)

Die von Yoshi fein-säuberlich ausgearbeiteten Kriterien decken sich 
zumindest vollends mit den von mir gemachten Erfahrungen. So schlecht 
ist die Liste also nicht, meiner bescheidenen Meinung nach.

Iwan

von Mark B. (markbrandis)


Lesenswert?

Иван S. schrieb:
> Die von Yoshi fein-säuberlich ausgearbeiteten Kriterien decken sich
> zumindest vollends mit den von mir gemachten Erfahrungen. So schlecht
> ist die Liste also nicht, meiner bescheidenen Meinung nach.

Mag sein. Freilich müsste man eine solche Liste von Zeit zu Zeit neu 
evaluieren, denn Lieferanten/Hersteller können sich auch wieder 
verbessern (oder verschlechtern).

von Иван S. (ivan)


Lesenswert?

Mark Brandis schrieb:
> Mag sein. Freilich müsste man eine solche Liste von Zeit zu Zeit neu
> evaluieren, denn Lieferanten/Hersteller können sich auch wieder
> verbessern (oder verschlechtern).

Klar, ganz meine Meinung. Nur nachdem Yoshis durchaus informativer FRED 
ja von den Moderatoren (wahrscheinlich war's mod:RTF) gesperrt wurde, 
kann ich verstehen, dasz er (meiner Meinung nach: leider) keine Liste 
mehr postet.

Überhaupt habe ich lange nichts mehr von ihm gelesen :-(

iwan

von mndbvbhj (Gast)


Lesenswert?

Na, ja soo informativ fand ich den nicht.

Gast

von Иван S. (ivan)


Lesenswert?

mndbvbhj schrieb:
> Na, ja soo informativ fand ich den nicht.

Weswegen? Was hätte Yoshi Famosi (Gast) besser machen können? Was hat 
Dir gefehlt oder war zu kurz ausgeführt?

Interessiert mich nur so aus reinem Interesse, da mir - wie schon gesagt 
- die Liste sehr brauchbar erschien.

Mit freundlichem Gruße, Iwan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ivan, ich weiß, dass du gerade lange Weile hast, kannst du bitte
Threads anderer Leute in Ruhe lassen?  Der Thread hier war schon
mal im Off-Topic (weil er reichlich nichttechnisch wurde), durch
deine wertvollen Beiträge rutscht er gerade wieder in diese Richtung
ab.

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


Lesenswert?

@ Robert B. (robertb)

Ich hatte einmal ein ähnliches Problem. Ich musste
- Schnelle AD Wandlungen
- 10KHZ PWM mit möglichst großer Auflösung

realisieren. Ich habe mir viele CPUs angeschaut, die das können (oder 
doch nicht)

Schlussendlich habe ich mich für einen STM32F103CB entschieden. Der 
würde auch für Deine Applikation passen:
- 4 Timer, 32 Bit (jeweils 4 OC/PWM Ausgänge) und zus. 32 Bit Prescaler
- bis zu 72MHz CPU-Takt >> möglich an Timer 1 (mit internem RC bis 
48MHz)
- 12-Bit-AD Wandler
- UART hat eigenen Timer/Baudratengenerator
- 48 Pins

Einziger Nachteil:
- 3,3V, kann jedoch mit einem OPV auf 5V erhöht werden (z.B. 
MCP601...MCP604)

Ich nutzte den mit internem RC, Timer 1 mit 48MHz gespeist. Damit konnte 
ich 10 KHz PWM erzeugen und eine Auflösung von 4800 Counts je PWM Puls 
erhalten.

(andere CPU: dsPIC30, 10KHz >> aber nur 1500 Counts je PWM Puls)

Schaue mal hier ins Datenblatt:
http://www.st.com/stonline/products/literature/ds/13587.pdf
- Seite 1 Features
- Seite 19 Blockschaltbild
- Seite 20 Clock-Verteilung/Übersicht

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


Lesenswert?

Nachtrag:
Im Dokument:
http://www.st.com/stonline/products/literature/rm/13902.pdf
- Seite 258 Timer 1 Übersicht

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus Müller schrieb:

> Einziger Nachteil:
> - 3,3V, kann jedoch mit einem OPV auf 5V erhöht werden (z.B.
> MCP601...MCP604)

Zweiter Nachteil: 100 Pins.  Robert waren schon die vergleichsweise
kleinen AVRs fast zu groß, wenn man davon zwei nehmen muss.  BGA
löten ist auch nicht jedermanns Sache (und die QFP-Version natürlich
noch größer).

von Иван S. (ivan)


Lesenswert?

Jörg Wunsch schrieb:
> Ivan, ich weiß, dass du gerade lange Weile hast,

Wie kommst Du zu diesem Schluß? Ist eine Frage wie "Was hätte Yoshi 
Famosi (Gast) besser machen können? Was hat Dir gefehlt oder war zu kurz 
ausgeführt?" nicht legitim? Es gibt immer wieder 
Meinungsverschiedenheiten und unterschiedliche Geschmäcker, aber ich 
will mich eben geistig erweitern und auch andere Standpunkte 
nachvollziehen können, auch wenn sie mit meinen Vorlieben nicht 
übereinstimmen müssen.

> kannst du bitte Threads anderer Leute in Ruhe lassen?

Achso, jetzt darf ich also nur mehr in von mir gestarteten FREDs meinen 
Senf dazugeben, oder sehe ich das falsch? Ich dachte immer, der 
Hauptzweck solcher Diskussionsforen ist das gegenseitige Austauschen 
verschiedener Ansichten. Bis dato warst (und bist es ja auch immer noch) 
einer von meiner Seite aus gesehen vorbildlicher Mod.

> Der Thread hier war schon mal im Off-Topic (weil er reichlich
> nichttechnisch wurde),

Dazu kann ich nichts sagen, das war vor meiner zeit in diesem FRED.

> durch deine wertvollen Beiträge rutscht er gerade wieder in diese
> Richtung ab.

YMMD.

Mit freundlichem Gruße, Iwan

von Robert B. (robertb)


Lesenswert?

Peter Dannegger schrieb:
> Gib dochmal Butter bei die Fische, um wieviel Schritte/Microschritte
> gehts denn überhaupt?
> Du brauchst bestimmt keine 16Bit Microschritte.
>
> Ich würde die Vollschritte/Microschritte in Software machen mit nem
> Timerinterrupt. 50..100Hz Interruptrate sollten reichen.
>
> Und der andere Timer macht dann die Frequenzmessung.
>
>
> Peter

Butter? Gerne. ;-)

Eine sin-Periode (eine Umdrehung des Rotors) wird in 32 Mikroschritte 
geteilt (ergo 5bit, bzw. 8 uSteps pro Vollschritt). Getriebe ist 1:150 
und der Zeiger hat 300 Grad Bewegungsraum. Insgesamt ergeben sich also 
über den Bewegungsbereich 4000 (Mikro-)Schritte. Die Rampe fährt von 30 
uSteps/sec bis 3000 uSteps/sec.

@Markus: Der 32-Bitter klingt natürlich eindrucksvoll. Allerdings hast 
du ja schon einen Nachteil genannt bzw hat Jörg schon recht: 5V brauch 
ich leider und möchte auf Treiber verzichten, 100 pins ist dann in noch 
lötbaren Packages recht groß. Zudem noch eine Toolchain und Programmer.
/edit:
Hab jetzt gerade doch mal aus Neugier ins Datenblatt geschaut: Die teile 
sind schon eindrucksvoll. Vielleicht teste ich die doch mal bzw. bevor 
ich mich in Xmegas und AVR32 einarbeite werde ich doch wohl mal mit 
diesen Teilchen beschäftigen. Vielleicht macht es wirklich Sinn wenn es 
nicht auf Kosten ankommt mal mit ner Kanone zu schießen. ;-)

Ich gebe gerne zu, dass nicht nur praktische Erwägungen mich antreiben. 
Es hat sicher auch etwas mit einem gewissen sportlichen Ehrgeiz zu tun.

Danke an alle für die guten Antworten. Werde mich mit den Ergebnissen 
sicher melden.

Grüße
Robert

von Peter D. (peda)


Lesenswert?

Robert B. schrieb:
> Eine sin-Periode (eine Umdrehung des Rotors) wird in 32 Mikroschritte
> geteilt (ergo 5bit, bzw. 8 uSteps pro Vollschritt). Getriebe ist 1:150
> und der Zeiger hat 300 Grad Bewegungsraum. Insgesamt ergeben sich also
> über den Bewegungsbereich 4000 (Mikro-)Schritte. Die Rampe fährt von 30
> uSteps/sec bis 3000 uSteps/sec.

Wow, ich bewundere Deine Adleraugen, 4000 Teilstriche zu unterscheiden 
und dann auch noch bei der Fahrt.

Ich würde einen Sekundenzeiger als ablesbare Grenze ansehen, d.h. 60 
Teilstriche, jedoch nicht über 100. Aber selbst da hat man schon größere 
Ablesefehler durch verschiedene Blickwinkel (Parallaxenfehler).


Man muß sich nicht wundern, wenn es aufwendig wird, völlig unnütze 
Forderungen zu realisieren.

Ich kaufe auch nur ne Kaffemaschine, die auf den ml genau die 
Kaffeetasse füllen kann, auch wenn sie 2000€ kostet.
Wenn ich 100ml einstelle und es kommen nur 99ml raus, würde ich ja kurz 
vor dem Verdursten stehen.


Peter

von Robert B. (robertb)


Lesenswert?

Peter Dannegger schrieb:
> Robert B. schrieb:
>> Eine sin-Periode (eine Umdrehung des Rotors) wird in 32 Mikroschritte
>> geteilt (ergo 5bit, bzw. 8 uSteps pro Vollschritt). Getriebe ist 1:150
>> und der Zeiger hat 300 Grad Bewegungsraum. Insgesamt ergeben sich also
>> über den Bewegungsbereich 4000 (Mikro-)Schritte. Die Rampe fährt von 30
>> uSteps/sec bis 3000 uSteps/sec.
>
> Wow, ich bewundere Deine Adleraugen, 4000 Teilstriche zu unterscheiden
> und dann auch noch bei der Fahrt.
>
> Ich würde einen Sekundenzeiger als ablesbare Grenze ansehen, d.h. 60
> Teilstriche, jedoch nicht über 100. Aber selbst da hat man schon größere
> Ablesefehler durch verschiedene Blickwinkel (Parallaxenfehler).
>
>
> Man muß sich nicht wundern, wenn es aufwendig wird, völlig unnütze
> Forderungen zu realisieren.
>
> Ich kaufe auch nur ne Kaffemaschine, die auf den ml genau die
> Kaffeetasse füllen kann, auch wenn sie 2000€ kostet.
> Wenn ich 100ml einstelle und es kommen nur 99ml raus, würde ich ja kurz
> vor dem Verdursten stehen.
>
>
> Peter

Lieber Peter,

viele deiner Beiträge sind extrem interessant und hilfreich. Aber bei 
diesem Post bin ich maßlos enttäuscht:

Um bei deinem Sekundenzeiger-Beispiel zu bleiben: Ich möchte dich mal 
sehen wenn der Drehzahlmesser in deinem Auto nur noch mit 60 Schritten 
Auflösung hin- und her-tickt... Jeder der schon mal einen TICKENDEN 
Sekundenzeiger gesehen hat weiß das man SO keinen DZM baut. Guck dir mal 
auf einem Geo-Dreieck einen Winkel von 300/60=5 Grad an und überlege 
noch mal ob du das wirklich möchtest... Das man weit weniger als 4000 
Schritte ABLESEGENAUIGKEIT auflöst ist doch klar - aber ich möchte auch 
dass sich der Zeiger "ultra-smooth" fortbewegt - und nicht immer um 5 
Grad weiterrastet...

Schade - eigentlich kannst gerade du es VIEL besser.

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


Lesenswert?

@Jörg Wunsch (dl8dtl) (Moderator)
>Zweiter Nachteil: 100 Pins.

Mache Dir bitte die Mühe und lese meinen gesammten Beitrag.
Unter Vorteil steht hier 48 Pins.

Es gibt den STM auch als 36-Pinner, den aber nicht von Hand lötbar.

Siehe hier:
http://www.st.com/stonline/products/literature/ds/13587.pdf
Seite 25.

Die Kosten eines STM's (STM32F103C8) ab 3,39 EUR.

Wenn auch ein kleiner reichen sollte (STM32F100C4) ab 0,85 EUR !!!

Also unter einem EUR bei Digikey. Man muss sich ein wenig mit der 
Materie auseinandersetzen.
Unterm Strich fährt man mit einem STM32F10xxxx deutlich besser, denn man 
kann eine FW-Lib verwenden, die funktioniert mit allen Typen, also STM 
hat eine wirklich große Palette und entsprechend lässt sich auch 
Preislich einiges machen. (Fragen beim Distributor des Vertrauens)

Zu den Kosten:
- Demo-Board ca. 40-70 EUR
- JTAG Adapter (z.B. Olimex ARM-USB-OCD) ca. 60-70 EUR
- Software (Eclipse/Coudesourceruy Light/OpenOCD) 0 EUR


Besser mit einer Kanone auf einen Spatz schießen und dafür auch gleich 
beim ersten Schuss treffen

von Sven (Gast)


Lesenswert?

@Peter: Word!

4000 ist sowas von übertrieben. Wenn die 5 Grad zu grob sind, löst man 
halt 1 Grad auf, das sind immer noch nur 300 Schritte. Das sind 0,3% vom 
Endwert. Was glaubt R.B. was sein Drehzahlgeber für ne Genauigkeit 
hat...?

von Robert B. (robertb)


Lesenswert?

Sven schrieb:
> @Peter: Word!
>
> 4000 ist sowas von übertrieben. Wenn die 5 Grad zu grob sind, löst man
> halt 1 Grad auf, das sind immer noch nur 300 Schritte. Das sind 0,3% vom
> Endwert. Was glaubt R.B. was sein Drehzahlgeber für ne Genauigkeit
> hat...?

Hast du dir die Mühe gemacht meine Antwort zu lesen?

von Robert B. (robertb)


Lesenswert?

Nebenbei: Für den Return-To-Zero benutze ich Vollschritte - das sieht 
extrem schlecht aus und hört sich auch so an. Das sind 4*150*300/360=500 
Schritte - dämmert was?

Der kommerzielle Freescale-ASIC MC33977 macht nebenbei für diese 
Anwendung 3000 Schritte (24 uSteps pro Umdrehung) - ich mache nur 
deshalb 32 uSteps weil sich damit effizienter modulo rechnen läßt... 
Aber schön alles "Word!", gell?

Datenblatt des MC33977:
http://www.freescale.com/files/analog/doc/data_sheet/MC33977.pdf

Für die Zweifler hinsichtlich der PWM-Frequenz (333 kHz!!!!!):
App-Note von Atmel für den Antrieb eines Steppers mit einem tiny:
http://www.atmel-grenoble.com/dyn/resources/prod_documents/a10_automotive-mc.pdf

von Peter D. (peda)


Lesenswert?

Also was ich an echten analogen Drehzahlmessern kenne, die wackeln wie 
die Lämmerschwänze. Was auch kein Wunder ist, die Drehzahl wird ja nicht 
geregelt.

Wenn Du es keinem sagst, daß es nur 60 Schritte hat, wird es auch keinem 
auffallen. Man muß einfach nur die mechanische Dämpfung in Software 
nachbilden und da reicht eine SW-PWM völlig aus.

333kHz sind völlig übertrieben, wenn die überhaupt der Motor schafft 
(Wirbelstrom, Wicklungskapazität, Skineffekt).


Peter

von Falk B. (falk)


Lesenswert?

@  Robert B. (robertb)

>Um bei deinem Sekundenzeiger-Beispiel zu bleiben: Ich möchte dich mal
>sehen wenn der Drehzahlmesser in deinem Auto nur noch mit 60 Schritten
>Auflösung hin- und her-tickt... Jeder der schon mal einen TICKENDEN

Wie man Probleme mit HighTec löst, die man ohne sie nie hätte. ;-)

>Schritte ABLESEGENAUIGKEIT auflöst ist doch klar - aber ich möchte auch
>dass sich der Zeiger "ultra-smooth" fortbewegt - und nicht immer um 5
>Grad weiterrastet...

Für sowas nimmt man einen Servo, der hat hat keine Schritte. ;-)
Oder gleich einen stinknormalen analogen Drehzahlmesser. Was soll der 
Quark der krampfhaften Digitalisierung? Digitalefetischismus?

MfG
Falk

von spess53 (Gast)


Lesenswert?

Hi

>333kHz sind völlig übertrieben, wenn die überhaupt der Motor schafft
>(Wirbelstrom, Wicklungskapazität, Skineffekt).

Die Motoren in den originalen Teilen wahrscheinlich schon. Außerdem 
beziehen sich die ganzen Werte, wenn ich das Datenblatt vom MC33977 
richtig deute, auf direkt angetriebene Zeiger. Aber Robert hat nach 
seinen Aussagen ein 1:150 Getriebe drin.

MfG Spess

von Robert B. (robertb)


Lesenswert?

Falk Brunner schrieb:
> Für sowas nimmt man einen Servo, der hat hat keine Schritte. ;-)
>
> Oder gleich einen stinknormalen analogen Drehzahlmesser. Was soll der
>
> Quark der krampfhaften Digitalisierung? Digitalefetischismus?

Ich habs ja oben bereits geschrieben - ALLE mir bekannten Tachos 
(VW-Konzern, Mercedes, Opel) seit spätestens 2000 verwenden genau diese 
Art von Motoren - keine Servos, keine Drehspulinstrumente. Und zwar MIT 
Getriebe. Dies müsst ihr mir einfach glauben oder die Diskussion hat 
keinen Sinn...

spess53 schrieb:
> Hi
>
>>333kHz sind völlig übertrieben, wenn die überhaupt der Motor schafft
>>(Wirbelstrom, Wicklungskapazität, Skineffekt).
>
> Die Motoren in den originalen Teilen wahrscheinlich schon. Außerdem
> beziehen sich die ganzen Werte, wenn ich das Datenblatt vom MC33977
> richtig deute, auf direkt angetriebene Zeiger. Aber Robert hat nach
> seinen Aussagen ein 1:150 Getriebe drin.

Nein, der MC33977 ist defintiv für Motoren MIT Getriebe. Steht ja im 
Datenblatt "bis zu 4096 Schritte" - bei 24 uSteps pro Umdrehung macht 
der Stator demnach bis zu 170 Umdrehungen. Mit diesen Treibern läuft die 
Sache ja bereits - nur sind die Teile ziemlich groß und es reizt mich 
halt es ohne zu schaffen. Es gibt in der Tat auch Motoren mit direkt 
angetriebenem Zeiger - aber wie gesagt - solche werden in aktuellen 
Tachos NICHT verbaut.

Was ich nicht verstehe ist warum nicht akzeptiert wird dass diese Art 
von Steppern in aktuellen Tachos genau so verbaut wird und meine 
Zielsetzungen nur denen bereits existierender Lösungen entsprechen. Das 
ist kein Digitalfetischismus, keine Insellösung und keine 
wirklichkeitsfremde Vorstellung.

Grüße
Robert

von gsyg<cfbsdk (Gast)


Lesenswert?

>Ich habs ja oben bereits geschrieben - ALLE mir bekannten Tachos
>(VW-Konzern, Mercedes, Opel) seit spätestens 2000 verwenden genau diese
>Art von Motoren - keine Servos, keine Drehspulinstrumente. Und zwar MIT
>Getriebe. Dies müsst ihr mir einfach glauben oder die Diskussion hat
>keinen Sinn...

Stimmt. Dann kauf Dir einen solchen.

Gast

von Sven (Gast)


Lesenswert?

Und wofür brauchst Du jetzt 333kHz PWM-Frequenz?

von gsyg<cfbsdk (Gast)


Lesenswert?

>Nein, der MC33977 ist defintiv für Motoren MIT Getriebe. Steht ja im
>Datenblatt "bis zu 4096 Schritte" - bei 24 uSteps pro Umdrehung macht
>der Stator demnach bis zu 170 Umdrehungen. Mit diesen Treibern läuft die
>Sache ja bereits - nur sind die Teile ziemlich groß und es reizt mich
>halt es ohne zu schaffen. Es gibt in der Tat auch Motoren mit direkt
>angetriebenem Zeiger - aber wie gesagt - solche werden in aktuellen
>Tachos NICHT verbaut.

Nein, der 2,7l Reihensechszylinder ist defintiv für Motoren MIT 
Getriebe.
Mit diesem Motor läuft der Mercedes ja 240 nur sind die Teile ziemlich 
groß und es reizt mich halt es ohne zu schaffen.

Kommentar: Man kann einen Trabantmotor auch in einen Mercedes bauen, nur 
laeuft der dann eben nicht mehr 240.

</beschimpfungsmodus ein> Was glaubst Du kleiner Wicht, warum die auf 
jeden Zehntelcent achtenden Autobauer so verschwenderisch waeren, wenn 
es denn noch 0.2 Cent billiger ginge??? </beschimpfungsmodus aus>
Gast

von Robert B. (robertb)


Lesenswert?

gsyg<cfbsdk schrieb:
>
> Dummfasel blabla

Tu uns allen einen Gefallen und nimm bitte wieder deine Tabletten.

Sven schrieb:
> Und wofür brauchst Du jetzt 333kHz PWM-Frequenz?

Für genau das was in der von mir schon geposteten Atmel Application Note 
steht!!!

Zitat: "The internal inductance of a stepper motor demands as high a PWM 
signal as possible to smooth the passage of the current through the 
coil". Ist das Argument genug?

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


Lesenswert?

Das geht sicher auch ohne den Treiber, aber nicht 15 Jahre lang!

Der Tacho im Auto muss bei jeder Temperatur auch noch nach 15 Jahren 
richtig tun. Dank Verschleiß und der Langzeitwirkung der Schmierung 
benötigt der Motor nach einigen Jahren mehr Kraft, wofür eine 
Treiberstufe erforderlich ist.

Bestes Beispiel ist mein altes Auto: Vor 13 ging die Servolenkung super 
Leicht. Heute brauche ich richtig Kraft um das Lenkrad bewegen zu 
können. Der Kraufaufwand ist mit jedem Jahr stetig gestiegen.

Solche Ideen (ohne Treiberstufe), sind zwar nett, aber nicht 
Praxistauglich. So wie es aus sieht braucht jemand etwas 
Praxiserfahrung.

Also, mache es so wie die grossen und Dein Tacho wird Dir freude 
bereiten.

PS: Nimm die Kanone STM32F103, denn Du willst auch eine Kanone 
ansteuern, zwar klein, dennoch forderst Du die Auflösung. Deshalb: Dein 
Tacho ist kein Spatz, eher ein Airbus.

von Stefan V. (vollmars)


Lesenswert?

Sven schrieb:
> Und wofür brauchst Du jetzt 333kHz PWM-Frequenz?

Das frag ich mich auch die ganze Zeit.
Kannst du das erklären - oder hab ich da was nicht mitbekommen?

Gruß Stefan

von Yalu X. (yalu) (Moderator)


Lesenswert?

Nur aus Interesse: Bei einer Übersetzung von 150:1 muss der Schritt-
motor ja ganz schön rotieren, wenn der Drehzahlmesser bei schnellen
Drehzahländerungen des Automotors (bspw. beim Gasgeben im Leerlauf)
halbwegs mithalten soll, und das Anwendungsobjekt nicht gerade ein
Mercedes 240D von 1972 ist ;-)

Dass so ein Minimotor mit wenigen Polpaaren schneller dreht als ein
Standardschrittmotor, kann ich nachvollziehen. Aber wie hoch ist die
maximale Drehzahl tatsächlich?

PS: Ich frage das wirklich nur, weil es mich interessiert und nicht, um
deine Entwicklung in Frage zu stellen :)

von Robert B. (robertb)


Lesenswert?

Hallo Markus,

vielen Dank für deinen Beitrag. Was die Treiberstufe angeht muss ich dir 
jedoch wiedersprechen - habe diverse derartige Tachos schon angeschaut - 
keine Treiber - die Stepper werden direkt mit den Controllern verbunden. 
Diese wiederum hatten alle nur eine 5V Versorgung. Die Motoren sind 
gemäß Datenblatt (z.B. von Switec: 
http://www.switec.ch/downloads/switec/X25_xxx_02_SP_E.pdf) genau dafür 
vorgesehen. Der Gleichstromwiderstand liegt bei rund 290 Ohm - also ein 
Strom knapp unter 20mA - dafür sollten die Treiber des tinys reichen.

Für alle die noch einen anderen Treiber sehen wollen: von Switec selber: 
http://www.switec.ch/downloads/switec/X12_017_05_SP_E.pdf Zitat aus dem 
Datenblatt: "A microstep is an angular rotation of 1/12 deg. of the
M-S shaft or 15 deg. on the rotor shaft." Macht bei 360 Grad also auch 
wieder 24 uSteps pro Rotorumdrehung...

Die Kanone STM32F103 habe ich mir bereits fest vorgemerkt. Einen 
OpenOCD-Jtag wollte ich mir die Tage eh besorgen - werde defintiv mit 
dem Ding mal arbeiten. Bin von den Daten wirklich begeistert von dem 
Teil.

Grüße
Robert

von Robert B. (robertb)


Lesenswert?

Stefan V. schrieb:
> Sven schrieb:
>> Und wofür brauchst Du jetzt 333kHz PWM-Frequenz?
>
> Das frag ich mich auch die ganze Zeit.
> Kannst du das erklären - oder hab ich da was nicht mitbekommen?
>
> Gruß Stefan

Ja, hast du nicht. fg Begründung inkl. passender App-Note wurde von 
mir gepostet.

von spess53 (Gast)


Lesenswert?

Hi

>Steht ja im
Datenblatt "bis zu 4096 Schritte" - bei 24 uSteps pro Umdrehung macht
der Stator demnach bis zu 170 Umdrehungen.

24 Steps pro Umdrehung und 24 Positionen pro Step ergibt bei mir etwa 7 
Umdrehungen.

MfG Spess

von Robert B. (robertb)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Steht ja im
> Datenblatt "bis zu 4096 Schritte" - bei 24 uSteps pro Umdrehung macht
> der Stator demnach bis zu 170 Umdrehungen.
>
> 24 Steps pro Umdrehung und 24 Positionen pro Step ergibt bei mir etwa 7
> Umdrehungen.
>
> MfG Spess

Ok, noch mal langsam:

Bei meinem konkreten Motor (ist ja abhängig von dem Getriebe und den 
Anschlägen) macht der ASIC ziemlich genau 3000 Schritte - eben 
24*150*(300/360). Oh wunder macht er bei meinem eigenen Code mit 32 
uSteps/Umdrehung 4000 statt 3000 Schritte.

Deine Einlassung kann ich hingegen nicht mal nachvollziehen - schätze zu 
scheiterst an den zugegebenermaßen durcheinandergewürfelten 
Bezeichnungen. Die 24 uSteps pro Statorumdrehung sind denke ich klar - 
die 4096 Steps im Datenblatt beziehen sich auf die Fähigkeit dem ASIC 
per SPI zu sagen "gehe zu 1745" und das Ding dreht dir den Motor (MIT 
Getriebe) dann an diese Position (des Zeigers). Dann sagste ihm "gehe zu 
1985" und das Ding fährt den Zeiger an die Position, sprich dreht den 
Stator exakt 10 Umdrehungen (=10 sin/cos Perioden) bzw. 240 uSteps 
weiter.

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


Lesenswert?

@Robert B. (robertb)

- Als "Mini-Verstärker" kann der 4-Fach OPV MCP604 verwendet werden, der 
kann 30mA und ist sehr schnell und relativ günstig (ab ca. 0,62 EUR). Es 
braucht dann zwar diesen Chip extra neben der CPU, dafür ist der auch 
Pinkompatibel mit dem LM324 oder vielen anderen. Also falls der doch 
nicht passen sollte, gibt es sicher hunterde andere zur Auswahl.
- Oder man nimmt ein 74xxx Logik-IC, das die Konvertierung von 3,3V auf 
5V macht.
- Oder, der STM32, Timer 1 hat auch "Negativ-Ausgänge". Man könnte z.B. 
die Positiv-Ausgänge als "OpenCollector" programmieren, mit den 
Negativ-Ausgängen einen (oder 4) BSS84 ansteuern, der wiederum an +5V 
hängt und so die gewünschte +5V schaltet.

Am besten finde ich die erste Variante. Bei der zweiten muss man erst 
mal einen finden, der 3,3V kompatibel ist und auch 20mA Ausgang kann.

Hier hab ich beschrieben wie man Eclipse und Co einrichtet.
Beitrag "Re: OpenOCD für Eclipse mit ARM Cortex-M3"

Mich freut es, wenn ich wieder jemanden für einen STM32 gewinnen konnte, 
denn bei größeren Stückzahlen die ST produziert, wird der Preis auch für 
mich irgendwann mal günstiger ...

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.