Forum: Mikrocontroller und Digitale Elektronik Cortex M3 PWM (Timer) Problem


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.
von kappos (Gast)


Lesenswert?

Hallo zusammen,
ich habe ein sehr merkwürdiges Problem bei einem Cortex M3 LPC1317.

Muss dazu etwas ausholen und zwar bin ich gerade dabei einen BLDC Regler 
zu bauen. Klappt soweit auch alles nur bin ich gerade dabei die BEMF zu 
realisieren. Jetzt folgendes Problem.

Habe meine PWM auf CT16_B0_Mat2 gelegt.

Folgender Code beschreibt die Konfig:
1
//enable ct16b0 clock
2
LPC_SYSCON->SYSAHBCLKCTRL |=  SYSAHBCLKCTRL_CT16B0; 
3
    
4
// Set pulse width
5
LPC_CT16B0->MR3= this->pulseWidth;
6
//Bit 10 MR3R Reset on MR3
7
LPC_CT16B0->MCR = 0x400;
8
9
10
LPC_IOCON->PIO1_15 |= 0x02;
11
// Set duty cycle  
12
LPC_CT16B0->MR1=CalculateDutyCycleValue(this->dutyCycle,this->pulseWidth);
13
//External Match Register Settings for PWM 
14
LPC_CT16B0->EMR= TMR16B0EMR_EMC2_TOGGLE | TMR16B0EMR_EM2;
15
//Enable PWM
16
LPC_CT16B0->PWMC = TMR16B0PWMC_PWM2_ENABLED |TMR16B0PWMC_PWM3_ENABLED;

Die PWM funktioniert auch super!


Habe jetzt nun ein Phase der BEMF auf
AD5/CT32_B1_Mat3 gelegt

Und jetzt tritt das Problem auf das der Controller sich aufhängt.

Auf dem Oszi sieht man das die PWM immer kleiner wird und sobald diese 
weg ist hängt der Controller.

Meiner Meinung nach ist es folgendes Problem
1
//Bit 10 MR3R Reset on MR3
2
LPC_CT16B0->MCR = 0x400;
hier wird der dritte Counter zum Reset benutzt und das ist irgendwie das 
Problem. Habe schon versucht es auf den ersten Counter zu hängen 
allerdings  ist meine Verdrahtung so das dort dann ebenfalls eine Phase 
auf  AD5/CT32_B1_Mat1 liegt und somit haut es ihn wieder hin.

Was ich nicht verstehe ist das ja eigentlich AD5/CT32_B1_Mat3 der 32bit 
Counter ist und ich nutze für meine PWM die 16bit Counter.
Ich versteh es einfach nicht. Jemand eine Idee?

Viele Grüße
kappos

von kappos (Gast)


Lesenswert?

Hat niemand eine Idee?

von Jim M. (turboj)


Lesenswert?

Bei den spärlichen Infos ist es kein Wunder, dass niemand antworten 
kann.
Es fehlt u.a. die Konfiguration der Interrupts. Hat man da einen Fehler 
gemacht - wie Flag löschen vergessen - hängt sich der Controller 
scheinbar auf, da das Hauptprogramm nicht mehr weiter läuft.

Versuche mal, Das Problem in einem kurzen Programm nachzustellen und 
poste das hier.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.