Forum: Analoge Elektronik und Schaltungstechnik E-Magnet mit Sinus steuern


von Franz H. (franz123)


Lesenswert?

Hallo liebes Forum,
für ein Feedersystem 
(https://drive.google.com/drive/folders/1q721TQeEy406_zBWGDlK-xd7IbwApYnK?usp=sharing) 
benötige ich eine Steuerung.
Meine derzeite Steuerung funktiert relativ einfach: Ein Arduino erzeugt 
ein PWM Signal (60-120Hz). Mit diesem gehe ich in einen Transistor der 
mir dann ein MOSFET-Modul (https://amzn.to/3q1PTAT) ansteuert. Der 
MOSFET hängt an meinem Labornetzteil und steuert den E-Magnet. Das 
funktioniert soweit auch recht gut.
Leider ist aber die Bewegung des Feeders recht ruppig da der MOSFET 
einfach nur Aus-Einschlatet. Ich hätte gerne eine saubere Sinusspannung 
am E-Magnet.
Nun habe ich mir ein solches Gerät besorgt: (https://amzn.to/43AaidZ).
Ich dachte wenn ich damit den MOSFET betreibe bekomme ich einen Sinus am 
Ausgang. Hat leider nicht wirklich funktioniert.
Es gibt auch fertige Steuerungen zu kaufen: 
(https://www-autodev-com.translate.goog/vibratory-feeder-amplitude-controllers?_x_tr_sl=auto&_x_tr_tl=de&_x_tr_hl=de).
Ich frage mich was diese anders machen.
Vielleicht kann mir hierzu jemand weiterhelfen bzw. vielleicht kennt 
jemand solche System und deren Steuerung.
Vielen Dank.

von Falk B. (falk)


Lesenswert?

Franz H. schrieb:
> Hallo liebes Forum,
> für ein Feedersystem
> 
(https://drive.google.com/drive/folders/1q721TQeEy406_zBWGDlK-xd7IbwApYnK?usp=sharing)
> benötige ich eine Steuerung.

Wo ist der Schaltplan sowie die Beschreibung des Magneten?

> Leider ist aber die Bewegung des Feeders recht ruppig da der MOSFET
> einfach nur Aus-Einschlatet. Ich hätte gerne eine saubere Sinusspannung
> am E-Magnet.

Wozu? Tun dir die armen Schrauben leid?

> Nun habe ich mir ein solches Gerät besorgt: (https://amzn.to/43AaidZ).
> Ich dachte wenn ich damit den MOSFET betreibe bekomme ich einen Sinus am
> Ausgang. Hat leider nicht wirklich funktioniert.

Logisch. Einen LinearVerstärker baut man nicht einfach mal so.
Bracht man hier aber nicht. Man will den Magneten eher quasiresonant mit 
einer Halb- oder Vollbrücke ansteuern. Siehe H-Brücken Übersicht.

> Ich frage mich was diese anders machen.

Die verändern die Frequenz und das Tastverhältnis, um optimale 
Ansteuerung an verschiedenen Magnetsystemen zu erhalten. Das kann dein 
Arduino auch, wenn man ihn richtig programmiert. Sogar sinusartig ohne 
Linearendstufe.

https://www.mikrocontroller.net/articles/Arduino#Siehe_auch
Beitrag "Re: Arduino Micro SPWM"

von Franz H. (franz123)


Lesenswert?

> Wo ist der Schaltplan sowie die Beschreibung des Magneten?
Leider habe ich keinen Schaltplan. Der Aufbau ist aber recht einfach. 
Arduino - Transistor - Mosfet / Magnet wird über Labornetzteil versorgt.
Zusätzlich noch eine Freilaufdiode um den Magnet. Die Frequenz wird über 
einen Poti eingestellt.
Magnet: https://amzn.to/473CuZB

> Wozu? Tun dir die armen Schrauben leid?
Ja ein bischen schon...
Das Problem ist eher die grobe Bewegung. Kleine Schrauben Springen gerne 
mal von der Bahn herunter. Wenn ich die Frequenz hinaufdrehe (also 
kleine Mikrosprünge mache) bewegen sich die Schrauben nicht und bleiben 
auf ihrer Position liegen. Wenn ich mit der Frequenz herunter gehe 
bewegen sie sich zwar aber eben sehr ruppig (große Sprünge).

> Logisch. Einen LinearVerstärker baut man nicht einfach mal so.
> Bracht man hier aber nicht. Man will den Magneten eher quasiresonant mit
> einer Halb- oder Vollbrücke ansteuern. Siehe H-Brücken Übersicht.
Ich verstehe nicht ganz was Sie mir damit sagen wollen.

> Die verändern die Frequenz und das Tastverhältnis, um optimale
> Ansteuerung an verschiedenen Magnetsystemen zu erhalten. Das kann dein
> Arduino auch, wenn man ihn richtig programmiert. Sogar sinusartig ohne
> Linearendstufe.

Die Frequen ändere ich auch. Was meinst du mit Tastverhältnis?
Hier mein Code:
1
const int outputPin = 13; 
2
int frequency = 1;  
3
const int potPin = A0;
4
5
void setup() {
6
  pinMode(outputPin, OUTPUT); 
7
  Serial.begin(9600);
8
}
9
10
void loop() {
11
  int potValue = analogRead(potPin);
12
  int frequency = map(potValue, 0, 1023, 60, 120);
13
  
14
  int periodDuration = 1000 / frequency;  // Berechne die Periodendauer in Millisekunden
15
16
  digitalWrite(outputPin, HIGH);  // Setze den Ausgang auf HIGH
17
  delay(periodDuration / 2);  // Halte das Signal für die Hälfte der Periodendauer auf HIGH
18
  digitalWrite(outputPin, LOW);  // Setze den Ausgang auf LOW
19
  delay(periodDuration / 2);  // Halte das Signal für die andere Hälfte der Periodendauer auf LOW
20
21
  Serial.println(frequency);
22
}

Vielen Dank für den Link. Warum funktioniert das mit diesem Gerät nicht 
(https://amzn.to/3Q86iyh)? Das Ding erzeugt mir ja schon meinen Sinus. 
Wenn ich jetzt damit noch größere Ströme damit steuern könnte (MOSFET?) 
wäre das ja genau das was ich benötige. Dan würde ich mir die ganze 
Programierung sparren und hätte eine fast fertige Lösung.

von Max M. (jens2001)


Lesenswert?

1. Einen Sinus brauchst du nicht.

2. Dein Topfmagnet ist suboptimal weil die Kraft sehr stark vom Abstand 
abhängt. Bei zu großem Abstand arbeitet er inefizient, bei zu geringem 
abstand schlägt die gegenplatte auf (das kriegst du auch nicht durch 
Sinus weg).

3 Durch die Art der Aufhängung ist der Abstand von der Beladung des 
Feeders abhängig.

Du brauchst ein System ähnlich wie ew bei (Tiefton) Lautsprechern 
verwendet wird.

von Franz H. (franz123)


Lesenswert?

> 2. Dein Topfmagnet ist suboptimal weil die Kraft sehr stark vom Abstand
> abhängt. Bei zu großem Abstand arbeitet er inefizient, bei zu geringem
> abstand schlägt die gegenplatte auf (das kriegst du auch nicht durch
> Sinus weg).
Ja, du hast recht. Wenn man Bilder solcher Maschinen sieht, haben diese 
andere Magnete. Ich hoffe aber, dass es auch mit meinem funktioniert. 
Diese sind leicht erhältlich und günstig in der Anschaffung.
Industrielle Maschinen haben einen Abstand zum Magneten von etwa 1,2 mm. 
Wenn ich diesen bei meinem einstelle, funktioniert es grundsätzlich 
nicht so schlecht.

> 3 Durch die Art der Aufhängung ist der Abstand von der Beladung des
> Feeders abhängig.
Korrekt! Vielleicht muss ich einfach noch mehr Federn einbauen. Dann 
könnte ich auch noch den Abstand zum Magnet verringern. Industrielle 
Maschinen sind jedoch auch so aufgehängt.

von Michael B. (laberkopp)


Lesenswert?

Franz H. schrieb:
> Ich dachte wenn ich damit den MOSFET betreibe bekomme ich einen Sinus am
> Ausgang.

Nein, natürlich nicht, der MOSFET leitet das Signal nur sehr unlinear 
verzerrt weiter und leitet Strom nur in 1 Richtung.

Je nach Leistung der Magnetspule geht statt diesen teuren Rüttlern auch 
ein Audioverstärker an deinem Arduino oder dem Funktionsgenerator.

Audioverstärker leiten (normalerweise, es gibt welche DC coupled) keine 
Gleichspannung weiter, das passt auch zum PWM vom Arduino, aber 
vielleicht braucht dein Experiment einen Gleichspannungsoffset.

von Hp M. (nachtmix)


Lesenswert?

Warum nimmt man nicht einfach einen Unwuchtmotor?

von Franz H. (franz123)


Lesenswert?

> Je nach Leistung der Magnetspule geht statt diesen teuren Rüttlern auch
> ein Audioverstärker an deinem Arduino oder dem Funktionsgenerator.
Erzähl mir mehr davon wie du das meinst. Diesen Verstärker hätte ich 
zuhause (https://amzn.to/3Q7XWa3)
Also PWM vom Arduino in den Verstärker? Was wäre der Vorteil zum Mosfet?

> Warum nimmt man nicht einfach einen Unwuchtmotor?
Der Vorteil mit Magnet ist eben genau der das man die Frequenz und 
Spannung auf die jeweiligen Gegebenheiten einstellen kann.

von Rainer W. (rawi)


Lesenswert?

Franz H. schrieb:
> Meine derzeite Steuerung funktiert relativ einfach: Ein Arduino erzeugt
> ein PWM Signal (60-120Hz). ...
> Leider ist aber die Bewegung des Feeders recht ruppig da der MOSFET
> einfach nur Aus-Einschlatet. Ich hätte gerne eine saubere Sinusspannung
> am E-Magnet.

Den E-Magneten interessiert nicht, ob die Spannung eine Sinusform 
aufweist. Die Kraft hängt vom Strom ab. Mit PWM bist du schon richtig 
davor. Die Spule glättet den Strom sowieso. Du musst das PWM-Signal nur 
passend modulieren. Die Frequenz solltest du allerdings einen Faktor 
20..100 höher wählen - kommt auf die Induktivität deines Magneten an.

von Michael B. (laberkopp)


Lesenswert?

Franz H. schrieb:
> Also PWM vom Arduino in den Verstärker?

Es lohnt sich, die PWM vorher zu filtern

https://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM

> Was wäre der Vorteil zum Mosfet?

Dass es funktioniert ?

von Falk B. (falk)


Lesenswert?

Franz H. schrieb:
>> Wo ist der Schaltplan sowie die Beschreibung des Magneten?
> Leider habe ich keinen Schaltplan. Der Aufbau ist aber recht einfach.
> Arduino - Transistor - Mosfet / Magnet wird über Labornetzteil versorgt.
> Zusätzlich noch eine Freilaufdiode um den Magnet. Die Frequenz wird über
> einen Poti eingestellt.

Na immerhin.

>> Wozu? Tun dir die armen Schrauben leid?
> Ja ein bischen schon...
> Das Problem ist eher die grobe Bewegung. Kleine Schrauben Springen gerne
> mal von der Bahn herunter. Wenn ich die Frequenz hinaufdrehe (also
> kleine Mikrosprünge mache) bewegen sich die Schrauben nicht und bleiben
> auf ihrer Position liegen. Wenn ich mit der Frequenz herunter gehe
> bewegen sie sich zwar aber eben sehr ruppig (große Sprünge).

Das liegt dann aber auch an der Mechanik deines Magneten und dem 
angeschlossenen Resonator.

>> Logisch. Einen LinearVerstärker baut man nicht einfach mal so.
>> Bracht man hier aber nicht. Man will den Magneten eher quasiresonant mit
>> einer Halb- oder Vollbrücke ansteuern. Siehe H-Brücken Übersicht.
> Ich verstehe nicht ganz was Sie mir damit sagen wollen.

Dann musst du es nochmal lesen und nachdenken.

>> Die verändern die Frequenz und das Tastverhältnis, um optimale
>> Ansteuerung an verschiedenen Magnetsystemen zu erhalten. Das kann dein
>> Arduino auch, wenn man ihn richtig programmiert. Sogar sinusartig ohne
>> Linearendstufe.
>
> Die Frequen ändere ich auch. Was meinst du mit Tastverhältnis?

Eben jenes! Siehe PWM.

> Hier mein Code:const int outputPin = 13;

Jaja, Makers Premium Software ;-)

Deine Takterzeugung wird duch die dauernde Ausgabe auf der seriellen 
Schittstelle gestört. Wieviel ist unklar.
Für einen einfachen Test mag es reichen. Wenn man es besser machen will, 
nimmt man Timer 1 und konfiguriert die Output Compare Ausgänge. Als 
schnelle Verbesserung kann man erstmal die dauernde Ausgabe weglassen.

> Vielen Dank für den Link. Warum funktioniert das mit diesem Gerät nicht
> (https://amzn.to/3Q86iyh)? Das Ding erzeugt mir ja schon meinen Sinus.

Weil ein einzelner Mosfet ohne passende Beschaltung kein 
Linearverstärker ist! Schrieb ich bereits! Und deine Zauberkiste spukt 
ein analoges Sinussignal aus. Das kann nur ein Linearverstärker 
verstärken!

> Wenn ich jetzt damit noch größere Ströme damit steuern könnte (MOSFET?)
> wäre das ja genau das was ich benötige. Dan würde ich mir die ganze
> Programierung sparren und hätte eine fast fertige Lösung.

Dann kauf dir einen Linearverstärker und sei glücklich.

https://www.ebay.de/itm/125683687502

von Falk B. (falk)


Lesenswert?

Michael B. schrieb:
>> Also PWM vom Arduino in den Verstärker?
>
> Es lohnt sich, die PWM vorher zu filtern

Nö. Man geht direkt digital auf eine digitale Endstufe. Reicht hier 
vollkommen aus.

von Max M. (jens2001)


Lesenswert?

Michael B. schrieb:
>> Also PWM vom Arduino in den Verstärker?
>
> Es lohnt sich, die PWM vorher zu filtern

Typiscer Labekopp BULLSHIT
Er will einen FET ansteuern!
Er will ABSOLUT KEINEN SINUS AM GATE!!!

von Enrico E. (pussy_brauser)


Lesenswert?

Franz H. schrieb:
> Ein Arduino erzeugt ein PWM Signal (60-120Hz).

Ist das die Trägerfrequenz, oder schon das aufmodulierte Sinussignal?

Bei einer Trägerfrequenz von 60Hz ist es normal, das der Magnet ruckelig 
arbeitet. Da nützt auch die Selbstglättung der Induktivität kaum.

Eine 1kHz Trägerfrequenz mir einem aufmodulierten Wunschsinus läuft da 
schon ruhiger.

von Franz H. (franz123)


Lesenswert?

Ein weiterer Punkt: Das Magnetische Feld sollte so schnell wie möglich 
abgebaut und aufgebaut werden. Ich habe das Gefühl das sich die 
Metallplatte magnetisiert und dadurch die Platte immer näher an den 
Magnet wandert bis sie zusammenstoßen.

Es gibt Industielle "Bowl-Feeder" die mit Gleichspannung aber auch 
welche die mit Wechselspannung arbeiten. Daraus schließe ich das ich 
eigentlich keinen Sinus benötige.

> Ist das die Trägerfrequenz, oder schon das aufmodulierte Sinussignal?
Dies ist die Frequenz mit der der Magnet gesteuert wird (einfaches PWM).

Ich werde versuchen mehr Federn einzubauen damit das ganze noch steifer 
wird. Ich befürchte nur das ich dann mit meinen 12V bzw. 24V an die 
Grenze komme.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hier ist so ein kleiner Generator für PWM mit Sinusmodulation mit AVR. 
Am Ausgang ist eine H-Brücke, die auch deinen Magneten treiben kann:
https://www.schoeldgen.de/avr/
Scrolle runter bis zum 'Variable frequency drive with Tiny 25/45/85 ( C 
)'.

von Rainer W. (rawi)


Lesenswert?

Michael B. schrieb:
> Es lohnt sich, die PWM vorher zu filtern

Du machst deinem Nick wieder alle Ehre.

Filtern tut eine Spule von selbst, wenn die Frequenz geeignet gewählt 
ist.

von Falk B. (falk)


Lesenswert?

Franz H. schrieb:
> Ein weiterer Punkt: Das Magnetische Feld sollte so schnell wie möglich
> abgebaut und aufgebaut werden.

Jain. Was man da eher braucht ist eine bipolare Ansteuerung, um dem nahe 
zu kommen. Ein einzelner MOSFET kann das nicht, dazu braucht es eine 
H-Brücke. Sagte ich schon mehrfach.

> Ich habe das Gefühl das sich die
> Metallplatte magnetisiert und dadurch die Platte immer näher an den
> Magnet wandert bis sie zusammenstoßen.

Gefühle sind was für Frauen und das Brigitte-Forum ;-)
Männer und vor allem technisch arbeitende Menschen sollten WISSEN! Das 
kann man durch MESSEN erreichen.

> Es gibt Industielle "Bowl-Feeder" die mit Gleichspannung aber auch
> welche die mit Wechselspannung arbeiten. Daraus schließe ich das ich
> eigentlich keinen Sinus benötige.

Kann sein. Die mit Gleichspannung haben die Ansteuerung halt im Gehäuse. 
Direkt mit Gleichstrom kann man keine Vibrationen erzeugen, wenn man mal 
vom mechanischen Selbstunterbrecher absieht.

>> Ist das die Trägerfrequenz, oder schon das aufmodulierte Sinussignal?
> Dies ist die Frequenz mit der der Magnet gesteuert wird (einfaches PWM).

Ja, aber halt nicht bipolar. Du schaltest den Magneten ein, der zieht 
an. Bei Ausschalten bleibt der wegen der Freilaufdiode und der 
gespeicherten Magnetenergie recht lange angezogen, das Magnetfeld ändert 
sich nur wenig. Eine bipolare Ansteuerung mit der gleichen Spannung kann 
da DEUTLICH mehr.

> Ich werde versuchen mehr Federn einzubauen damit das ganze noch steifer
> wird.

Nein! Das ist der falsche Weg! Siehe oben!

> Ich befürchte nur das ich dann mit meinen 12V bzw. 24V an die
> Grenze komme.

Die Grenze liegt hier, wie in den meisten Fällen, eher im vorhanden 
Wissen.
Dort musst du ansetzen.

Beschaff dir einen 2 Kanaligen, digitalen Motortreiber. AKA Shield. Den 
klemmst du an die zwei PWM-Ausänge von Timer 1 am Arduino. Auf die 
Software habe ich schon verwiesen. Die kann man noch etwas anpassen.

Für den Anfang sollte der hier reichen.

https://www.reichelt.de/entwicklerboards-motorsteuerung-2-fach-l298n-debo-drv1-l298n-p282644.html?

von Rainer W. (rawi)


Lesenswert?

Falk B. schrieb:
> Bei Ausschalten bleibt der wegen der Freilaufdiode und der
> gespeicherten Magnetenergie recht lange angezogen, das Magnetfeld ändert
> sich nur wenig.

An Stelle der Freilaufdiode könnte man Zener-Dioden verwenden. Das würde 
die Abklingzeit des Stromes schon deutlich verkürzen.

von Franz H. (franz123)


Lesenswert?

> Gefühle sind was für Frauen und das Brigitte-Forum ;-)
> Männer und vor allem technisch arbeitende Menschen sollten WISSEN! Das
> kann man durch MESSEN erreichen.

Auch Männer haben Gefühle ;-)
Ich wüsste jetzt nicht wie ich das messen könnte....

> Ja, aber halt nicht bipolar. Du schaltest den Magneten ein, der zieht
> an. Bei Ausschalten bleibt der wegen der Freilaufdiode und der
> gespeicherten Magnetenergie recht lange angezogen, das Magnetfeld ändert
> sich nur wenig. Eine bipolare Ansteuerung mit der gleichen Spannung kann
> da DEUTLICH mehr.

Jetzt hat es Klick gemacht! Ein euphorisches Glücksgefühl überströmt 
soeben meinen Körper ;-) Das könnte tatsächlich die Lösung sein....

> Beschaff dir einen 2 Kanaligen, digitalen Motortreiber.

Das Ding habe ich zuhause liegen und wird bei zeiten gleich eingebaut.

Vielen lieben Dank für die zahlreichen Antworten. Ich werde das nun 
testen und ein Feedback geben.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Anbei die angepasste Variante. Ich habe die PWM-Frequenz auf ~15kHz 
vermindert, das reicht hier locker. Die Einstellung von Frequenz und 
Amplitude erfolgt über die Analogeingänge A0 und A1. Die beiden 
Arduino-Ausgänge 9 und 10 gehen an den Treiber. Das Programm wirde mit 
einem Arduion UNO getestet, darauf sind auch die Ausgänge eingestellt. 
Bei einem anderen Arduino muss man das anpassen!

von Franz H. (franz123)


Lesenswert?

Hallo Falk,
Ähmmmm... was soll ich sagen? Ich hab den Code auf den Arduino geflasht 
und es hat sofort geklappt. Jetzt muss ich noch etwas mit den Federn 
experimentieren. Der Magnet hat richtig Saft.
Nachdem ich jetzt den halben Vormittag/Nachmittag damit verbracht habe 
den Code so halbwegs zu verstehen, stelle ich mir das in etwa so vor:
Es wird mit einer gewissen Abtastrate Werte aus dem Array sinus[256] 
ausgelesen und als PWM-Wert an den Ausgängen 9 und 10 geschrieben.

ATOMIC_BLOCK(ATOMIC_RESTORESTATE): Habe ich noch nie gehört. Aber soweit 
ich nun recherchiert habe müsste es sich hierbei um ein Makro handeln 
das verhindert, dass Interrupts gleichzeitig auf eine Variable zugreifen 
können.

void demo(void): Wo diese Prozetur gerufen wird ist mir ein Rätsel. Ich 
denke diese ist nur zu Testzwecken mit dabei. Dann würde auch der Name 
Sinn ergeben.

ISR(TIMER1_CAPT_vect): Jedes mal wenn es wieder so weit ist einen Wert 
auf die Ausgänge zu schreiben wird diese Routine aufgerufen. Was auch 
immer das alles bedeutet (OCR1A = ( 
128+(((int8_t)pgm_read_byte(&sinus[i>>8])*(int16_t)amplitude)>>8)) << 
SHIFT;) ;-)

TIMER1_CAPT_vect: Hier dürfte es sich um eine im Arduino fix 
implementierte Funktionen handeln. Diese wird beim Überlauf von Timer1 
ausgeführt.

Vielleicht kannst du mir noch verraten warum die Sinus Werte bis 127.

Das was du hier produzierst geht etwas über meine Vorstellungskraft 
hinaus. Wirklich tiefgründig bin ich nie in die Materie Microcontroller 
eingestiegen. Ich denke da fehlen mir einfach sehr viel Grundlagen. 
Meine Prioritäten und mein Wissensstand liegt auch eher im mechanischen 
Bereichen. Elektronik ist bei meinen Projekten eher ein nettes übel das 
eben auch dazu gehört. Das du hier so etwas frei zur Verfügung stellst 
ist wirklich Großartig. Ich möchte mein Projekt auf Hackaday zeigen. Für 
den Code werde ich auf diesen Beitrag verlinken. Vielen Dank.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Franz H. schrieb:
> Diese wird beim Überlauf von Timer1
> ausgeführt.

Nicht Überlauf, sondern Capture Interrupt, sagt ja auch der Name. Mehr 
zur Capture Funktion des Timers im Datenblatt des Mega328.

Franz H. schrieb:
> Vielleicht kannst du mir noch verraten warum die Sinus Werte bis 127.

Das ist Geschmackssache. Falk hat sich für den Wertebereich von -127 bis 
127 entschieden, das sind 256 Werte. Man könnte auch 0-255 wählen.

Franz H. schrieb:
> Das was du hier produzierst geht etwas über meine Vorstellungskraft
> hinaus.

Ich finds cool. Und du hast was zum Lernen. Wer da überhaupt eine -1 
vergibt, dem ist nicht zu helfen. Ich habs mal wieder hochgedrückt.

: Bearbeitet durch User
von Franz H. (franz123)


Lesenswert?

> Ich finds cool. Und du hast was zum Lernen. Wer da überhaupt eine -1
> vergibt, dem ist nicht zu helfen. Ich habs mal wieder hochgedrückt.
Ich finds auch top. Hat mir sehr weiter gefolfen und mich den halben 
Nachmittag beschäftigt.

von Falk B. (falk)


Lesenswert?

Franz H. schrieb:
> Hallo Falk,
> Ähmmmm... was soll ich sagen? Ich hab den Code auf den Arduino geflasht
> und es hat sofort geklappt. Jetzt muss ich noch etwas mit den Federn
> experimentieren. Der Magnet hat richtig Saft.

Schön zu hören.

> Es wird mit einer gewissen Abtastrate Werte aus dem Array sinus[256]
> ausgelesen und als PWM-Wert an den Ausgängen 9 und 10 geschrieben.

Genau. Die GEschindigkeit des Durchlaufs durch die Tabelle wird durch 
die Variable frequenz bestimmt. Das ist ein DDS Algorithmuns.

> ATOMIC_BLOCK(ATOMIC_RESTORESTATE): Habe ich noch nie gehört. Aber soweit
> ich nun recherchiert habe müsste es sich hierbei um ein Makro handeln
> das verhindert, dass Interrupts gleichzeitig auf eine Variable zugreifen
> können.

Korrekt. Damit wird sicher gestellt, daß der Zugriff nicht halb 
verstümmelt wird und komische Effekte erzeugt. Eben ein atomarer 
Zugriff, siehe Interrupt.

> void demo(void): Wo diese Prozetur gerufen wird ist mir ein Rätsel.

Nirgendwo. Das war mal in der ersten Version in loop drin.

> Ich
> denke diese ist nur zu Testzwecken mit dabei. Dann würde auch der Name
> Sinn ergeben.

BINGO!

> ISR(TIMER1_CAPT_vect): Jedes mal wenn es wieder so weit ist einen Wert
> auf die Ausgänge zu schreiben wird diese Routine aufgerufen.

Korrekt.

> Was auch
> immer das alles bedeutet (OCR1A = (
> 128+(((int8_t)pgm_read_byte(&sinus[i>>8])*(int16_t)amplitude)>>8)) <<
> SHIFT;) ;-)

Sieht kompliziert aus, ist es aber nicht. Es wird ein Wert aus der 
Sinustabelle gelesen, mit dem Wert amplitude multiplizert, dann wieder 
um 8 Stellen nach rechts geschoben, sprich durch 256 dividiert, dann das 
auf 128 addiert und abschließend um 2 Bit nach rechts geschoben, sprich 
mit 4 multipliziert. Das wird gemacht, weil die Periodendauer 1024 Takte 
lang ist, sprich die PWM hat hier 10 Bit Auflösung. Im Original waren es 
nur 8 Bit mit 256 Takten, dafür halt 4fache Frequenz. Die brauchst du 
hier aber nicht, die macht nur unnötig Stress, Verlustleistung im 
Treiber und ggf. EMV-Probleme.

> TIMER1_CAPT_vect: Hier dürfte es sich um eine im Arduino fix
> implementierte Funktionen handeln. Diese wird beim Überlauf von Timer1
> ausgeführt.

Fast. Es ist das Erreichen vom variablen Endwert ICR1, welcher die 
Periodendauer der PWM bestimmt. Wirkt praktisch gleich, nur mit dem 
Unterschied, daß man mit ICR1 die Periodendauer einstellen kann.

> Vielleicht kannst du mir noch verraten warum die Sinus Werte bis 127.

Weil das auf einer 8-Bit PWM basiert, welche Werte von 0-255 ausgeben 
kann. Die Mitte habe ich auf 128 festgelegt.

von Falk B. (falk)


Lesenswert?

Matthias S. schrieb:
> Ich finds cool. Und du hast was zum Lernen. Wer da überhaupt eine -1
> vergibt, dem ist nicht zu helfen. Ich habs mal wieder hochgedrückt.

Mein Hate-Boys, die können nicht anders ;-)

von Rainer W. (rawi)


Lesenswert?

Falk B. schrieb:
> Ich habe die PWM-Frequenz auf ~15kHz
> vermindert, das reicht hier locker.

15kHz ist wohl etwas übertrieben. Wozu soll das gut sein?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Rainer W. schrieb:
> Wozu soll das gut sein?

Anti-Pieps ist z.B. ein Argument. mit 7,8kHz kanns unangenehm werden. Je 
tiefer die Wiederholfrequenz, umso weniger glättet auch die Induktivität 
des E-Magnets.

von Rainer W. (rawi)


Lesenswert?

Matthias S. schrieb:
> Je tiefer die Wiederholfrequenz, umso weniger glättet auch die Induktivität
> des E-Magnets.

Die Induktivität sieht nicht gerade nach 1mH aus.

Vielleicht gibt es (außer >100Mb-Videos) noch ein paar Daten zum Magnet 
(Induktivität evtl. in Abhängigkeit von der Frequenz, Typenbezeichnung, 
Datenblatt) und Schwingungseigenschaften vom Aufbau.

von Falk B. (falk)


Lesenswert?

Rainer W. schrieb:
> Vielleicht gibt es (außer >100Mb-Videos) noch ein paar Daten zum Magnet
> (Induktivität evtl. in Abhängigkeit von der Frequenz, Typenbezeichnung,
> Datenblatt) und Schwingungseigenschaften vom Aufbau.

Das Problem wurde überaus zufriedenstellend gelöst.

von Carypt C. (carypt)


Lesenswert?

Michael B. schrieb:
> Franz H. schrieb:
>> Ich dachte wenn ich damit den MOSFET betreibe bekomme ich einen Sinus am
>> Ausgang.
>
> Nein, natürlich nicht, der MOSFET leitet das Signal nur sehr unlinear
> verzerrt weiter und leitet Strom nur in 1 Richtung.

also ich habe gerade in wikipedia gelesen , daß feldeffekttransitoren 
strom auch in beide richtungen leiten lassen. steht da so. 
https://de.wikipedia.org/wiki/Transistor#Feldeffekttransistor  der 6.te 
satz .

ich hab ja keine ahnung davon.

von Falk B. (falk)


Lesenswert?

Carypt C. schrieb:
>> Nein, natürlich nicht, der MOSFET leitet das Signal nur sehr unlinear
>> verzerrt weiter und leitet Strom nur in 1 Richtung.
>
> also ich habe gerade in wikipedia gelesen , daß feldeffekttransitoren
> strom auch in beide richtungen leiten lassen. steht da so.
> https://de.wikipedia.org/wiki/Transistor#Feldeffekttransistor  der 6.te
> satz .

Stimmt, aber

> ich hab ja keine ahnung davon.

In der Tat. Wenn gleich ein MOSFET Strom über Drain-Source in beiden 
Polaritäten leiten kann, so kann er das mal sicher NICHT in einer 
einfachen Verstärkerstufe mit nur einem MOSFET (Einquadrantensteller). 
Dazu braucht es mindestens eine Halbbrücke und eine induktive Last.

von Michael B. (laberkopp)


Lesenswert?

Carypt C. schrieb:

> ich hab ja keine ahnung davon.

Du sagst es.

> also ich habe gerade in wikipedia gelesen , daß feldeffekttransitoren
> strom auch in beide richtungen leiten lassen.

Überraschung: es kommt auf die Schaltung an. In seiner eben nicht

Ist zu hoch für dich, klar.

Und dann gibt es noch die ärgerliche Body-Diode bei vertikalen MOSFETs.

von Carypt C. (carypt)


Lesenswert?

ok, danke

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.