(AVR) Attiny85 PWM

OP #7744025
Lesenswert?

Heyy, ich arbeite jetzt schon länger an einem Projekt und bin nun auf weitere Probleme gestoßen, die ich jetzt schon seit mehreren Wochen nicht lösen kann. Ich habe mir selber eine Platine erstellt, auf der ich einen Attiny85 20SU (https://www.reichelt.de/8-bit-attiny-avr-risc-mikrocontroller-8-kb-20-mhz-so-8-attiny-85-20-su-p69300.html?&trstct=pos_1&nbc=1) habe. Er und die ganze Platine werden von einem LiPo-Akku (3.7V | 130mAh) betrieben. Unteranderem ist an dem Ausgang PB1 ein Mosfet angeschlossen (AO3400A) und an diesem ein kleiner Modellbaumotor (0.5V-4V). Nun wollte ich den Motor zum laufen bringen, heißt ihn beschleunigen, bremsen und auf einer gewünschten Geschwindigkeit fahren lassen. Damit er für meine Anwendungen geeignet ist, will ich den Motor aber nicht mit vollen 3.7V laufen lassen, sonder mit so 1.5V-2V damit er nicht zu schnell läuft. Nun hatte es aber nach vielen Versuchen nicht geklappt, den Motor irgendwie langsamer laufen zu lassen. Ich kenne mich nicht soo gut aus mit der Programmierung solche Microcontroller, aber ich mache es über einen ISP-Header und einen Arduino Uno. Ich hab schon viele Codes versucht die ich mir von KI's ausspucken habe lassen, jedoch keine hat Erfolg gezeigt. Ich habe schon alle Verkabelungen überprüft und wenn ich den Motor mit digitalWrite ansteuere funktioniert es auch einwandfrei. Ich freue mich seeehr über Kommentare und Hilfestellungen, jetzt schon mal Danke, ich verzweifle hier wirklich D: Mit Freundlichen Grüßen Jo

#7744255
Lesenswert?

Jo schrieb:

ich arbeite jetzt schon länger an einem Projekt und bin nun auf weitere Probleme gestoßen, die ich jetzt schon seit mehreren Wochen nicht lösen kann. Ich habe mir selber eine Platine erstellt, auf der ich einen Attiny85 20SU (https://www.reichelt.de/8-bit-attiny-avr-risc-mikrocontroller-8-kb-20-mhz-so-8-attiny-85-20-su-p69300.html?&trstct=pos_1&nbc=1) habe. Er und die ganze Platine werden von einem LiPo-Akku (3.7V | 130mAh) betrieben.

Der Controller läuft mit 3,3V, aber nur wenige MOSFETs. Die müssen für 3,3V oder weniger Ansteuerspannung spezifiziert sein.

https://www.mikrocontroller.net/articles/FET#Gate-Source_Threshold_Voltage

Unteranderem ist an dem Ausgang PB1 ein Mosfet angeschlossen (AO3400A)

OK, der kann das.

(0.5V-4V). Nun wollte ich den Motor zum laufen bringen, heißt ihn beschleunigen, bremsen und auf einer gewünschten Geschwindigkeit fahren lassen. Damit er für meine Anwendungen geeignet ist, will ich den Motor aber nicht mit vollen 3.7V laufen lassen, sonder mit so 1.5V-2V damit er nicht zu schnell läuft.

Das macht PWM.

keine hat Erfolg gezeigt. Ich habe schon alle Verkabelungen überprüft und wenn ich den Motor mit digitalWrite ansteuere funktioniert es auch einwandfrei.

Schon mal gut.

#7744265
Lesenswert?

Jo schrieb:

So ich habe nun eine Freilaufdiode eingebaut und das Mosfet nochmals ausgetauscht. Dann habe ich den angehängten Code hochgeladen, es gab keine Fehlermeldung. Als ich dann die Platine über den Akku "anmachte", lief der Motor gar nicht flüssig, sondern er springt immer so nach vorne.

Ich glaube der Fehler liegt hier.

const int pwmPin = PB1; // Der Pin, der per PWM gesteuert wird

Das ist falsch. Du muss die Pinnummer nach Arduino-Zählweise angeben, siehe Anhang. PB1 ist der Name aus dem Microchipdatenblatt. Also so.

const int pwmPin = 1; // Der Pin, der per PWM gesteuert wird

Die Arduino-Pinnummern sind hellblau.

Angehängte Dateien:
OP #7744266
Lesenswert?

Das ist ein Bild vom Aufbau der Platine. Die Testpoints sind alles Lötpins auf der Platine, wo dann entsprechend Bauteile dran gelötet wurden. Die Diode komplett ignorieren, die wurde nicht eingebaut, da sie komplett falsch verkabelt wurde, ich hab sie jetzt im nachhinein mit zwei Kabel an den Motor gelötet. Und das Mosfet hat sich auch verändert, ist das AO3400A, wie oben beschrieben. Und ich habe die beiden Pins PB0 und PB1 per Kabel vertauscht auf die Platine gelötet. Also alle Anschlüsse die hier im Schaubild an PB0 angeschlossen sind, sind an PB1 angeschlossen und umgekehrt, deshalb habe ich auch MISO und MOSI am ISP-Header umdrehen müssen. Ansonsten sollte das eigentlich so umgesetzt worden sein.

Angehängte Dateien:
#7744268
Lesenswert?

Jo schrieb:

Das ist ein Bild vom Aufbau der Platine.

Nö, das ist ein absolut übersichtlicher Schaltplan.

Schaltplan richtig zeichnen

Und nach deinem Schaltplan hängt der MOSFET an PB0 und NICHT PB1, wie es im Quelltext steht!

ist das AO3400A, wie oben beschrieben. Und ich habe die beiden Pins PB0 und PB1 per Kabel vertauscht auf die Platine gelötet.

Klasse, so macht ein Schaltplan Spaß!

Gast #7744269
Lesenswert?

Es fehlen Freilaufdiode, Abblock-Kondensatoren und Pull-Down Widerstand.

Nach deinem Text hast du ALLES anders gemacht, als der Plan zeigt. Ich hoffe dir wird selbst klar, wie nutzlos dieser Plan dadurch ist.

Wo sind die Fotos von Aufbau?

Gast #7744286
Lesenswert?

Jo schrieb:

Ich frage mich halt, in wie Fern der Fehler auf der Platine liegen kann, wenn doch mit digitalWrite alles funktioniert?

Zeige Bilder, dann wird sich das aufklären. Du siehst den Fehler nicht, weil du denkst, dort kann er nicht sein. So ist es jedenfalls oft.

Es fehlen immer noch Abblock-Kondensatoren. Schraube mal deinen PC auf und zähle dessen Kondensatoren. Denkst du, die sind da nur zur Dekoration drin?

OP #7744290
Lesenswert?

Hier noch ein Bild. Also nur erste Testversionen, an denen viel verändert werden musste. Und nur kurz als Anmerkung, ich finde diesen befehlshaberischen Ton unangebracht, ich kenne mich hier in diesem Gebiet nicht gut aus und Versuche hier meine Probleme zu lösen und da finde ich solche Kommentare einfach nicht angepasst. Wir sind alles Menschen die noch was lernen können und auch Fehler machen ;D

Angehängte Dateien:
#7744305
Lesenswert?

Jo schrieb:

Die Drähte kommen mir arg dünn vor. In Kombination mit den fehlenden Abblock-Kondensatoren scheitert es wohl an instabiler Stromversorgung.

Sollten da 100 nF reichen?

Den brauchst du auf jeden FALL!!! Der war hoffentlich schon auf dem Board. Warum hast du ihn entfernt? Bei dem Motor braucht man nochmal um die 5-10uF als Elko, Tantal oder Aluminium.

Gibt es sonst noch Spezifikationen auf die ich achten sollte? Hast Du vielleicht einen Link zu einem passendem?

100nF Keramikondensatoren mit 25V gibt es wie Sand am Meer! Dito Elkos!

Gast #7744309
Lesenswert?

Jo schrieb:

Sollten da 100 nF reichen?

100uF + 100nF an VCC/GND vom Mikrocontroller.

Außerdem würde ich mit einem Oszilloskop prüfen, ob Akku und Leitungen ausreichend belastbar sind.

Dein sogenannter "Spannungsregulator" ist falsch beschriftet. Das IC überwacht die Spannung nur, es regelt sie nicht.

#7744347
Lesenswert?

Du hast zwischen dem Pin des MCU und dem Gate des MOSFETs einen 330Ohm Widerstand vorgesehen. Damit verhinderst du, dass der MCU durch einen zu hohen Strom überlastet wird - das ist gut. ABER, ein schnelles Umschalten des MOSFETs wird die mit ein paar Milliampere Gatestrom nicht gelingen. Für eine PWM solltest du m.E. schon einen MOSFET Treiber vor das Gate schalten - entweder als IC oder diskret mit einzelnen Bipolar-PNP und NPN.

#7744372
Lesenswert?

Oliver D. schrieb:

Du hast zwischen dem Pin des MCU und dem Gate des MOSFETs einen 330Ohm Widerstand vorgesehen. Damit verhinderst du, dass der MCU durch einen zu hohen Strom überlastet wird - das ist gut.

Aber überflüssig.

ABER, ein schnelles Umschalten des MOSFETs wird die mit ein paar Milliampere Gatestrom nicht gelingen. Für eine PWM solltest du m.E. schon einen MOSFET Treiber vor das Gate schalten - entweder als IC oder diskret mit einzelnen Bipolar-PNP und NPN.

Ebenfalls überflüssig. Die Standard-PWM beim Arduino sind 480Hz, sehr langsam. Aber selbst mit deutlich höheren Frequenzen kommt man ohne Gatettreiber aus.

Beitrag "Re: Transistor, 1A, 4MHz Schaltfrequenz"

Ok, bei 3,3V sind die Ausgänge vom AVR hochohmiger, aber für 480 Hz reicht es locker.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren