Geregelter Aufwärtswandler 12V/24V

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

    • Neu

      Quellcode

      1. $regfile="m8def.dat"
      2. $crystal=16000000
      3. Config Lcd=20x4
      4. Config Lcdpin=Pin,Db4=PORTB.2,Db5=PortB.0,Db6=PORTD.7,Db7=PORTD.6,E=PORTD.4,Rs=PORTC.0
      5. Cursor off
      6. cls
      7. Const Fosc=16000000
      8. Const Fpwm=16000
      9. Const Prescale=1
      10. Config Adc=Single,Prescaler=Auto,Reference=Avcc
      11. Start Adc
      12. Dim Usoll_ as Word
      13. Dim Uist as Single
      14. Dim Uist_ as Word
      15. Dim Usoll as Single
      16. Dim Schritte as Word
      17. Dim Pwmwert as Word
      18. Dim Hilfsin as Single
      19. Dim C as Single 'Schrittweite single
      20. Dim Pwmfaktor as Single 'Pwmfaktor ;Regeldifferenz*Faktor
      21. Dim Pwm as Word
      22. Dim Regeldifferenz as Single
      23. Dim Adcwert as Word
      24. Dim Tastgrad as Single
      25. Dim Uin as Single
      26. Dim Uin_ as Word
      27. Pwmwert=200
      28. Pwm1a=Pwmwert
      29. Tccr1a=&B10000010
      30. Tccr1b=&B00011001
      31. Hilfsin=Fosc/Fpwm
      32. Hilfsin=Hilfsin/Prescale
      33. Hilfsin=Round(hilfsin)
      34. Schritte=Hilfsin '=1000
      35. Capture1=Schritte
      36. Config PortB.1=Output
      37. Config Pind.5=Input
      38. Regeldifferenz=0
      39. Do 'Beginn der Schleife
      40. Uist_=Getadc(5)
      41. Usoll_=Getadc(3) 'Spannung vom Poti P1 0V=Adcwert=O,5V=Adcwert=1023
      42. Uin_=Getadc(1)
      43. 'digit=5/1023 Volt=0,00489V
      44. Usoll=Usoll_ 'von word auf single bringen
      45. Usoll=Usoll*0.038798185941 'die am pin anliegende Spannung ausrechnen
      46. Uist=Uist_
      47. Uist=Uist*0.038798185941
      48. Uin=Uin_
      49. Uin=Uin*0.0157728706624
      50. Regeldifferenz= Usoll-Uist
      51. Pwmfaktor=Regeldifferenz*5
      52. If Regeldifferenz <=0 then 'Spannung geht runter
      53. C=C+Pwmfaktor
      54. End if
      55. If Regeldifferenz >=0 then
      56. C=C+Pwmfaktor
      57. End if
      58. C=round(C)
      59. If C>1001 then
      60. C=1000
      61. End if
      62. If C<0 then
      63. C=1
      64. End if
      65. Adcwert=Getadc(5)
      66. Pwm=C
      67. Pwm1a=Pwm
      68. Tastgrad=Pwm/10
      69. Locate 1,1:Lcd "Uin:"
      70. Locate 1,8:Lcd fusing (Uin,"#.#");"V";" "
      71. Locate 2,1:Lcd "Usoll: "
      72. Locate 2,8:Lcd fusing (Usoll,"#.#");"V";" " 'Anzeige der Spannung auf dem Display
      73. Locate 3,1:Lcd "Uist: "
      74. Locate 3,8:Lcd fusing (Uist,"#.#");"V";" "
      75. Locate 4,1:Lcd "Pwm: "
      76. Locate 4,8:Lcd fusing (Tastgrad,"#.#");" %";" " 'Schreibt Leerzeichen über die überflüssigen Zeichen.
      77. 'Locate 4,1:Lcd "ADC: ";Adcwert
      78. Waitms 100
      79. Loop 'Schleife, die Spannung wird neu berechnet.
      80. End
      Alles anzeigen
      dies ist das programm das funktioniert, und das Projekt ist vom Lehrer abgenommen worden.
    • Neu

      Was ist das für ein Lehrer? Die Regelung bei zu niederer und zu hoher Uist ist gleich? Zeile 71 und Zeile 75. Nur 10 Regelungen/Sekunde?

      Trotzdem, Glückwunsch.

      Edit: stimmt nicht, was ich schrieb. Die Regelung passt schon, nur die 2 if-Abfragen hätt's nicht gebraucht.
      Raum für Notizen

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

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

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

    • Neu

      Meiner Meinung nach Ziel (Aufgabenstellung) nicht erreicht.

      1. Vorgabe der PWM-Frequenz von 100kHz. Im Code eingestellt 1kHz.
      2. Die Regelung der Ausgangsspannung kann so nicht funktionieren. Denn wenn die Regeldifferenz positiv ist, müsste die Ausgangs-Spannung abgeregelt werden. Siehe Zeile 74-76. Variable C entspricht dem Integral, also der Summe der Regeldifferenz * Ki (5) jeder Einzelmessung. Das Vorzeichen ist falsch.


      Die Regelung ist mit 10 Messungen/Nachregelungen der Ausgangsspannung pro Sekunde nicht ausreichend. Das hat @tschoeatsch bereits korrekt festgestellt.

      Unnützer Code ist auch vorhanden.
      • Zeile 46 (Pins sind nach dem Einschalten bereits als Input konfiguriert). Muss also nicht explizit nochmal als Input konfiguriert werden.
      • Zeile 87. der eingelesene ADC-Wert wird nicht weiter verwendet. Außerdem wurde der Wert in Zeile 53 bereits in Variable Uist_ eingelesen.


      Was OK ist, sind die Berechnungen der Eingangs- Ausgangs- und der Sollspannung.

      Ob die Regelung wirklich funktioniert mag ich an der Stelle doch sehr bezweifeln.
      (Zum Glück bin ich kein Lehrer rolling: )
      Kaum macht man es richtig - und schon geht's!
    • Neu

      YdnAm schrieb:

      und das Projekt ist vom Lehrer abgenommen worden
      a_14_3ef964b0

      Mitch64 schrieb:

      Der Lehrer kiegt ne 5.
      Er schreibt nun nicht ob und wie es benotet wurde. Zum Bestehen (>50%) ist es allemal gut da waren bestimmt schlechtere dabei.
      Allerdings wenns belastet wird "explodiert" es (if c >1001... )bei 1000 machts schon einen Dauerkurzschluß)

      Mitch64 schrieb:

      Ob die Regelung wirklich funktioniert mag ich an der Stelle doch sehr bezweifeln
      Tut sie - versuchs (Simmulator)
    • Neu

      Hm, wenn Usoll>Uist ist, wird Pwm1a größer, das passt doch, breiterer Puls ergibt höhere Uist. Andererseits wäre doch der A-Kanal nicht der top-Wert und man müsste mit dem B-Kanal die Pulsbreite regeln?. Funktioniert das jetzt nur wegen dem falschen konfigurieren des timers?
      Raum für Notizen

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

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