Translate

04 Februar 2010

Eine besonders einfache PWM-Steuerung mit dem ATtiny13

.....mal was ganz anderes zwischendurch........

Weil die Motorsteuerung eines E-Mofas kaputt ging
habe ich ein uraltes Projekt wieder aufgegriffen
und eine möglichst simple Ansteuerung gebastelt.

Damals hab ichs mit dem TL494 angesteuert.
Grundsätzlich geht der auch ganz gut, aber
wenn man dann noch extras wie Strombegrenzung
oder auch nur Sanftanlauf haben möchte, dann
wird auch eine einfache OP-Verstärkerschaltung
sehr schnell sehr kompliziert.....Und weil ich damals
keinen MOSFET-Treiberbaustein drin hatte,
wurde das Ganze halt doch wärmer als gewünscht.

Aber man ist ja lernfähig.........

Ich habe wieder mal einen ATtiny13 genommen.
(Ich hatte zwar eigentlich nicht vor diesen Blog
dem ATtiny zu widmen, aber ich mag den halt.
Und weil das Franzis-Lernpaket darauf basiert
ist alles besonders einfach nachzuvollziehen)

Da ist alles drauf. Zwei AD-Wandler für Eingänge
zwei Puls-Pausen-Modulatoren für PWM-Ausgänge.
Ich brauch eh nur je einen, aber da fällt mir irgendwann
auch noch was dazu ein, z.B.Strombegrenzung
und weil das Teil auch rechnen kann ist es kein
Problem, da auch noch ein paar Sicherheits-
Schaltungen reinzuzaubern.
Ein freier Pin wäre auch immer noch übrig

Ein "BASCOM-Grundprogramm"
für zwei !! PWM-Kanäle in einem ! ATtiny13:

$regfile = "attiny13.dat"
$crystal = 1200000
Config Portb.0 = Output 'Pin5 PWM0a
Config Portb.1 = Output 'Pin6 PWM0b

Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Dim M As Byte
Dim N As Byte
Dim Ad_2 As Integer
Dim Ad_3 As Integer

Do

Ad_2 = Getadc(2) 'Pin3 ADC2
Ad_2 = Ad_2 / 4 '10Bit zu 8Bit
M = Ad_2 'Variable für Manipulationen

Ad_3 = Getadc(3) 'Pin2 ADC3
Ad_3 = Ad_3 / 4 '10Bit zu 8Bit
N = Ad_3 'Variable für Manipulationen

Pwm0a = M
Pwm0b = N

Loop

End


........das reicht schon mal als
Basis zum weitermachen!
Dieses Programm belegt ca 34% des Speichers

Ich habs wieder mal mit BASCOM programmiert.
Das geht am schnellsten und am einfachsten.
Ideal für solche kleinen Projekte die
mal eben schnell gebastelt werden......

Auch wenn die HEX-Datei deutlich größer
wird als mit Assembler, aber was solls...
Und auch, wenn manche "Profis" die Nase
rümpfen werden- Dieser Blog ist von einem
ATtiny-Anfänger für Anfänger geschrieben.
Auf Rechenleistung kommts hier nicht an,
und das ganze Programm hat nur ca 20 Zeilen.

Um den Drehwinkel des Potis zu reduzieren
hatte ich zunächst die Referenz auf 1,1V gesetzt.
Das habe ich aber wieder geändert und im
Programm entsprechend umgerechnet, bzw einfach
den Wert auf 255 begrenzt.
So bekomme ich die Möglichkeit den
Drehwinkel anzupassen und vor allem auch
eine Leitungsbruchüberwachung
einzubauen.

Der AD-Wandler ist in BASCOM standardmäßig
auf 10Bit gesetzt (0-1023) der PWM-Ausgang
arbeitet mit 8Bit (0-255)

Folglich muss man umrechnen....

Durch 4 teilen für vollen Drehbereich oder
auf 255 begrenzen (if x > 255 then x = 255)
oder beides miteinander kombinieren
bis die Empfindlichkeit passt.
Da kann man schön spielen............
Bei "größeren" Atmels kann man die
Auflösung der PWM-Ausgänge umstellen.
Vielleicht geht das auch beim ATtiny13.
Das habe ich noch nicht versucht.
Ich werds gelegentlich mal testen.

Siehe auch hierzu :
http://www.rn-wissen.de/index.php/Bascom_und_PWM

Da werden auch die Frequenzen berechnet

Ein kleines Problem ist die Tatsache,
dass der ATtiny während des Reset
auf "high" schaltet. (unabhängig davon,
wie die Ausgänge konfiguriert sind)

Da geht mindestens ein Ruck durch den Motor,
wenn man N-Kanal Mosfets direkt ansteuert.
Die Ansteuerung von N-Kanal-Mosfet muss
deshalb invertiert erfolgen.
Also muss auch der Ausgang entweder
invertiert ausgegeben werden (y=255-x)
bzw. man kann den oder die PWM-Ausgänge
auch invertierend konfigurieren.
Und zwar: clear up statt clear down
Zum Ansteuern von N-Kanal Mosfet sollte
in jedem Fall ohnehin ein invertierender
Treiberbaustein verwendet werden.
z.B. TC oder MIC4451 für große Leistungen
oder der TC4431 bei Betrieb direkt an 24V.
Der TC 4431 kostet ca 2€ , das muss drin sein.
Jeder andere Schaltungstrick dürfte eher noch
aufwendiger sein bis alles funktioniert.
Wie schon mehrmals erwähnt ist der Umgang
mit MOSFET meist mit Problemen des Timings
bzw zu wenig steilen Flanken verbunden.
Gerade beim hochfrequenten Umschalten
braucht man gute und kräftige Treiberstufen.

In Notfällen, bzw in Sonderanwendungen bei denen
es auf minimalste Baugröße ankommt kann man
mitunter aber auch alles noch viel einfacher gestalten.

Allerdings keine "feine" sondern eher
die sehr grobe Lösung!
Einen oder zwei P-Kanal Mosfet kann der ATtiny
zur Not sogar direkt ansteuern !!!!!!!!!
Für sehr einfache Antriebe (und nur da!
z.B. Spielzeuge etc. oder im Modellbau)
sollte das durchaus genügen.
Der ATtiny muss dann mit einem
negativen 5V-Spannungs Regler
an der positiven Spannung hängen.

Nachteile der Schaltung:
der Attiny hängt nicht an Masse.
Wenn man nur ein Poti als Geber hat ist das
aber kein Problem.
Für Analoge Messeingänge ist das völlig ungeeignet.
Bis man da was anpasst.....Da ist es sinnvoller gleich
einen Treiber zu nehmen, für P-Kanal nicht invertierend
P-Kanal Mosfet haben einen deutlich höheren
Innenwiderstand als N-Kanal Typen.
dafür können damit aber Motoren betrieben werden, die
fest auf Masse liegen z.B. Starke Scheibenwischermotoren,
Dynastart-Anlasser etc.

Ich hab das mal ganz provisorisch aufgebaut:

1x ATtiny13
1x 7905 Spannungsregler
2x IRF4905 P-Kanal Mosfet (ist notfalls auch bei 5V ok)
1x IRF1404 N-Kanal Mosfet (hier nur als Diode)
1x Poti 5k (Wert ist absolut unkritisch ca.1k-50k)
ein paar Stützkondensatoren
sonst nichts!

(Die LEDs dienen nur zur Kontrolle)

Die Mosfet habe ich direkt ohne Vorwiderstand
angeschlossen! (Bauteile sparen! 100R- ev500R wäre besser)
Und der IRF 1404 ist nur passiv als starke Diode drin.
Da sollte natürlich eine ordentliche schnelle Diode rein!
......siehe da! das funktioniert trotzdem! Besser als erwartet!

Das Ding kann so wie es ist locker!! 30A bei 24V regeln!
(bis ca 10A sogar ganz ohne Kühlkörper !)

Der winzige "Kühlkörper" reicht für ca 1min 30A bei 24V .
Soviel hätte ich nicht erwartet!





















Für eine ordentliche Schaltung
ist es natürlich viel besser, einen Mosfet-Treiber
zu nehmen. Der ATtiny liegt dann auf
GND und kann auch besser angesteuert werden,
aber wie gesagt, zur Not gehts so auch.
In manchen Fällen (Modellbau) hat man einfach
keinen Platz und ein Sanftanlauf einer
Modellokomotive wäre so ein typisches Beispiel
oder die gemeinsame und trotzdem manipulierbare
Ansteuerung von zwei E-Motoren eines Bootes
oder eines Kettenfahrzeugs
(ein Eingang gibt Gas,der andere lenkt )
Ein ordentlicher Treiber für Mosfets kostet oft
mehr als die Leistungstransistoren die er ansteuert,
aber nur so wirds eine wirklich gut arbeitende
Steuerung.
....Und wenn man jetzt ein ganz mutiger
Zeitgenosse ist, dann müsste es sogar möglich sein,
den 7905 Negativregler auch wegzulassen........
Der Attiny arbeitet von gut 2V bis 6V..
der Stromverbrauch ist minimal.
Die Last durch die Mosfet ist nur gering.(impulse!)
wenn der Widerstand des Poti als Lastwiderstand
genutzt würde und die Kontroll-LED als Spannungs-
begrenzer (mit Dioden in Reihe einstellen auf ca 5V)
sollte es mit passendem Widerstand nach Masse gehen!
Da das Poti direkt an der Referenzspannung hängt sind
kleine Schwankungen der Spannung egal!
Das hab ich allerdings noch nicht getestet!

eine genauere Beschreibung des Programms
kommt demnächst.

Grundfunktionen des "Mofa-Programms":

0-Stellungsüberwachung
(Wenn beim Einschalten das Poti nicht
auf 0 steht startet der Motor nicht)

Drahtbruchüberwachung:
(Sollte der Massedraht des Potis brechen,
würde der Motor "Vollgas" geben
also wird in diesem Fall abgeschaltet.
Volle Leistung liegt bereits bei ca 60°
Drehwinkel an, also viel früher bei 1,25V
am AD-Wandler.

Schaltausgang bei Vollast
Bei Vollaussteuerung der PWM-Stufe
wird ein Ausgang geschaltet.
Momentan mit LED zur Kontrolle
der Potistellung, damit könnte aber auch
ein Schütz zur Überbrückung der
Transistoren betätigt werden.

Der Wert der an den PWM-Ausgang geht
wird nicht direkt übernommen sondern
dem Ausgang des AD-Wandlers nachgeführt.
(per Größer-Kleiner-Vergleich wird
bei jedem Durchlauf 1 addiert oder subtrahiert)
So bleiben im Programm viele Möglichkeiten
in die Regelung einzugreifen.
Durch Pausen kann die Änderung gedämpft
werden.
Über den zweiten AD-Wandler könnte eine
Strombegrenzung erfolgen.
Wird eine Grenze überschritten, dann könnte man
z.B 2 oder 3 subtrahieren und schon ist der Strom begrenzt.
Das ist bisher aber noch nicht eingebaut.

Es ist wieder mal erstaunlich, mit welch einfachen
Mitteln man heute eine PWM-Steuerung
basteln kann

Die Ansteuerung durch den ATtiny funktioniert
hervorragend! Den Takt auf 9,6 MHz, dann pfeift
auch nichts. Ich hab die Frequenz nicht gemessen,
aber da die Schaltung bei 4,8 MHz deutlich pfeift
ist das wohl irgendwo bei 20khz.

und wenn man die geeigneten
Mosfet-Treiber und Mosfet wählt, dann sind
auch wirklich große Leistungen damit steuerbar.
Ich habe für die Mofa-Steuerung
einen TC4431 als Treiber und
vier IRF1404 als MOSFET verwendet.
(40V 202A 800APeak allerdings TO220 Geh.
da kann das Innenleben mehr, als die Pins!)
Damit müssten bei 24V locker 100-150A
zu schaffen sein. Für ein Mofa reichts
allemal!
Das sieht dann so aus:
Viel ist da auch nicht drauf!


















Hierzu empfehle ich, mal da nachzuschauen:

http://www.paulandsabrinasevstuff.com/index.html

Die bauen einen
"Open Source" 144V 500A Controller für Autos!
Da ist viel mehr Luxus drin, aber die
Grundschaltung ist fast gleich.

Den Takt (PWM) liefert hier ein ATMEGA,
das drumherum ist "Luxus" wie Temperatur und
Stromüberwachung etc.
Hinten kommt ein PWM-Takt raus.
TTL-Pegel wie beim ATtiny auch.
Als Mosfet-Treiber ist ein viel stärkerer eingesetzt,
der an 12V (optimal) betrieben wird und die Mosfet sind
natürlich "etwas" größer aber die grundsätzliche
Schaltung ist trotzdem nahezu identisch.
Die ganze Logik drumrum gibt es bei mir nicht.
(das ist in dieser Anwendung nicht notwendig)
Da sind also noch einige Reserven und
Optimierungsmöglichkeiten zu finden!

Noch eine Anmerkung am Schluss:
Wenn man einen MOSFET Treiberbaustein einsetzt,
dann könnte mandie Freilaufdiode auch als gesteuerten
MOSFET aufbauen (Brückenschaltung)
bzw sogar eine echte H-Brücke bauen. ( 2 Treiber )
Wozu hat der ATtiny schliesslich zwei PWM-Ausgänge!
Ein "Permanent-Feld"-Motor bremst dann
sofort ab und kann vor und zurück laufen.

Das werd ich irgendwann mal aufbauen,
vielleicht kann man das mit einem Pendel
koppeln!?????!
Hat schon irgendwer mal einen "Segway" als Modell
gebaut????
....nur so eine spontane Idee..........
wird wohl doch nicht ganz so einfach sein... ;-) ---egal....!

mfG Franz

4 Kommentare:

  1. Hallo, wehre es möglich den Schaltplan zu bekommen? Dieser Regler wehre genau das richtige für mein Projekt. Wenn ja dann an Eddy256@gmx.de
    Danke. Grüße Eddy

    AntwortenLöschen
  2. Franz, Du brauchst unbedingt einen "PayPal-Button in Deinem Blog!!! :)

    AntwortenLöschen
  3. Hallo Franz, also mich würde der Schalplan hier auch interresieren . . gib es da eine möglichkeit ?
    lg

    AntwortenLöschen
    Antworten
    1. Hallo TimiGE,

      Den Schaltplan müsste ich erst mal zeichnen, aber
      der ergibt sich eigentlich von selber, wenn Du mal die
      Schaltbilder der einzelnen Teile anschaust.
      1x ATtiny13
      1x 7905 Spannungsregler
      2x IRF4905 P-Kanal Mosfet (ist notfalls auch bei 5V ok)
      1x IRF1404 N-Kanal Mosfet (hier nur als Diode)
      1x Poti 5k (Wert ist absolut unkritisch ca.1k-50k)
      ein paar Stützkondensatoren
      Der "Trick" in diesem Fall ist, dass die Versorgung
      des ATTINY direkt an der positiven Spannung hängt
      und dessen "GND" nicht auf Masse sondern auf einem Potential
      von 5V unter der Versorgungsspannung.So kann man die
      P-Kanal Mosfet direkt ansteuern, notfalls sogar ohne
      Gate-Widerstand. Kannst Du den ATTINY programmieren?

      Wenn Du allerdings eine ordentlich aufgebaute Schaltung
      bauen willst, dann nimm "richtige" Dioden statt eines nicht
      angesteuerten Mosfet sowie ein Mosfet-Treiber-IC,
      möglichst ein invertierendes und steuere damit N-Kanal
      Mosfet an. Ganz wichtig: schütze die Schaltung mit
      Supessor-Diden und Vorwiderständen vor Überspannung an
      den Treiber-ICs. Die TC4431 bzw TC4451 verstehen da
      überhaupt keinen Spass!




      Löschen