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