Ich habe einen FET zerstört

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Wegen der Herleitung der PWM Werte:

      Du hast ja eine Referenzspannung, die du für den ADC verwendest. Ich nehme jetzt mal 5V AREF an.
      Dann hast du eine Poti für Sollwert und du hast ein Spannungsteiler für die Ausgangsspannung.

      Du willst Ausgangsspannung 20,4V einstellen können. Damit man das einstellen kann muss man eine höhere Ausgangsspannung als maximale Spannung annehmen. Ich nehme jetzt mal 24V als max. einstellbare Ausgangsspannung an.

      Das bedeutet, dass bei 24V ein ADC-Wert von der Ausgangsspannung von 1023 gemessen würde.
      Beim Spannungsteiler wurde folglich am Widerstand gegen Masse die gleiche Spannung wie die Referenzspannung abfallen. Bei 5V Referenz-Spannung bleiben also noch 24V-5V =19V übrig.
      Der Vorwiderstand muss also 19 / 5 mal gößer sein als der Widerstand gegen Masse.
      Nehmen wir wieder an, der R gegen Masse soll 10k Ohm haben, dann muss der Vorwidrestand 3,8* 10k Ohm = 38kOhm haben. Der nächst größere Widerstand der E12-Reige wäre dann 39kOhm.

      Durch den etwas höheren Vorwiderstand kann etwas mehr Ausgangsspannung als die geplanten 24V eingestellt werden. Macht aber nix, weil das sowieso eingestellt werden muss mit Poti.

      Jetzt zum Sollwert.
      Der Poti liefert ja 0-5V, bei AREF=5V ergeben sich (kein Zufall) die gleichen ADC-Werte wie bei der Ausgangsspannung. Heißt, wenn du Poti auf max drehst, bekommst du die max Ausgangsspannung.

      Interessant ist hierbei der gleiche Bereich des ADC-Wert für Soll-Wert und IST-Wert.

      Ein Vergleich ist simpel gemacht: Fehler(Abweichung) = ADC_Usoll - ADC_Uist

      Jetzt kommts drauf an, wie du regeln willst. In Fehler steht ja jetzt nur die Abweichung als ADC-Wert von Soll- und Istwert.

      Du kannst jetzt entweder einen PI oder PID-Regler machen oder einfach den PWM-Wert inkrementieren oder dekrementieren in Abhängigkeit von dem ermittelten Fehler.


      Das wäre im groben die Zuordnung.
    • Mitch64 schrieb:

      Jetzt zum Sollwert.
      Der Poti liefert ja 0-5V,
      Kein Poti Fixwert = 500. Nur Poti vom istwert . erspart die weitere Adc Abfrage.Tiny_Pwm.gif

      Mitch64 schrieb:

      PI oder PID-Regler machen
      Woraus konstruiere ich den P-Wert? Das einzige was wirlich stimmt ist 0=Uein Alles darüber ist absolut Lastabhängig Ich darf weder 10=10v ,15=20V voraussetzen noch 10=2mA 15=4mA. Nicht mal über die Leistung (10=1W 15=10W)

      Ich glaub ich weiß es: Über die Energie die in die Wicklung geladen wird. Die ist Abhängig von der Zeit und Tau. Bestimmt zuviel für den Tinny.
      Jetzt sag mir bitte jemand, das ich mich irre, das es viel einfacher geht.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Pluto25 ()

    • Ich gehe gleich mal im Anschluss auf deine Fragen ein.
      Hier aber erst mal ein Beispiel, wie ich das ansetzen würde.

      BASCOM-Quellcode

      1. $Regfile = "attiny13a.dat"
      2. $Crystal = 96000000
      3. $hwstack = 10
      4. $swstack = 10
      5. $framesize = 10
      6. ' Pinbelegung Tiny13a
      7. ' -----
      8. ' ADC Soll 1 | | 8 VCC
      9. ' ADC Ua 2 | | 7
      10. ' 3 | | 6
      11. ' GND 4 | | 5 OC0A - PWM
      12. ' -----
      13. ' Konfiguration
      14. Const PWMPowerMax = 150 ' Begrenzung Ausgangsleistung [Bereich 0-255]
      15. ' PWM mit 8-Bit und 37500Hz
      16. OCR0A = 0 ' keine Ausgangsspannung
      17. Config Timer0 = PWM , Prescale = 1 , Compare_A_PWM = Clear_Up , Clear Timer = 1
      18. ' ADC-Konfigurieren
      19. Config ADC = Single , Prescaler = Auto , Reference = AVCC
      20. ' Benötigte Variablen
      21. Dim Usoll as Word ' Poti Sollwert (0-5V)
      22. Dim UIst as Word ' Rückmeldung Ausgangsspannung
      23. Dim PWMPower as Byte ' PWM-Wert für Registerzuweisung
      24. Do
      25. ' Messung Soll und Istwert
      26. USoll = GetADC(0) ' Mux-Eingänge anpassen
      27. UIst = GetADC(3) ' Mux-Eingang anpassen
      28. If USoll < Uist then
      29. If PWMPower < PWMPowerMax then Incr PWMPower ' aufregeln mit Begrenzung
      30. ElseIf USoll > Uist then
      31. If PWMPower > 0 then Incr PWMPower ' abregeln mit Begrenzung
      32. End If
      33. OCR0A = PWMPower ' jetzt Regler nachsteuern
      34. Waitms 2 ' ca. 500 Messungen je Sekunde
      35. Loop
      Alles anzeigen

      Das wäre jetzt eine einfache Regelung ohne PID.
      Da wird einfach bei Unterspannung der PWM-Wert erhöht und bei Überspannung verringert.
      Jeweils um den Wert 1.

      Während du den Code anschaust, schau ich mir deine Schaltbild und deine Fragen an.
    • Hey @Mitch64, kennst du dich mit den Reglern aus? Wenn ja, könntest du nicht mal einfache Beispiele von den Varianten/Kombinationen in's Lexikon einstellen? Wenn ich in wikipedia schaue, sehe ich nur kryptische Formeln. Hab' zwar Abi in Physik und Mathe gemacht, aber inzwischen soviel versoff.., äh, vergessen, dass ich nur noch ratlos drauf glotze. Das wäre doch mal ein schönes Thema, oder?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Pluto25 schrieb:

      Woraus konstruiere ich den P-Wert? Das einzige was wirlich stimmt ist 0=Uein Alles darüber ist absolut Lastabhängig Ich darf weder 10=10v ,15=20V voraussetzen noch 10=2mA 15=4mA. Nicht mal über die Leistung (10=1W 15=10W)

      Ich glaub ich weiß es: Über die Energie die in die Wicklung geladen wird. Die ist Abhängig von der Zeit und Tau. Bestimmt zuviel für den Tinny.
      Jetzt sag mir bitte jemand, das ich mich irre, das es viel einfacher geht.
      Du sagst 500 ist dein Sollwert. Und deine Schaltung soll soweit regeln, bis die Rückmeldung ebenfalls 500 als ADC-Wert liefert. Richtig?

      Wenn man das durchrechnet mit Referenz-Spannung = 5 V, komme ich auf eine einstellbare Ausgangsspannung von 6V bis 19,4V. Das ist überschlagen.

      Wie sich die P, I und D-Werte zusammensetzen ist hier ausführlich erklärt: Roboternetz.de

      Und ja, du hast recht, es geht um die Energie, die in der Spule gespeichert wird.
      Und das hängt mit dem Tau zusammen.

      Es gibt aber Online-Rechner, die dir Helfen, für die benötigte Ausgangsleistung die richtige Spule bei gegebener PWM-Frequenz zu berechnen. Hier mal etwas Theorie. Dimensionierung von Schaltnetzteilen.
    • Mitch64 schrieb:

      für die benötigte Ausgangsleistung die richtige Spule bei gegebener PWM-Frequenz zu berechnen
      Das wird erst interessant bei Platznot(Größe) oder in Großserienfertigung(Preis). Bei den paar Prototypen kann ich die Wicklung mit reichlich Reserve auslegen.
      Die Beiden Adc Abfragen und die 2 waitms verzögern die Anpassung erheblich. Bei gleichbleibender Belastung kein Problem und einen Audioverstärker darf ich auch an meine Lösung (ca3000 Abfragen) nicht klemmen.
      Die Spannung reicht von ca 12 bis ca 40 (die 500 sind ca 2,5V als Sollreferenz))

      Diese Lösung setzt die Timer Register auch so (Mode 3 nicht 7) dafür steigt der PWMPower wenn Uist größer Usoll . Dann stiege Uist bis die Funken fliegen ;)
    • Mitch64 schrieb:

      du weist ja alles besser als ich.
      Ja eben nich. Vieles weiß ich ja gerade wegen/von Dir. Wenn ich besser wüst würds ja besser gehen.
      Wir schreiben mit verschiedenen Rangehensweisen nahezu identisdche Codes. Mal Abgesehen von Flüchtigkeitsfehlern (mod7/Pwmpower).
      Aber dieser ganze Threat hat nun dazu geführt das es arbeitet.
      Noch verbesserungsbedürftig aber es rennt a_448_c66dc889


      tschoeatsch schrieb:

      nur (einfache) Beispiele für Regler.
      Da gibt wirklich keine schnelle Gute Ergebnisse . Wiki haut da richtig rein, Michaels Link beschreibt nur den I Regler . Eine simple Auto analogie:
      P-Regeln Wenig gas langsam, viel gas schnell fahrn - Das fehlt noch
      I-Regler Ortschaft 49 ein bischen gas dazu 51 etwas gas weg. Das macht unser Programm
      D-Regeln auf der Kuppe gas wegnehmen, vorm berg viel gas drauf - Das macht Yanams Programm

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • OK

      Ich habe bewusst Mode 3 beim tiny13a verwndet, weil das oben ja gesagt wurde.
      Hier ist der Topwert fix auf 255.
      Damit hast du eine PWM-Frequenz von 9600000/256 = 37500 Hz.
      Und kannst Regeln mit OCR0A = 0 bis 255.

      Die 2 ms kannst du weglassen. im dem Codebeispiel von mir.

      Hier der korrigierte code.

      BASCOM-Quellcode

      1. $Regfile = "attiny13a.dat"
      2. $Crystal = 96000000
      3. $hwstack = 10
      4. $swstack = 20
      5. $framesize = 10
      6. ' Pinbelegung Tiny13a
      7. ' -----
      8. ' Reset 1 | | 8 VCC
      9. ' ADC Ua 2 | | 7
      10. ' ADC Soll 3 | | 6
      11. ' GND 4 | | 5 OC0A - PWM
      12. ' -----
      13. ' Konfiguration
      14. Const PWMPowerMax = 150 ' Begrenzung Ausgangsleistung [Bereich 0-255]
      15. ' PWM mit 8-Bit und 37500Hz
      16. OCR0A = 0 ' keine Ausgangsspannung
      17. Config Timer0 = PWM , Prescale = 1 , Compare_A_PWM = Clear_Up , Clear Timer = 1
      18. ' ADC-Konfigurieren
      19. Config ADC = Single , Prescaler = Auto , Reference = AVCC
      20. ' Benötigte Variablen
      21. Dim Usoll as Word ' Poti Sollwert (0-5V)
      22. Dim UIst as Word ' Rückmeldung Ausgangsspannung
      23. Dim PWMPower as Byte ' PWM-Wert für Registerzuweisung
      24. Do
      25. ' Messung Soll und Istwert
      26. USoll = GetADC(2) ' Mux-Eingänge anpassen
      27. UIst = GetADC(3) ' Mux-Eingang anpassen
      28. If USoll < Uist then
      29. If PWMPower > 0 then Decr PWMPower ' abregeln mit Begrenzung
      30. ElseIf USoll > Uist then
      31. If PWMPower < PWMPowerMax then Incr PWMPower ' aufregeln mit Begrenzung
      32. End If
      33. OCR0A = PWMPower ' jetzt Regler nachsteuern
      34. Waitms 2 ' ca. 500 Messungen je Sekunde
      35. Loop
      Alles anzeigen
      Der Code nur nochmal wegen der Richtigstellung der Zeilen 38 - 36.

      Im Code wird der OR0A-Pin High, wenn der Zähler überläuft und den Wert 0 hat, und Low, wenn der Zähler der Wert von OCR0A erreicht.

      Eine Spule kannst du weder beliebig klein noch beliebig groß machen. Das ist Fakt!!!

      Und jetzt nochmal zu deinem Problem:
      Es scheint so als redest du mal vom Mega 8 und dann wieder vom tiny13a. Daher auch das durcheinander mit der Timer-Konfiguration. Deshalb habe ich auch den obigen Code hier rein gestellt.

      Also nochmal bitte im Klartext, welchen Controller nimmst du aktuell und was exakt funktioniert nicht.
    • Bezüglich Regler habe ich weiter oben einen Link zu Roboternetz eingestellt.
      Da mal etwas weiter untn schauen.
      Ist gut erklärt, was es mit den P, I und D- Reglern auf sich hat und wie man das in Bascom macht.

      Ich werde das hier nicht explizit ausführen.

      Da du eine Strombegrenzung willst, beim Tiny aber alle Pins verbraucht sind, musst du wohl noch einen dranbauen.
      Oder wie ist da deine Idee.
    • Mitch64 schrieb:

      welchen Controller nimmst du aktuell
      den Mega8 weil ich noch keine Zeit hatte den tinny zu löten. Er war startbereit weil dort Ydnams Programm drauf getestet wurde.

      Mitch64 schrieb:

      noch beliebig groß machen
      warum nicht?

      Mitch64 schrieb:

      was exakt funktioniert nicht
      Kein P-Verhalten Hießt Spannung bricht ein bei last und donnert hoch bei starker Lastabnahme.
      Aber in dem Punkt waren wir uns einig das das wohl garnicht/nur über die Spulenenergieberechnung geht.
      In den geplanten Einsätzen könnte ich damit leben. Ob es sich zum Laptop-laden eignet müsste noch versucht werden.
      Was aber wirklich noch irgendwie reinmuß ist eine Strombegrenzung.

      Mitch64 schrieb:

      Bezüglich Regler habe ich weiter oben einen Link zu Roboternetz eingestellt.
      Den hab ich eben gesucht. Kann man die irgendwie kenntlicher machen. Glücklicherweise hat Tscheoeatsch ihn auch übersehen- da stehe ich nicht ganz wien Volltrottel da a_71_f9c57bbe

      Ich hab gerade mal die Codes verglichen. Wäre der SwStak übergelaufen ? Oder Sicherheitsreserve?
      Den Adc Soll am Reset hielt ich für mutig aber machbar solange der wert zwischen 3,5 bis 5V ist.
      Würde das wirklich gehen? Das Datenblatt erklärt deutlich das er nicht geschaltet werden kann aber nicht ob er als Adc Eingang auch abgeschaltet wird solange er als Rest gefust ist.
      Ist es ein Vorteil beide Adcs zu nutzen?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Warum kann man die Spule nicht beliebig groß machen?
      Weil das zu starken Verlusten in der Spule führt. Der Wirkungsgrad fällt, Spule wird warm. Dein Ausgangsstrom sinkt.

      Deine Spule muss Peak-Ströme vom 3-fachen des max. Ausgangsstroms aushalten. Da kannste nicht mal kurz 1000 Windungen mehr drauf hauen.
      Wenn du das genauer wissen willst suche im Netz bezüglich Schaltnetzteil-Auslegung / Berechnung und lese dich ein. Ich kann dir das in einem Satz auch nicht alles erklären.

      Kurz zur Spulenberechnung:
      Wenn du einen Wandler aufbaust, musst du ja irgendwie festlegen, in welchem Tastverhältnis sich die PWM bewegen muss, damit du deine gewünschten Ausgangsspannungen erreichst.
      Ist deine Spule zu kein, reicht dein max. Tastverhältnis möglicherweise nicht aus, um am Ausgang die gewünschte Energie bereitzustellen. Ist sie zu groß gibt es neben den oben erwähnten Effekten auch den Punkt, dass sie wegen der zu hohen Induktivität nicht richtig aufgeladen werden kann und damit wieder die Energie am Ausgang fehlt.

      Wenn du eine fixe Ausgangsspannung willst, hängt das Tastverhältnis auch von der Eingangsspannung-Schwankung ab. Z.B. 10-14V. Das muss die PWM mit dem Tastverhältnis ausgleichen können.
      Daher sollte das Tastverhältnis irgendwo in einem mittleren Bereich liegen, z.B. 50%
      Und genau dafür sollte die richtige Induktivität ausgelegt werden. Natürlich hat man da auch etwas Spielraum.

      Zeig doch mal deinen Code her, wie er aktuell aussieht.
    • Mitch64 schrieb:

      dass sie wegen der zu hohen Induktivität nicht richtig aufgeladen werden kann
      Das wäre die Lösung für mein Strombegrenzungsproblem. Sie hätte aber dann Dimensionen die ich nicht mal in betracht gezogen hätte. hunderte Windungen 6qmm , der Widerstand muß ja klein bleiben ;)
      Zu kleine erkennt man schnell Sie wird warm der Wirkunsgrad sinkt ins Bodenlose - Kurz man hat ne Heizung gebaut.
      Der Code ist fast noch der alte:

      Quellcode

      1. $regfile = "m8def.dat"
      2. $crystal = 8000000
      3. $hwstack = $40
      4. $swstack = $40
      5. $framesize = $100
      6. $eepleave
      7. '$baud = 9600
      8. '$sim
      9. 'b0=Db4 b1=PWM b2=Bled b3=Mosi b4=Mi/Db5 b5=Sk/Rs b6=nc b7=nc
      10. 'c0=Usoll c1=Uist c2=Pmax c3=nc c4=Sda c5=Slc c6=/res c7=nu
      11. 'd0=Rx d1=Tx d2=dir d3=nc d4=nc d5=Db7 d6=E d7=Db6
      12. 'Solarplatine M8 2 Relais
      13. Ddrb = &B00110111
      14. Ddrc = $f0
      15. Portc = $f0
      16. Ddrd = $ff
      17. Config Adc = Single , Prescaler = 64 , Reference = Avcc
      18. Dim Uist As Word , Pmax As Word , Tempw As Word
      19. Dim Uisl As Byte At Uist Overlay
      20. Dim Uish As Byte At Uist + 1 Overlay
      21. Dim Pwm As Integer
      22. Pwm1a = 0
      23. Tccr1a = &B10000010
      24. Tccr1b = &B00011001
      25. Capture1 = 256
      26. Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.4 , Db6 = Portd.7 , Db7 = Portd.5 , E = Portd.6 , Rs = Portb.5
      27. Config Lcd = 16 * 2 'Db7 von b1 auf D5 umlöten
      28. Lcd_backlight Alias Portb.2 : Set Lcd_backlight
      29. Initlcd
      30. Cursor Off
      31. Cls
      32. Readeeprom Tempw , 0 'Start/Brennzähler
      33. Incr Tempw 'Flashzerstörungsschutz
      34. Writeeeprom Tempw , 0
      35. Pmax = Getadc(2) 'Maximaler Pwm-Wert Einlesen
      36. If Pmax > 196 Then Pmax = 196 'Wert Spulen/Takt abhängig
      37. Lcd " Pwert " ; Pmax
      38. Tempw = Getadc(1)
      39. Locate 2 , 1
      40. Lcd "Istwert " ; Tempw
      41. Wait 3
      42. On Adcc Adcint: 'nur für Simulator?
      43. Enable Interrupts 'nur für Simulator?
      44. Admux = $41 'Adc(1) auwählen
      45. Adcsra = $ee ' Adc Freilauf starten
      46. Do
      47. nop
      48. '(
      49. Tempw = Pmax - 10
      50. If Pwm > Tempw Then
      51. Portd = 1 ' Led "überlast" Ladeendsspannung nicht erreicht
      52. Elseif Pwm < 10 Then
      53. Portd = 2 'Led Ladung fertig /Accu fehlt
      54. Else
      55. Portd = 4 'Led Accu 80%
      56. End If '
      57. ')
      58. Loop
      59. End
      60. Adcint:
      61. Uisl = Adcl
      62. Uish = Adch
      63. If Uist < 500 Then '500 mittlerer Adc Wert. Poti im
      64. Incr Pwm
      65. Elseif Uist > 500 Then 'Istwert Spannungsteiler
      66. Decr Pwm
      67. End If
      68. If Pwm > Pmax Then Pwm = Pmax 'sonst brennts
      69. If Pwm < 0 Then Pwm = 0 'sonst knallts (0-1=255)
      70. Pwm1a = Pwm
      71. Return
      Alles anzeigen