logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

MSP430 problem z uzyskaniem niskiego poboru pradu

Yoshi_80 27 Sty 2009 10:02 2963 11
REKLAMA
  • #1 6060692
    Yoshi_80
    Poziom 21  
    Witam

    Od jakiegoś czasu "trenuję" nowego MSP430F5438, generalnie jest to mój pierwszy kontakt z MSP. Procesor mam w płytce prototypowej texasa, nic do niej niejest połaczone poza zasilaniem, programator odłączam po wprowadzeniu programu.

    Mam problem z uzyskaniem niskiego poboru prądu o którym mowa w nocie katalogowej. Procesor taktuje zegarem X1 z kwarcem 32,6kHz, zegary MCLK i SMCLK to DCO 1MHz. Uzyskane przezemnie wyniki poboru prądu przy napieciu 3V to : tryb aktywny 350uA , LPM0 - 170uA , LPM3-100uA ,LPM4-99-100uA. Nijak sie to ma do tego co pisze w nocie, zastanawiam sie w czym tkwi problem.

    Generalnie pobór pradu jest mało stabilny i dość długo sie ustala, mierzyłem szeregowo wpietym mikroamperomierzem lub spadkiem napiecia na rezystorze, obie metody dawały podobne rezultaty.

    
    #include "msp430x54x.h"
    
    int main( void )
    {
      
      P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
      P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;P10DIR = 0xFF;P11DIR = 0xFF;
      
      P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
      P7OUT = 0x00;P8OUT = 0x00;P9OUT = 0x00;P10OUT = 0x00;P11OUT = 0x00; 
    
      // Stop watchdog timer to prevent time out reset
      WDTCTL = WDTPW + WDTHOLD;
    
      P7SEL |= 0x03;                            // Select XT1
    
      UCSCTL6 &= ~(XT1OFF);                     // XT1 On
      UCSCTL6 |= XCAP_3;                        // Internal load cap
      UCSCTL3 = 0;                              // FLL Reference Clock = XT1
    
      UCSCTL4 |= SELA_0 + SELS_4 + SELM_4;      // ACLK = LFTX1
                                                // SMCLK = default DCO
                                               // MCLK = default DCO
      // Loop until XT1 & DCO stabilizes
      while ( (SFRIFG1 &OFIFG))
      {
        UCSCTL7 &= ~(XT1LFOFFG + DCOFFG);       // Clear XT1,DCO fault flags
        SFRIFG1 &= ~OFIFG;                      // Clear fault flags
      }
      
      UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive strength
      UCSCTL6_H|=XT2OFF;
      
     __bis_SR_register(SCG1+SCG0+CPUOFF+OSCOFF+GIE);     //LPM4       
      
      return 0;
    }
    


    Wszelkie sugestie mile widziane :)
  • REKLAMA
  • #2 6060757
    piti___
    Poziom 23  
    Witam

    Nie znam sie na MSP ale w programie nie widzę pętli głównej programu. Jeśli usypiasz procesor (lub nie usypiasz) on się wybudza i najprawdopodobniej resetuje po obudzeniu bo kończy funkcję main().
  • REKLAMA
  • #4 6061239
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #6 6061406
    Konto nie istnieje
    Konto nie istnieje  
  • #8 6061599
    Konto nie istnieje
    Konto nie istnieje  
  • #9 6061629
    Freddie Chopin
    Specjalista - Mikrokontrolery
    ok, poprawiam sie:

    w MSP430 tryby oszczedzania energii (LPM) sa przywracane po wyjsciu z procedury obslugi przerwania, CHYBA ZE programista w kodzie przerwania doda kod, ktory owy tryb LPM wylaczy zawczasu.

    ogolnie wiec brak petli w glownym kodzie nie jest kardynalnym bledem - w programie nie ma zadnych przerwan (zadeklarowanych ani wlaczonych), wiec zasadniczo procesor sie zatrzymuje przed linia return 0; i nigdy nie wznowi pracy.

    lepiej? <:

    4\/3!!
  • REKLAMA
  • #10 6061758
    Yoshi_80
    Poziom 21  
    Witam ponownie

    Petla główna jest chyba zbedna. Generalnie w programie chodziło mi o to zeby procesor weszedł od razu w tryb LPM4 i wtedy nawet jakby petla była to nie miałaby żadnego znaczenia gdyż CPU przestaje byc taktowane a program wykonywany.

    Wg FAQ na stronie texasa aby uzyskać niski pobór najlepiej jest ustawic nieurzywane porty na wyjscie i na 0 co też uczyniłem.

    Pogrzebałem troche po necie i udało mi się uruchomić również tryb LPM5 czyli LPM4 + wyłączenie Vcore = całkowite wyłączenia procesora. Jednak w tym trybie również zamiast deklarowanych nawet 100nA mam pobór na poziomie 55uA :/ .

    Teraz ciekawostka, napiecie zasilania ma spory wpływ na pobór prądu jednak i tak obnizajac napiecie do ok 2.2 V uzyskałem pobór w trybie LPM0 na poziomie ok 100uA , LPM3/4 ok 30uA co zapewne wiąże sie z automatycznym przestawieniem Vcore z 1,8V (dla 3V Vdd) na 1,4V (2,2V Vdd).
    Najlepsze jest jednak to, że dla LPM5 spowrotem 55uA !! Coś się musi tam włączać co pożera prąd, druga sprawa niski pobór prądu deklarowany jest dla wyższego napięcia zasilania 3V i przy podobnym (3.3-3,6) chcem docelowo pracować.
  • #11 6061866
    Dr_DEAD
    Poziom 28  
    Też miałem problem swego czasu z uzyskaniem deklarowanego poboru prądu. W końcu uzyskałem wynik 1.2uA pobieranego z baterii 1.5V przy działającej przetwornicy podwyższającej napięcie do 3.3V. A procek to był MSP430F149.
    Radził bym Ci się dobrze przyjrzeć na hardware, czy wszystkie nieużywane piny procka podłączone są tak jak zaleca to producent w celu osiągnięcia minimalnego poboru prądu. Prądożerne są wejścia wiszące w powietrzu lub wejścia na których jest stan pośredni pomiędzy wysokim a niskim stanem. Mówiąc wejścia nie mam na myśli tylko pinów I/O.
  • #12 6075507
    Yoshi_80
    Poziom 21  
    Racja, problem częściowo rozwiazany. Ustawiłem port J od JTAG'a na wyjscie i 0. Pobór spadł dość drastycznie do poziomu 60uA w LPM3 i 3,5uA w LPM5 zasilajac bateria litowa 3,6V. Nie jest to jeszcze to co podaje texas ale i tak juz spora poprawa!

    edit, miałem jednego pullupa, teraz jest git ! Jednak głownym problemem był port JTAGa
REKLAMA