mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DC-Motor mit PWM auf LPC23xx controller


Autor: Mueller Best's (frankyfarell)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Ich wünsche mir jemand mir zu helfen.
ich will ein DC motor über PWM auf  Keil kontroller LPC2378 steuern. 
aber mein Code funktioniert nicht. Hier ist den Code . kann mir jemand 
sagen was noch zu tun ist??(ich habe noch nie, was mit Microkontroller 
zu tun gehabt). ein Beispiel code vorschlag wäher auch gut. ich würde 
,das das Motor sich dreht. Kanke


/*********************************************************************** 
******
 *   pwm.c:  main C entry file for NXP LPC23xx/24xx Family 
Microprocessors
************************************************************************ 
******/
#include "LPC23xx.h"                        /* LPC23xx/24xx definitions 
*/

 volatile unsigned  match_counter1;

/*********************************************************************** 
*******
** Function name:    PWM_Init
************************************************************************ 
******/
unsigned long PWM_Init( unsigned long ChannelNum, unsigned long cycle )
{
  if ( ChannelNum == 2 )
  {
  match_counter1 = 0;
  //PWM
  PINSEL4  = 0x00000080;  //set 7:6 P2.3  PWM1.4  ->pin 100
  FIO2DIR  = 0x00000080;  /* P2.3 defined as PWM1.4 Outputs         */
    FIO2CLR  = 0x00000080;  //
  //OUTPUT motor
  PINMODE3 = 0;       // P1.16-P1.31 push pull (default)
  FIO1MASK = 0;       // all pins are affected by FIOSET,FIOCLR,FIOPIN 
(default)
  FIO1DIR  = 0x90000000;   // Pin P1.31 and P1.28 are Motor output
  FIO1SET  = 0x80000000;   /* Set P1.31 on high for Forward Motro 
Direction*/
  //FIO1SET  = 0x40000000;   /* Set P1.31 on high for Backward Motro 
Direction*/
  PCONP |=   ( 1 << 6)          /* Enable PWM1 clock */
           | ( 0 << 0) /* Disable counter */
       | ( 1 << 1); /* Reset PWM */

  PWM1TCR  = 0x00000008;      /*bit 3 -> Enable PWM1*/
  PWM1PR   =72000000/64;      /* count frequency:Fpclk */
  PWM1CTCR = (0x00 << 0); /* Counter uses prescaler */
  PWM1MCR  =(1 << 0)|(1 << 1); /* Bit 0 and 1:->interrupt on PWMMR0, 
reset on PWMMR0*/
  PWM1MR0  = cycle;        /* set PWM cycle-rate */
  PWM1MR1  = cycle * 5/6 ;    /*Set rising edge for PWM1*/
  PWM1MR2  = cycle  * 2/3 ;    /*Set falling edge for PWM1 */
  //PWM1MR3 = cycle cycle * 1/2 + offset;    /*Set */
  /* all PWM latch enabled */
  PWM1LER = 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 
6;
  }

  return (1);
}

/*********************************************************************** 
*******
** Function name:    PWM_Set
************************************************************************ 
******/
void PWM_Set( unsigned long ChannelNum, unsigned long cycle, unsigned 
long offset )
{
  if ( ChannelNum == 2 )
  {
  PWM1MR0 = 0,50 ;                    /* set PWM cycle */
  PWM1MR1 = cycle * 5/6 + offset;       /*Set rising edge for PWM1*/
  PWM1MR2 = cycle  * 2/3 + offset;    /*Set falling edge for PWM1 */
  PWM1LER = 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 
6;
  }
  return;
}

/*********************************************************************** 
*******
** Function name:    PWM_Start
************************************************************************ 
******/
void PWM_Start( unsigned long channelNum )
{
  if ( channelNum == 2 )
  {
  //bit 4 ->PWM1.4 ist generated for PINSEL4
    PWM1PCR = 1<<4 |1 << 9 | 1 << 10 |1 << 11; // enable PWM1.2, PWM2, 
PWM3
  //PWM1PCR = 0x00005454;    //PWM1.2,PWM1.4 and PWM1.6 are generated 
for PINSEL4
  PWM1TCR = 0x00000001 | 0x00000008;  /* counter enable, PWM enable */
  }

  return;
}

/*********************************************************************** 
*******
** Function name:    PWM_Stop
************************************************************************ 
******/
void PWM_Stop( unsigned long channelNum )
{
  if ( channelNum == 2 )
  {
  PWM1PCR = 0;
  PWM1TCR = 0x00;    /* Stop all PWMs */
  }
  return;
}

/*********************************************************************** 
*******
**   Main Function  main()
************************************************************************ 
******/
int main (void)
{
  unsigned long cycle = 1200, offset = 0;

  PWM_Init( 2, 0 );
  PWM_Set( 2, cycle, offset );
  PWM_Start( 2 );
  /*Loop for ever*/
  while ( 1 ){ }

 // PWM_Stop( 2 );
 // return 0;
}

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

dieser Code sagt uns leider nicht besonders viel, wenn man den 
Schaltplan dazu nicht hat.

>ich habe noch nie, was mit Microkontroller zu tun gehabt

Wäre es dann nicht besser, zunächst an einigen einfacheren Controllern 
zu üben? Ein Arm ist nicht besonders einfach für den Einstieg.

>auf  Keil kontroller LPC2378 steuern.

Der genannte Controller ist von NXP semiconductor.

Ich gehe davon aus, dass du meinst, dass du einen Keil Compiler zum 
Programmieren verwendest.

Bitte poste den Schaltplan.


Viele Grüße,

Peter

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
PWM1MR0 = 0,50 ;                    /* set PWM cycle */

Hoppla!

Und solche Code Schnipsel sind gerade für den ARM etwas
dürftig. Wenn du ein Programm hast das nicht läuft können
selbst Leute die über entsprechende Hardware verfügen
das nicht ausprobieren.

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.
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.