mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik frage zu C2000 F280049C von Ti mit CCS programmieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Youssef T. (ytoubla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich bin neuer in c2000 PICCOLO f280049c von Ti, ich brauche euere Hilfe 
um eine Einstellung für die ePWM.
ich habe ein Programm für die ePWM in CCS erstellt, meine ePWM sind von 
ADC abhängig, und jetzt finde ich Schwierigkeiten um die Pulse bei 
AdcResult=0 volt auf null zu setzen, ich habe mal Empfehlungen bekommen 
um die Trip zone zu benutzen, aber ich weiß nicht genau wie kann ich 
dieses Modul von Trip zone mit meinem Adc zu verbinden ?

kann jemand helfen ? Danke
VG
Yt

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Youssef T. schrieb:
> ich habe ein Programm für die ePWM in CCS erstellt, meine ePWM sind von
> ADC abhängig, und jetzt finde ich Schwierigkeiten um die Pulse bei
> AdcResult=0 volt auf null zu setzen,

Kann ich kaum glauben, denn der Wert 0 ist bei der PWM der C2000 CPUs 
nicht anders als jeder andere. Zeig uns mal deinen Quelltext als Anhang.

Autor: Youssef T. (ytoubla)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
im Anhang ist mein Programm
Danke

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Youssef T. schrieb:
> Hi,
> im Anhang ist mein Programm
> Danke

Warum eine .txt Datei? Meine Quelltexte enden meistens auf .c Wenn man 
die direkt hochlädt, werden die nämlich auch mit schönem 
Syntax-Highlighting dargestellt.

Nun gut. Du nutzt diese komischen Konfigurationsfunktionen von TI. Die 
waren nie so mein Ding. Aber sie werden schon halbwegs funktionieren. 
Deine Hauptschleife ist sehr komisch.
    while(1)
            {
        EPWM_enableADCTrigger(EPWM8_BASE, EPWM_SOC_A);
        EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP);
        EPWM_disableADCTrigger(EPWM8_BASE, EPWM_SOC_A);
        EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_STOP_FREEZE);
            }

Was soll das? Ist dir klar, daß die CPU wie wahnsinning diese Funktionen 
aufsführt? Das bewirkt im einfachsten Fall nix, im Extremfall kommt was 
durcheinander, weil die Timer immer wieder neu konfiguriert werden. Wenn 
dein Konzept stimmt und der ADC periodisch durch einen Timer getriggert 
wird, ist deine Hauptschleife leer!!

So wird das nix. Du musst eine systematische Fehlersuche starten. Du 
hast bei den Echtzeitdebugger im CCS, da kann man viel machen.

Zuerst muss mal ein gescheites Konzept her, wie die Daten vom ADC in die 
PWM geladen werden. Wo und wie passiert das? Ok du hast eine ISR
{
      Ud1 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER6);   // Messung der ADC
      if (Ud1<819)
      {
          EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_FREEZE);

      }
      else
      {
              EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_STOP_FREEZE);

              dutyCycle =(Ud1*EPWM_TIMER_TBPRD/4095);             // Formel für die Berechnung von Duty_Cycle
              EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, dutyCycle); //DutyCycle für ePWM1A
              EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_B, (EPWM_TIMER_TBPRD-dutyCycle)); //DutyCycle für ePWM1B
              

      }
     

      ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
      Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}

Dort wird ein Ergebnis gelesen. OK. Warum hältst du den Counter an? Das 
ist im Normalfall nicht nötig.

Wenn dein ADC immer durch die PWM getriggert wird, paßt das. Man liest 
den ADC und schreibt in die PWM. Fertig.

Test erstmal im CCS Debugger, ob man alle möglichen Werte in die PWM 
geschrieben bekommt. Spricht, tu mal die Zeile

// Ud1 = ADC_readResult

auskommentieren. Dann kannst du mit dem Debugger die Variable Ud1 
beschreiben und die PWM mit dem Oszi anschauen. Da muss von 
0-EPWM_TIMER_TBPRD alles funktionieren.

Die Tripzone braucht man vorerst nicht, die ist ja nur für die 
Abschaltung bei Überstrom da. Es kann aber sein, daß die Konfiguration 
dir da Probleme macht. Diese Module sind schon sehr komplex, und es 
dauert viele Tage bis man da durchsieht. Vielleicht sollte man sie 
zuerst einmal NICHT nutzen und nur einfach die PWM ausgeben. Wenn das 
läuft, geht es weiter.

Viel Erfolg

Autor: Youssef T. (ytoubla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen dank für deine Hinweise, ich suche eine Methode um meine ePWM 
auszuschalten wenn Adcresult gleich null ist, gibt es andere Möglichkeit 
außer die Tripzone

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Youssef T. schrieb:
> vielen dank für deine Hinweise, ich suche eine Methode um meine ePWM
> auszuschalten wenn Adcresult gleich null ist,

Warum sollte man das tun? Man kann einfach 0 ins PWM-Register 
reinschreiben und es kommt auch Dauer-LOW raus.

Man kann natürlich auch das IO-Pin im GPIOMUX wieder auf normales GPIO 
umstellen, dann ist die PWM auch inaktiv am Pin, egal was der Timer und 
die PWM intern machen.

Autor: Youssef T. (ytoubla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eigentlich habe ich nicht nur eine ePWM sonder 6 ePWMs und zwei davon 
sind invertiert, und wenn ich einfach 0 ins PWM-Register eingebe, kriege 
ich ja 0% von Dutycycle aber die zwei invertierte ePWMs beginnen immer 
von oben das heißt bei der Initialisierung springen immer die zwei hoch, 
und das genau will ich nicht. sie alle müssen auf Null setzen bei der 
Initialisierung bzw. bei Ud1=0.6V entspricht hier 819 dezimal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.