Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

PWM Signal

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 09.04.2009, 19:38    Titel: PWM Signal Antworten mit Zitat

Da ich mich jetzt mit dem PWM Signal auseinandergesetzt habe, dachte ich mir, dass ich mal ein kleines Programm dafür schreiben werde.

Das Programm werde ich dann im laufe des Abends noch reinstellen.

Was sollte das Programm können?

Zuerst einmal, gibt man eine Umdrehungsanzahl ein, die der Gleichstrommotor pro Minute erreichen soll.
Nun sollte sich der Gleichstrommotor auf die die Umdrehung selbst einstellen, indem unterschiedliche PWM Signale "also in Zeitintervalle", ein Transistor geschaltet wird.
Dieser Transistor wiederum, schaltet dann den erwünschten Strom.


Was für Probleme gibt es bisher im Programm von mir?
Naja, ich muss einer Variabele einen Wert zuordnen, sodass das Programm weiss, wann 1 Minute rum ist.
Dies ist notwendig, denn sonst kann ich nicht herausfinden, wieviele Umdrehungen der Motor in einer Minute hat.

Was sollte das Programm noch können?
Naja, wenn man jetzt z.B. an dem Motoren einen Propeller anschliesst und eine Kraft auf den Propeller wirkt, sollte der Motor natürlich seine Umdrehung beibehalten.

Wiegesagt ist das Programm dann so, dass er dies dann alles kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 09.04.2009, 19:49    Titel: Antworten mit Zitat

Lol, du sagst, dass DU ein Programm schreiben willst, und sagst UNS was es können SOLL. grinsen Nimms mir nich übel, ...

So und weil der Motor auch nicht gerade klein sein wird, wirst du vermutlich einen Leistungstransistor verwenden, richtig?
Und Leistungstransistoren haben die Eigenschaft sehr sehr langsam zu sein, und nicht zu vergessen, wollen diese auch nur entweder gar nicht, oder voll durchgesteuert sein. Alles dazwischen wird in pure Abwärme umgesetzt.
Leistungstransistoren sind daher nicht für PWM mit höheren Frequenzen als 50 Hz geeignet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 09.04.2009, 20:39    Titel: Antworten mit Zitat

Code:

dim strom as single
dim stufe1 as single
dim stufe2 as single
dim a as uinteger
dim aa as integer
dim b as uinteger

dim c as integer
dim d as integer

dim taste1 as single
dim taste2 as single

dim einstellungumdrehung as integer

dim pwm as integer
dim faktor as uinteger

dim taste as string
screen 18
color 1,15
cls
'Schleifenanfang
do

'Tastatur einbinden
taste = inkey
'Variabele a bei jedem Schleifendurchlauf um den Wert 1 addieren
a = a + 1


'Wenn Strom kommt, wird die Variabele stufe1 auf den Wert 1 gesetzt
if strom = 1 then
stufe1 = 1
end if
'Wenn kein Strom kommt, wird die Variabele stufe2 auf den Wert 1 gesetzt
if strom = 0 then
stufe2 = 1
end if


'Wenn 1 Umdrehung stattgefunden hatte "sprich die Variabelen stufe1 und stufe2 den Wert 1 haben, wird die Variabele b um den
'Wert 1 addiert und die Variabelen stufe1 und stufe2 auf den Wert 0 gesetzt.
'So wird pro Umdrehung 1 Wert addiert.
if stufe1 = 1 and stufe2 = 1 then
    b = b + 1
    stufe1 = 0
    stufe2 = 0
end if

locate 1,1
print "BOS PWM Signalerzeugung"
print
print "(1) Zeitkalibrierung +"
print "(2) Zeitkalibrierung -"
print "(3) Einstellung Umdrehung/min +"
print "(4) Einstellung Umdrehung/min -"

if taste = "1" then
    aa = aa + 10
end if

if taste = "2" then
    aa = aa - 10
        if aa = - 10 then
            aa = 0
        end if
end if

if taste = "3" then
    einstellungumdrehung = einstellungumdrehung + 10
end if
if taste = "4" then
einstellungumdrehung = einstellungumdrehung - 10
    if einstellungumdrehung = -10 then
    einstellungumdrehung = 0
    end if
end if
print
print "momentaner Wert         eingestellter Wert"
print a
locate 9,24
print aa;" -> Zeiteinstellung"
locate 10,24
print einstellungumdrehung;" -> Umdrehung/min"
dim einstellungumdrehung1 as integer
einstellungumdrehung1 = einstellungumdrehung / 60
locate 11,24
print einstellungumdrehung1;" -> Umdrehung/sec"
if a = 5000 then
a = 0
end if

'Wenn 1 Sekunde das Programm läuft, wird danach geschaut, wieviele Umdrehungen wirklich stattgefunden hatten.
'gegebenfalls wird das PWM Signal verändert.
if a = aa + c + d then
   
    'festgestellte Umdrehung kleiner als eingestellt 
    if b < einstellungumdrehung then
    d = 0
    c = c + 1
    end if
   
    'festgestellte Umdrehung größer als eingestellt
    if b > einstellungumdrehung then
    c = 0
    d = d + 1 
    end if
   
    'festgestellte Umdrehung gleich der eingestellten Umdrehungen
    if b = einstellungumdrehung then
    c = 0
    d = 0
    end if

a = 0
end if

loop
'Schleifenende



weiter bin ich noch nicht


Zuletzt bearbeitet von Andy19312 am 09.04.2009, 22:44, insgesamt 4-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 09.04.2009, 20:41    Titel: Antworten mit Zitat

Das Programm sollte aber so in dem Style beibehalten werden.
Sind auch noch kleine Fehler drin.


Aber trotzdem, sowas hat hier im Forum noch keiner gemacht durchgeknallt
und ich denke mal, dass es für den Anfang gut ist.


Und es gibt bestimmt ein Mosfet oder Transistor der dies alles kann, was ich von ihm verlange

Kein bock mehr heute, es klappt "noch" nicht
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 09.04.2009, 23:03    Titel: Antworten mit Zitat

wie würdet ihr denn ein pwm signal erzeugen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 09.04.2009, 23:12    Titel: Antworten mit Zitat

Auf jeden Fall ohne dreifach Post.

Hast du meine Anmerkung zum Schaltungsaufbau überhaupt gelesen!?
Wenn du nen Leistungstransistor (BC337 und Konsorten) oder gar nen MOSFET (bspw. BS170) verwendest, KANNST du effektiv kein PWM betreiben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 10.04.2009, 09:42    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Lol, du sagst, dass DU ein Programm schreiben willst, und sagst UNS was es
Leistungstransistoren sind daher nicht für PWM mit höheren Frequenzen als 50 Hz geeignet.

Falsch!

Schau doch einfach mal in ein Schaltnetzteil hinein. Dort sind leistungstransistoren (FET's, MOSFET's, HEX'FETs, IG.......) verbaut. Die werden mit mehr als 30KHz getaktet, udn teilweise noch mehr. Selbst in fast jedem alten Röhrenfensehr sind Leistungsstufen drin (Zeilentrafo), der mit mehreren KHz getaktet wird.

@Andy. Du solltest dein PWM nicht auf eine Minute auslegen, sondern eher auf 500Hz oder noch mehr. Es gibt, für solche anwendungen PWM-ICs, die ein fertiges PWM erzeugen, über einen hardware Timer. Sie sind sehr leistungsstark,leicht zu programmieren, und stabil.

PC-Gestütztes PWM ist zwar möglich, jedoch nicht sauber umzusetzen.

Ich selbst habe erst vorgestern einen 5A PWM Treiber mit HEXFETs aufgebaut, der sowhol rechts, als auch Linksbetrieb, sowie eine Bremmsfunktion beherscht.

Er wurde mit 2x IRF7389 HEXFET's für rund 40cent gebaut, hat gerade mal 6 Transistoren und ein paar widerstände drauf. Kann bis zu 30V bei 5A+- treiben. Die Platine is gerade mal so gross wie ein 2 euro stück.

zum "guten PWM" ... Du solltest dir eine ganz GANZ! einfache funktion basteln.

Code:
Dim PWM_Soll as UByte
Dim PWM_Aktuell as UByte
Do
    PWM_Aktuell += 1
    If PWM_Aktuell > PWM_Soll then
        Ausgangspin = 0
    else
        Ausgangspin = 1
    End If
Loop

Das ist extrem simpel udn funktionell.

Der Code macht nichts anderes als eine UByte (255 schritt) Variable aufzuzählen. Läuft sie über, beginnt sie wieder bei dem wert 0. Es braucht also kein IF für den überlauf zu existieren.
Als nächstes prüft man einfach, ob die PWM-zeit noch im gewünschten bereich list. wenn das so ist, schaltet man den ausgang auf high, ansonsten auf low. hier machts auch nichts aus, das er schon auf high ist, und man das nochmal setzt. Ganz im gegenteil. Das erhöht die zeitliche stabilität im durchlauf.

Willst du das PWM-Signal abändern, brauchst du jetzt nur den PWM_Soll wert abändern.

Die Umdrehungen Pro Min. kannst du sowieso nicht berechnen, da du kein messystem am Motor hast, den du nutzen kannst. Du kannst das zwar nachträglich hinzufügen, aber das ist eher eine mechanische als softwareseitige angelegenheit.

Beim einsatz eiens Spindelmotors ist das schon wieder anders. Das ist mehr eine Mischung aus gepulstem Motor und schrittmotor. Hierbei nutzt man zum "antreiben aus dem stillstand" ein Schrittmotor-prinzip, um ihn in rotation zu versetzen. Hat er eine bestimmte geschwindigkeit erreicht, werden di eleitungen anders verdrahtet (elektronisch). Dabei nutzt man dann eine Leitung als Induktive Rückkoplung, um zu erkennen, wo sich der Motor befindet. Ist er an einer bestimmten stelle angekommen, wird ein Puls mit sehr viel Strom auf eine andere leistung gegeben, um ihn quasi anzuschupsen.

Das Prinzip verwendet jede Festplatte zum antreiben Ihrer Platten. Anders wären solch hohe und sehr genau umdrehungsgeschwindigkeiten garnicht möglich. Zumiundest nicht, wenn sie kosteneffektiv sein sollen.

Nochmal zum messen der Umdrehungen. Du darfst nicht vergessen, das du einen Gleichstrommotor betreibst, und keinen Shcrittmotor oder Spindelmotor.
Gibst du spannung auf ihn drauf, kannst du nicht sagen, wie weit er sich dreht. dadurch ist es dir auch ncith möglich herauszurechnen, wie weit er sich gedreht hat. Tust du es dennoch, ist das eine sehr SEHR grobe schätzung, die wohl nur zu 1% (wenn du VIEL Glück hast) zutreffend ist.

Zum transitor: Ich würde dir, wenn du kein SMD Lösten willst (IRF ist smd) zu einem TIP32 raten. Den musst du zwar kühlen, jedoch kann er auch so einige KHz taktrakte problemlos ab.
Er kostet zwar etwas mehr, und ist von der effektivität gesehen fast schon am ende der Leistungsklasse, jedoch als SO220 erhältlich, was ihn vom verbauungstechischem Stand, leicht handhaben lässt.

Wenn du willst, kann ich dir gerne eine 5A Brücke zusenden. Sach mir im qry bescheid, wenn du interese hast. Kann auch ma n Bild von machen, wenn dir das helfen sollte.



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]


Zuletzt bearbeitet von ThePuppetMaster am 10.04.2009, 15:29, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.04.2009, 12:40    Titel: Antworten mit Zitat

@TPM:
Ich will ja nicht den Klugscheiß0r spielen, aber die von mir genannten Bauteile (und baugleiche, verwandte und ähnliche) sind überhaupt ganz und gar nicht für PWM geeignet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 10.04.2009, 14:13    Titel: Antworten mit Zitat

und warum sollte das so sein?


[EDIT]
Also .. nur ma so nebenbei.

BC850 / 550 machen weit über 100MHz taktrate problemlos mit

irf7389 zeitg in Fig.9 eine test-frequenz von 1MHz.

und, einige FETs lassen sich bis zu 2A am Gate laden und entladen (mit einer FET-gegentaktstufe). was natürlich beim IRF im PWM nicht nötig is. Wie schnell ihn laden kannst, lässt sich allerdings auch via Datenblatt errechnen. (siehe link)
Bei meiner kleinen Brücke habe ich nach meiner messung eine loadtime von 5ns udn eine unloadteime, die mein scope nicht mehr messen kann. schätzen würde ich rund 20ps

und, übrigens kann der IRF beim Pulsbetrieb 30A ab.




EDIT-2
Dein BC337 kann übrigens 100MHz ab .. und dein BS170 kann laut testkonditionen 30Khz. Nach den Load udn unload karakteristika sollten sogar noch mehr möglich sein. (geschätze 100MHz)


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 10.04.2009, 16:41    Titel: Antworten mit Zitat

Ich werde nachher nochmal ein kleines Programm schreiben, da das erste "vom Ansatz zwar ok", aber doch noch nicht optimal ist.


Achso, hier ein Bild, wie ich die Umdrehung/min berechnen will, also muss ich einen Eingangsstrom bei der seriellen Schnittstelle lesen.



Hier der Link zum Bauteil:
http://www1.conrad.de/scripts/wgate/zcop_b2c/~flNlc3Npb249UDkwV0dBVEU6Q19BR0FURTAyOjAwMDUuMDEwMi43NTVkM2JmOSZ+aHR0cF9jb250ZW50X2NoYXJzZXQ9aXNvLTg4NTktMSZ+U3RhdGU9NDEyMjU5NzU1NQ==?~template=PCAT_AREA_S_BROWSE&mfhelp=&p_selected_area=%24ROOT&p_selected_area_fh=&perform_special_action=&glb_user_js=Y&shop=B2C&vgl_artikel_in_index=&product_show_id=&p_page_to_display=DirektSearch&~cookies=1&zhmmh_lfo=&zhmmh_area_kz=&s_haupt_kategorie=&p_searchstring=infrarotsensor&p_searchstring_artnr=&p_searchstring_manufac_artnr=&p_search_category=alle&fh_directcall=&r3_matn=&insert_kz=&gvlon=&area_s_url=&brand=&amount=&new_item_quantity=&area_url=&direkt_aufriss_area=&p_countdown=&p_80=&p_80_category=&p_80_article=&p_next_template_after_login=&mindestbestellwert=&login=&password=&bpemail=&bpid=&url=&show_wk=&use_search=3&p_back_template=&template=&kat_save=&updatestr=&vgl_artikel_in_vgl=&titel=&darsteller=&regisseur=&anbieter=&genre=&fsk=&jahr=&jahr2=&dvd_error=X&dvd_empty_error=X&dvd_year_error=&call_dvd=&kna_news=&p_status_scenario=&documentselector=&aktiv=&gewinnspiel=&p_load_area=$ROOT&p_artikelbilder_mode=&p_sortopt=&page=&p_catalog_max_results=20


Aber nochmal zurück zu meinem Vorhaben:

Wenn ich z.B. 100 Umdrehungen/min haben möchte, so habe ich ein anderes PWM Signal, als wenn ich 1000/Umdrehungen/min haben möchte.

Wie sieht es aber aus, wenn eine Kraft auf die erzeugte Kraft "bei 100 Umdrehungen/min" wirkt. Dementsprechend kann ich doch eventuell das PWM Signal, wie bei 1000/Umdrehungen/min benötigen.

Wiegesagt theoretisch.

Um die Umdrehung zu messen, verwende ich das Bauteil von conrad.
Habe ich mehr Umdrehung, benötige ich weniger PWM, habe ich weniger Umdrehung, benötige ich mehr PWM.

Hoffe, das man es bisher verstanden hat.

@ThePuppetMaster = Was für eine Taktrate soll ich verwenden, beim generien des PWM Signals?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 10.04.2009, 17:37    Titel: Antworten mit Zitat

nun .. das komtm auf viele dinge an. z.B. auf die verwendeten Bauteile, ob es eine H-brücke wird, wie schnell die erzeugung technisch umsetzbar wird (hardware pwm, software pwm) usw.

gängig sind jedoch rund 500 Hz bis 1KHz taktrate.

für die umdrehungsmessung kannst du den code auch sehr simpel auslegen.

Einfach die abstände zwischen 2 Pulse messen, und das ganze einfach mit prozentrechnugn auf die PWM umrechnen. Hierbei kannst du, wenn du es optimeiren willst, auch noch die zeit der PWM zyklen hinzurechnen.
z.B. hast du 255 PWM schritte von 0 bis vollspeed. läuft der Motor mit 255 PWM dann misst du die zeit, die der motor braucht, um eine umdrehung zu machen, und wie viele durchläuft dein PWM braucht, um diese eine umdrehung zu machen. dann misst du das gleich nochmal bei 127ger PWM. dann hast du ein rechnungsmodell mit dem du anhand der zyklenzahl sowie der PWM breite auf die Umdrehungsgeschwindigkeit schliessen kannst. Dann sollte das ausrechnen der UPM bezugnehmend auf zu setzende PWM breite kein problem sein.

du kannst auch ein doppeltes PWM nutzen. quasi ein PWM vom PWM. Du änderst dann nciht nur die PWM breite bei 500 Hz (was 500 Zyklen a 255 Schritte) sondern auch die anzahl der entsprechenden lastigkeit.

Damit kannst du die umdrehungsgeschwindigkeit sehr präzise einstellen, weil du die 255 Schritte einfach nochmal verdoppelst. Sprich, du kannst wechselweise 255, 128 255 128 pulse erzeugen. Dann hast du quasi eine feinmodulation des PWM. Dabei wird es auch sehr stabil, als wenn man hochfrequenter (1KHz oder 10KHz) arbeitet. Zwar ist das vom technischen standpunkt gesehen, idealer, jedoch ist es sehr viel störabängiger, was andere geräte betrift. Zusätzlich ist die umsetzung auch nicht einfahc, da man hier schon auf Hardware zurückgreifen sollte.

Man kann das z.B. mit der Soudnkarte machen, die kann bis 22KHz ausgeben. Wird zwar kein Rechteck mehr sein, aber sinus mit nem schmitttriger dahinter sollte noch ausreichend sein.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz