Attiny26 PWM verständinis-problem

jaimie1990

Neues Mitglied
09. Dez. 2010
3
0
0
Sprachen
Hallo,
ich habe vor wenigen Wochen angefangen in BasCom rumzuexperimentieren, um ein Projekt zu realisieren.

Projekt:
Eine Gitarre soll selbstständig Akkorde spielen. Dazu habe ich hubmagnete verwendet die auf die verschieden Saiten der Giarre drücken. (Ingesamt 6 Saiten, 10 Hubmagnete). Mit dieser Konstruktion kann man dann mittels Schalter zwischen 3 Lieder auswählen.
Verschiedene Akkorde erhält man indem jeweils eine andere Kombination an Magneten gedrückt wird. 8 der 10 Magnete sind an Porta angeschlossen, 2 an portb.
Ausserdem habe ich MosFets mit Logiclevel benutzt.

So weit so gut. Das Problem ist, dass die Magnete sehr klein sein müssen, da sie sonst nicht nebeneinander passen. Aber kleine Magnete heisst kleine Kraft. Somit sind die Hubmagnete nicht stark genug um die Saiten runterzudrücken (Haltekraft ist aber gross genug).

Da kam mir der Gedanke PWM. So kann man doch eine grössere Kraft für eine sehr kurze Zeit erhalten, und wenn der Magnet seine Endposition erhalten hat, die Kraft wieder runterstellen?

Nun weiss ich leider nicht wie das PWM genau funktioniert, da ich wie bereits erwähnt absoluter Anfänger bin :/. Ich weiss, es gibt auch schon BEiträge zum Thema PWM und Attiny26, sie hab ich mir auch angeschaut, doch ich verstehe das Prinzip nicht richtig. Kann man überhaupt die 10 Magnete mit PWM ansteuern? Wozu dienen Ocr1a und Ocr1b genau? Um einen Magneten zu aktivieren kann man nicht mehr porta.0 = 1 schreiben? ICh weiss einfach nicht wie ich das Problem lösen kann :(

Hab mir auch schon das Datenblatt vom Attiny angeschaut, doch auch das hat mir nicht sehr viel weitergeholfen.

Wäre nett, wenn jemand mir weiterhelfen könnte,
danke :)
 
Hallo jaimie !

Willkommen im AVR-Praxis Forum! :ciao:

Da hast du dir ja eine interessante Aufgabe ausgesucht. :)
Ich bin allerdings der Meinung, dass deine Probleme eher mechanischer Natur sind und nicht Elektronischer. ;)

PWM wird dir da wohl auch nicht weiterhelfen können.
Letztlich geht es doch darum, dass du einen Magneten z.B. mit 12V versorgst.
Bei anliegender Spannung (über den MosFET) wirkt durch die Spule eine gewisse Kraft auf den Kern.... abzüglich der Gegenkaft der Halte- bzw. Rückholfeder.
Das wird sich auch nicht ändern, wenn du den MosFET per PWM ansteuerst.

Mittels PWM kannst du die Ansteuerung (die 5V zum Gate) in Takte (Perioden) zerlegen und obendrein bestimmen, wie groß das Verhältnis von Impuls und Pausenzeit sein soll.
Wenn deine Periode also zum Beispiel 10ms beträgt und du ein Verhältnis von 50% hast, dann würden 5ms lang die 5V am Ausgang anliegen und die weiteren 5ms der Ausgang auf GND liegen.
Anschließend beginnt das Ganze wieder von vorn.
Wenn du nun eine Effektivmessung durchführen könntest würdest du demnach 2,5V messen. So gesehen kannst du also den Ausgangspin von 0V bis 5V stufenlos regelen..... aber eben nur theoretisch mit der Effektivwertmessung.
In Wahrheit veränderst du nur das Verhältnis von Impuls- zur Pausendauer innerhalb einer Periode.

Wenn du beim lesen nun aufgepasst und das PWM-Prinzip verstanden hast wirst du bemerkt haben, dass maximal auch nur 5V am Ausgangspin zur Verfügung stehen können. ;)

Es kommt nun noch die Eigenschaft des MosFET hinzu, dass dieser nur ab einer bestimmten Gate-Spannung auch voll durchschaltet. Eine zu geringe Gate-Spannung würde dir also gar nicht helfen. Dies hängt allerdings sehr stark vom verwendeten Typ ab und da hilft nur ein Blick ins Datenblatt.

Ergo.... PWM hilft dir bei deinem Problem wohl auch nicht weiter.


Mein Vorschlag daher:
Wie wäre es denn, wenn du anstatt der ganzen Magnete lieber eine paar billige und kleine Servos verwenden würdest. :)
Servos kann man auch mittels BASCOM ansteuern (siehe "Config Servos" in der Hilfe).
Die Servos gibt es in vielen verschiedenen Größen, Geschwindigkeiten und Kräften. Obendrein benötigen sie viel weniger Strom als die Magnete und können (je nach Typ) sogar direkt an den Ausgangspin des AVR angeschlossen werden.

Kannst ja mal drüber nachdenken.

Grüße,
Cassio
 
Hallo,

mit der PWM kann ich Dir auch nicht so sehr weiterhelfen.
Ich muss jedoch sagen, das der Ansatz sehr gut ist und auch in der
industriellen Antriebstechnik bei Motorbremsen genutzt wird.
Da allerdings hauptsächlich um die Lüftzeiten zu beschleunigen.

Natürlich muß die Versorgungsspannung für die Relais dann deutlich höher sein.
Z.Bsp 10V, beim Einschalten wird der MosFet mit 100% Pulsdauer für z.Bsp. 20ms
eingeschaltet und danach auf 50% und somit, wie Casio schon richtig sagt,
Effektiv mit Nennspannung (5V) betrieben.
Man unterscheidet bei E.-magneten zw. Anzugsmoment und Haltemoment

Übrigens tolle Projekt Idee, wie kommt man denn auf so was ?

Gruß
hage
 
Hallo,

betreib die Magneten mit höherer Spannung und schalte in Reihe zum Magneten
eine Parallelschaltung aus Elko und Widerstand.

Der Elko liefert am Magneten einen kurzen Stromimpuls und der Widerstand
parallel zum Elko entlädt den Elko beim Abschalten wieder und liefert nach dem
Impuls den kleineren Haltestrom für den Magneten.

Experimentier mal ein wenig mit den Werten ...

Gruß
Dino
 
Vielen dank für die schnellen Antworten :)
Ok, dann weiss ich jetzt zumindest dass ich mir den Kopf nicht mehr für PWM zerbrechen muss, danke Cassio für deine Erklärungen.

Wie man auf solch eine Idee kommt? Naja, ich bin Ingenieur-Studentin im 3. Semester, und da sollen wir ein selbst bestimmtes Projekt realisieren. Dann hab ich mir halt ein paar Videos auf Youtube angekuckt, und irgentwann kam mir dann die Idee mit der Gitarre (hab selbst mal Gitarre gespielt) :)
Ich habe mich vorher auch noch nie mit solchen Dingen beschäftigt, aber nun habe ich echt Gefallen daran gefunden :)

Das mit dem Elko und dem Widerstand scheint mir eine gute Idee zu sein, die auch am Sonntag ausprobieren werde (Kann leider nicht früher :/)

Werde euch am laufenden halten,
Gruss
 
Hallo Jaimie!

Wenn du bei den Magneten bleiben möchtest....
Hast du die Magneten denn schon? :hmmmm:

Wie wäre es denn, wenn du Magneten benutzt die im Ruhezustand auf die Saite drücken und nur unter Spannung sich leicht anheben?
So hättest du das Problem mit dem ausreichenden Druck auf die Saite vielleicht schon gelöst. :hmmmm:

Auf alle Fälle hast du nun erst mal genug Möglichkeiten zum ausprobieren. ;)


Viel Spaß dabei..... wir freuen uns jedenfalls auf Rückmeldungen.

Grüße,
Cassio
 
Hallo Jaimie,
erstmal willkommen :flowers:.
Aus meiner Erfahrung mit Robotik wird in der Industrie für solche Anwendungen
gerne Pneumatik verwendet. Da gibt es echt kleine Zylinder, die mittels Druck-
luft per E-Ventil geschaltet werden; die Impulse liefert ne SPS. Aber das wär
vermutlich 'n bissle Overkill für Dich, zumal das Luftdruck-Gefauche und Ge-
zische das Gitarrenspiel ziemlich stören dürfte :eek:.
Allerdings denk ich, dass auch E-Magnete ganz schön klappern werden :D.
Was dino sagt mit R/C-Glied davor kenne ich auch, sowas nutzen wir in der
Firma - allerdings steuern wir damit Bistabile Magnete an, die nur jeweils 'nen
kurzen Stromimpuls brauchen.
Servos halte ich persönlich für etwas zu teuer, wenn's schnelle sein sollen.
Aber erstmal einen Lösungsansatz verfolgen und bei Erfolg das System
dann optimieren (Geräuschentwicklung, Härte der Anschläge: eventuell mit
Gummi dämpfen?) so tät ich rangehen.
Viel Spass beim Tüfteln :rolleyes: und auf den Erfolg (vielleicht 'n Video?) bin ich
auch gespannt.
Grüssle
Wolfgang
 
Was dino sagt mit R/C-Glied davor kenne ich auch, sowas nutzen wir in der
Firma - allerdings steuern wir damit Bistabile Magnete an, die nur jeweils 'nen
kurzen Stromimpuls brauchen.
ich hab es verwendet damit Reed-Relais während der Arbeitsphase (wenn sie
Strom bekommen) nicht so viel verbrauche. Da ja selbst 5V-Reed-Relais so um
die 100mA verbrauchen (was mir zu viel war) hab ich erstmal den Haltestrom
ermitteln mit dem der Reed-Kontakt des Relais grade noch so geschaltet bleibt.
Dann hab ich noch etwas Reserve draufgepackt und danach den Widerstand
bemessen. Über den Widerstand hab ich dann fürs Einschalten nen Elko gelegt
damit die Spule genug Strom für die ersten Millisekunden bekommt. Dann schließt
der Kontakt auch sauber. Der Elko war ein wenig experimentieren.

Gruß
Dino
 
Hallo,
habe gestern den Vorschlag mit dem Elko ausprobiert und das hat soweit auch gut geklappt. :) Vielen dank noch einmal für diesen Tipp.
Allerdings hab ich jetzt bemerkt dass die Haltekraft auch nicht unbedingt ausreicht (Ist sehr knapp). Mal sehn ob ich mir neue Magnete bestelle, oder ob ich ein bisschen improvisiere ^^.
Nun hab ich noch eine frage zu BAsCom. Ich habe mir forgestellt, dass man zwischen 2-3 Lieder eines auswählen kann, das dann abgespielt wird. Dazu steht mir ein Taster zur Verfügung. Wenn man dann während dem Lied auf den Taster drückt soll das Lied abgebrochen werden, und man soll wieder ein neues lied auswählen können. Ist das mit EINEM Taster möglich, oder geht es nur mit 2? (einer zur Auswahl des Liedes, einer für play und stop).
Ich habe versucht dies mit einem Interrupt zu realisieren. Da ist leider das Problem, dass wenn der Taster gedrückt wird der Interrupt zwar aufgerufen wird, und dann "Song" auch wieder auf null gesetzt wird, aber dann das aktuelle Lied trotzdem zu ende gespielt wird. (Die Schleife wird noch fertig ausgeführt). ALso glaube ich dass das mit dem Interrupt keine so gute Idee war.
Versuche mein aktuelles Programm auch hier zu posten, hab es nur auf einem anderem Laptop.
Freue mich auf eure Vorschläge :)
 
Hallo jaimie1990,
also ich würde es mit zwei Tastern aufbauen, ist leichter zu programmieren
und sicherlich auch übersichtlicher ;).
Mit nur einem müßtest du ja irgendwie rausfinden, was der jeweilige Tasten-
druck grad bedeutet (programmtechnisch) und der Bediener sollte auch
irgendwie sehen, was grad passiert. N' LCD wär vielleicht ne gute Idee
für's Feedback oder wenigstens ein paar LED's. Nur um zu sehen, was grad
passiert, wenn man mitten im Programmablauf auf dem Taster rumhämmert :D.
Äh'm und entprellt sollte das Knöpfchen am besten auch sein :rolleyes:.

Grüssle
Wolfgang
 
Entprellen = Debounce

In BASCOM gibt es da ne einfache Funktion DEBOUNCE.
Für C such einfach mal im Web nach C & debounce. Habe vor längerem eine tolle Lösung mit interner Statemachine gefunden. Weiß nur nich mehr wo...

Grüße,
Markus
 
Ist das mit EINEM Taster möglich, oder geht es nur mit 2? (einer zur Auswahl des Liedes, einer für play und stop).

Hallo Jaimie!

Nun ja.... wenn du alles nur mit einem Taster machen möchtest, dann müsstest du das mit einem Timer "überwachen".

So in der Art:
Kurzes drücken (z.B. < 100ms) bedeutet Start bzw. Stop des ausgewählten Liedes und langes Drücken (z.B. >1s ) bringt dich zur Titelauswahl.

Wie aber Darkstar schon bemerkte, ist die Bedienung doch sehr "gewöhnungsbedürftig". ;)
Zwei oder mehr Taster, nebst kleines Display zur Anzeige der Titelwahl und Funktionen, wäre natürlich wesentlich einfacher zu bedienen..... und zu programmieren. :)


Ach so.....
Es wäre für alle bestimmt sehr hilfreich, wenn du mal deinen derzeitigen Schaltplan und ggf. dein Programm hier einstellen würdest.


Grüße,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)