Forum: Mikrocontroller und Digitale Elektronik MSP430 PWM Ausgang umschalten Strom auf P1.2


von Ben P. (ben5en)


Lesenswert?

Guten Abend,

ich möchte einen H-Brücke aufbauen und nutze dafür zwei IR 2104 MOSFET 
Treiber. Der angeschlossene Motor soll die Drehrichtung ändern können. 
Der Betrieb ist wie folgt gedacht: Einer der unteren (abhängig von der 
gewünschten Drehrichtung) MOSFETs ist dauerhaft an. Hierfür muss SD high 
und IN low sein (PWM Signal aus). Eine Seite der H-Brücke schaltet dann 
im Wechsel den HS - und LS MOSFET (abhängig von der gewünschten 
Drehzahl).

Mir reicht also ein PWM Signal, welches ich auf zwei unterschiedlichen 
BIT's ausgeben könnte. Ich nutze einen MSP430 G2553 - dieser kann auf 
P1.2 & P1.6 das (PWM) TA0.1 Signal ausgeben. Via Befehl möchte ich 
zwischen den Ausgängen umschalten:

Einmal soll bspw. an BIT6 das PWM Signal anliegen und BIT2 soll low 
sein.
Für einen Drehrichtungswechsel kehrt sich die eben genannte 
Konstellation um.
1
//Der Wert von "y" wird via Taster geändert  
2
switch(y)
3
          {
4
            case(0):
5
              {
6
              P1DIR &= ~BIT6;        // P1.6 Input
7
              P1SEL &= ~BIT6;        // P1.6 Option select
8
              delay_ms(10);
9
              P1DIR |= BIT2;                          // P1.2 Output
10
              P1SEL |= BIT2;                          // P1.2  Option select
11
              lcdSetText("Drehrichtungs-",0,0);
12
              lcdSetText("wechsel",0,1);
13
              delay_s(2);
14
              lcdClear();
15
              }
16
            break;
17
18
            case(1):
19
              {
20
              P1DIR &= ~BIT2;        // P1.2 Input
21
              P1SEL &= ~BIT2;        // P1.2 Option select
22
              delay_ms(10);
23
              P1DIR |= BIT6;                          // P1.6 Output
24
              P1SEL |= BIT6;                          // P1.6  Option select
25
              lcdSetText("Drehrichtungs-",0,0);
26
              lcdSetText("wechsel",0,1);
27
              delay_s(2);
28
              lcdClear();
29
              }
30
            break;
31
          }

Testweise habe ich keinen Motortreiber sonder 2 Led's angeschlossen. 
Leider musste ich feststellen, dass auf P1.2 ein geringer (bislang noch 
nicht gemessener) Strom fließt. Die LED leuchtet glimmt. Der elektrische 
Aufbau ist auf einem Steckboard erfolgt und wurde mehrfach überprüft.


Auch habe ich gesondert versucht die PWM einzeln auf die Bit's auzugeben 
und komme zu selbigen Resultat.

Folgend:
Aufbau auf Steckboard. LED an P1.2 und P1.6 mit dem Launchpad verbunden 
und im Wechsel mit BIT2 und BIT6 debuggt. LED an P1.2 glimmt wenn kein 
PWM Signal anliegt. Lege ich das PWM Signal auf P1.2 und ist das 
Tastverhältnis 0, erlischt auch die LED

1
#include "msp430g2553.h"
2
3
unsigned long duty_cycle=0;
4
void main(void)
5
{
6
   WDTCTL = WDTPW  + WDTHOLD;        // stop WDT
7
8
   TACTL=TASSEL_2 + TACLR;        // SBCLK + TA Reset
9
   P1DIR  |=    BIT6;               // P1.2 -> output
10
   P1SEL  |=    BIT6;            // P1.2 option select
11
   TACCR0  =    1023;               // CCR0 -> cycle time (10ms)
12
   TACCR1  =     duty_cycle;         // CCR1 -> duty cycle
13
   TACCTL1  =     OUTMOD_7;           // reset/set
14
   TACTL   |=     MC_1;              // up-mode
15
16
17
   // ADC configuration,V+ref=3V,V-ref=0V,Channel=A0
18
19
   ADC10CTL0  = ADC10ON + ADC10IE;
20
21
   ADC10AE0   |= INCH_0;           // channel A0
22
23
   ADC10CTL0 |= ENC + ADC10SC;       // Start Conversion
24
25
   _BIS_SR(LPM0_bits +GIE);          // Go to LPM0,interrupts enabled
26
}
27
28
// interrupt
29
30
#pragma vector = ADC10_VECTOR
31
__interrupt void adc10_interrupt(void)
32
{
33
__delay_cycles(5);
34
  ADC10CTL0 |= ENC + ADC10SC;  // Start Conversion again
35
  duty_cycle=(unsigned long)ADC10MEM;
36
              TACCR1=duty_cycle;
37
38
}



Ist ein Fehler im obigen Code oder woran könnte es liegen?
Vielen Dank.

von Clemens L. (c_l)


Lesenswert?

Um einen Pin auf Low setzen zu können, muss er als Ausgang konfiguriert 
sein.

Ein Input-Pin kann die LED nicht glimmen lassen, außer du hast noch 
einen Pullup/-down konfiguriert.

Wenn sich P1.2 und P1.6 bei gleicher Konfiguration verschieden 
verhalten, dann ist das entweder ein Fehler in deiner Schaltung, oder 
ein defekter Pin.

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.