2016-04-28 3 views
1

Ich möchte den BlDC-Motor mit dem L6234-Treiber-IC mit Hilfe des Atmega 16-Controllers steuern. Logik zum Ansteuern des Motors finden Sie im Datenblatt zum Motortreiber-IC L6234 auf Seite 9. Hier ist die link for datasheet. Also, laut Datenblatt schreibe ich einen Code um meinen Motor zu fahren. Hier ist mein Code: -Ich kann den BLDC-Motor nicht mit L6234 mit ATmega16 betreiben

#define F_CPU 8000000UL 
#include<avr/io.h> 
#include<avr/interrupt.h> 
#include<util/delay.h> 

#define hall1 (PINC & 1<<1) // connect hall sensor1 
#define hall2 (PINC & 1<<2) //connect hall sensor2 
#define hall3 (PINC & 1<<3) //connect hall sensor3 



void main() 
{ 
    DDRC=0XF0; 
    DDRB=0XFF; //output as In1=PB.0 ,In2=PB.1, In3=PB.2, En0=PB.3 ,En1=PB.4, En3=PB.5 
    while(1) 
    { 
     if((hall3==4)&(hall2==0)&(hall1==1)) // step1 
      { 
      PORTB=0X19; 
      } 

     if((hall3==0)&(hall2==0)&(hall1==1)) // step2 
      { 
      PORTB=0X29; 
      } 

     if((hall3==0)&(hall2==2)&(hall1==1)) // step3 
      { 
      PORTB=0X33; 
      } 

     if((hall3==0)&(hall2==2)&(hall1==0)) // step4 
      { 
      PORTB=0X1E; 
      } 

     if((hall3==4)&(hall2==2)&(hall1==0))// step5 
      { 
      PORTB=0X2E; 
      } 

     if((hall3==4)&(hall2==0)&(hall1==0))// step6 
      { 
      PORTB=0X34; 
      } 
    } 
} 

Aber wenn ich diesen Code ausführen, funktioniert mein Motor nicht. Kann mir jemand sagen, wo der Fehler in meinem Code ist?

Antwort

0

Das Format Ihres Codes macht es wirklich schwer zu debuggen. Da Sie bereits Makros verwenden, kann ich einige Vorschläge machen, um das Lesen zu erleichtern?

Sie haben #define hall3 (PINC & 1<<3), aber dann muss dieser Wert 4 oder 0 sein. Warum nicht einfach als Boolean verwenden?

if(hall3 && etc) // note the double && 

Sogleich wird dies einen Fehler beheben. 1<<3 ist 8 nicht 4, so dass keine der if Anweisungen jemals gelingen wird, wie der Code derzeit geschrieben wird. (Z. B. 1 1 < < 0, nicht 1 < < 1.)

Die PORTB hart codierten Ausgänge sehr hart sind und dechiffrieren. Ich schlage vor, #defines zu verwenden, um dies auch zu erleichtern.

#define EN1 3 
#define EN2 4 
#define EN3 5 
#define IN1 0 
#define IN2 1 
#define IN3 2 

... 
    PORTB = 1<<EN1 | 1<<EN2 | 1<<IN1; // step 1 
+0

Ich versuche, diesen Code aber nicht funktioniert Motor richtig können wir diesen Motortreiber L6234 mit Hilfe von PWM-Antrieb –

+0

Werfen Sie einen Blick auf diese [Probe] (http://www.atmel.com/images/AVR443. zip) von Atmel. Es betreibt den Treiber und nutzt auch PWM-Steuerung. – UncleO

Verwandte Themen