Forum: Mikrocontroller und Digitale Elektronik PWM Signal mit LPC1769 zur Servo Steuerung


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 Thore T. (Firma: FH Westküste) (thoret)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte den LPC1769 nutzen um ein PWM Signal zu erzeugen und damit 
Servomotoren zu steuern.
Meine Periode muss wie in dem Bild 20ms lang sein.
Der High Pegel als eispiel jetzt 1 ms lang sein.

Leider bekomme ich am am Pin P02, also dem Ausgang für das PWM1 kein 
Signal.

Hier der Code:

LPC_SC->PCONP |= 1 << 6; // Power up the PWM
LPC_SC->PCLKSEL0 |= 1 << 12; // PWM clock = microcontroller clock i.e 
the prescaler value is 1.
LPC_PINCON->PINSEL4 = (1<<0); // Configure pin p2_0 for pwm mode
LPC_PWM1->TCR |= (1 << 0) | (1 << 3); /* Enable Counters,PWM module */
LPC_PWM1->CTCR =0;
LPC_PWM1->PR = 0x0; /* No Prescalar */
LPC_PWM1->MCR = (1 << 19); // Reset timer on Match0

LPC_PWM1->MR0 = 2000000; // PWM freq = 50 Hz = 20 ms 2000000
LPC_PWM1->MR1 = 100000; // Duty Cycle of 1 ms

LPC_PWM1->PCR = (1<<9); // Enable the PWM output pin for PWM_1


Ich hoffe jemand kann mir sagen wo der Fehler liegt.
Danke

von Johannes S. (jojos)


Bewertung
0 lesenswert
nicht lesenswert
Da fehlt evtl. noch das Setzen des LER (latch enable register):
1
#define LER0_EN   (1U << 0)
2
3
LPC_PWM1->LER = LER0_EN;

von sonocke (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ACHTUNG!
Nur mit sehr scharfem Blick ist zu erkennen, dass es in Adressraum des 
1769 eine Diskontinuität (oder versteckte/nicht genutzte Adresse) 
existiert. Im Datenblatt ist zu sehen, dass auf
CR3 an Adresse 0x40018038
MR4 an Adresse 0x40018040 folgt (nicht 0x4001803C)


Normalerweise werden die Adressen als Struktur im Header definiert. 
Meiner aus LPCopen enthielt 2 Bugs:


__IO uint32_t  IR;  /*!< PWM Control read address */
__IO uint32_t  TCR;  /*!< PWM Control set address */
__IO uint32_t  TC;  /*!< PWM Control clear address */
__IO uint32_t  PR;  /*!< Capture Control read address */
__IO uint32_t  PC;  /*!< Capture Control read address */
__IO uint32_t  MCR;  /*!< Capture Control read address */
__IO uint32_t  MR[4];  /*!< Capture Control read address */
__IO uint32_t  CCR;  /*!< Capture Control read address */
__IO uint32_t  CR[4];  /*!< Capture Control read address */
/* BUG!!! 0x4001803C fehlt!!!, aus CR[4] ein CR[5] machen löst das 
Problem */
__IO uint32_t  MR2[3];  /*!< Capture Control set address */
__IO uint32_t  PCR;  /*!< Event Control clear address */
__IO uint32_t  LER;  /*!< Timer Counter register */
/* BUG!!! CTCR liegt erst bei 0x40018070, bspw. __IO uint32_t 
_undeclared[7]; */
__IO uint32_t  CTCR;

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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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