mc_drv.h

Go to the documentation of this file.
00001 
00014 #ifndef _MC_DRV_H_
00015 #define _MC_DRV_H_
00016 
00017   // output configuration
00018   #define output_disconnected 0x01
00019 
00020  // #define Set_none() (TCCR1A=output_disconnected,TCCR3B=output_disconnected)
00021   #define Set_timer_data_register_to_zero() (TCNT0=0x00)
00022 
00023   // MACRO for PSC initialization
00024   #define PSC_ONE_RAMP (0<<PMODE01)|(0<<PMODE00)
00025   #define PSC_TWO_RAMP (0<<PMODE01)|(1<<PMODE00)
00026   #define PSC_FOUR_RAMP (1<<PMODE01)|(0<<PMODE00)
00027   #define PSC_CENTERED (1<<PMODE01)|(1<<PMODE00)
00028 
00029   #define RAMP_MODE_NUMBER PSC_ONE_RAMP
00030 
00031   #define SET_PLOCK (1<<PLOCK0)
00032   #define RELEASE_PLOCK (0<<PLOCK0)
00033 
00034   #define PRESC_NODIV     (0<<PPRE01)|(0<<PPRE00)
00035   #define PRESC_DIV_BY_4  (0<<PPRE01)|(1<<PPRE00)
00036   #define PRESC_DIV_BY_16 (1<<PPRE01)|(0<<PPRE00)
00037   #define PRESC_DIV_BY_64 (1<<PPRE01)|(1<<PPRE00)
00038 
00039   #define OUTPUT_ACTIVE_HIGH (1<<POP0)
00040   #define OUTPUT_ACTIVE_LOW  (0<<POP0)
00041 
00042   // Comparator interruption
00043   #define HALL_A() (ANACOMP_0_vect)
00044   #define HALL_B() (ANACOMP_1_vect)
00045   #define HALL_C() (ANACOMP_2_vect)
00046 
00047 #ifdef USE_INTERNAL_COMPARATORS
00048   /* with back_emf signals */
00049   #define HALL_SENSOR_VALUE() (ACSR & 0x07)
00050 #else
00051   /* with hall sensor inputs */
00052   #define HALL_SENSOR_VALUE()        \
00053     ( (PIND & (1<<PIND7)) >> PIND7 ) \
00054   | ( (PINC & (1<<PINC6)) >> 5 )     \
00055   | ( (PIND & (1<<PIND5)) >> 3 )
00056 #endif
00057 
00058 #define MIN_DELAY 2
00059 #define MAX_DELAY 40
00060 #define FILTER_DELAY 4   
00061 #define MASK_DEMAG 2 
00062 
00063   #define Clear_Port_Q1() (PORTB &= ( ~(1<<PORTB0)))
00064   #define Clear_Port_Q3() (PORTC &= ( ~(1<<PORTC0)))
00065   #define Clear_Port_Q5() (PORTD &= ( ~(1<<PORTD0)))
00066   #define Clear_Port_Q2() (PORTB &= ( ~(1<<PORTB1)))
00067   #define Clear_Port_Q4() (PORTB &= ( ~(1<<PORTB6)))
00068   #define Clear_Port_Q6() (PORTB &= ( ~(1<<PORTB7)))
00069   #define Set_Port_Q2()   (PORTB |=   (1<<PORTB1))
00070   #define Set_Port_Q4()   (PORTB |=   (1<<PORTB6))
00071   #define Set_Port_Q6()   (PORTB |=   (1<<PORTB7))
00072 
00073   // Six step commutation
00074   #define Set_none()                \
00075     PSOC0 = (0<<POEN0A)|(0<<POEN0B);\
00076     PSOC1 = (0<<POEN1A)|(0<<POEN1B);\
00077     PSOC2 = (0<<POEN2A)|(0<<POEN2B);\
00078     Clear_Port_Q2();                \
00079     Clear_Port_Q4();                \
00080     Clear_Port_Q6();                \
00081     Clear_Port_Q1();                \
00082     Clear_Port_Q3();                \
00083     Clear_Port_Q5();
00084 
00085   #define Set_Q1Q4()                \
00086     PSOC0 = (0<<POEN0A)|(0<<POEN0B);\
00087     PSOC1 = (0<<POEN1A)|(1<<POEN1B);\
00088     PSOC2 = (1<<POEN2A)|(0<<POEN2B);
00089 
00090   #define Set_Q1Q6()                \
00091     PSOC1 = (0<<POEN1A)|(0<<POEN1B);\
00092     PSOC0 = (0<<POEN0A)|(1<<POEN0B);\
00093     PSOC2 = (1<<POEN2A)|(0<<POEN2B);
00094 
00095   #define Set_Q3Q2()                \
00096     PSOC0 = (0<<POEN0A)|(0<<POEN0B);\
00097     PSOC1 = (1<<POEN1A)|(0<<POEN1B);\
00098     PSOC2 = (0<<POEN2A)|(1<<POEN2B);
00099 
00100   #define Set_Q3Q6()                \
00101     PSOC2 = (0<<POEN2A)|(0<<POEN2B);\
00102     PSOC0 = (0<<POEN0A)|(1<<POEN0B);\
00103     PSOC1 = (1<<POEN1A)|(0<<POEN1B);
00104 
00105   #define Set_Q5Q2()                \
00106     PSOC1 = (0<<POEN1A)|(0<<POEN1B);\
00107     PSOC0 = (1<<POEN0A)|(0<<POEN0B);\
00108     PSOC2 = (0<<POEN2A)|(1<<POEN2B);
00109 
00110   #define Set_Q5Q4()                \
00111     PSOC2 = (0<<POEN2A)|(0<<POEN2B);\
00112     PSOC0 = (1<<POEN0A)|(0<<POEN0B);\
00113     PSOC1 = (0<<POEN1A)|(1<<POEN1B);
00114 
00115   // Macro for LED use
00116   #define switch_ON_LED()   (PORTE &= ~(1<<PE2))
00117   #define switch_OFF_LED()  (PORTE |=  (1<<PE2))
00118 
00119   //EXT PORT AS OUTPUT
00120   #define Set_EXT1()     (PORTB |=  (1<<PB3)) // EXT1
00121   #define Clear_EXT1()   (PORTB &= ~(1<<PB3))
00122   #define Set_EXT2()     (PORTB |=  (1<<PB4)) // EXT2
00123   #define Clear_EXT2()   (PORTB &= ~(1<<PB4))
00124   #define Set_EXT3()     (PORTC |=  (1<<PC1)) // EXT3
00125   #define Clear_EXT3()   (PORTC &= ~(1<<PC1))
00126   #define Set_EXT4()     (PORTC |=  (1<<PC2)) // EXT4
00127   #define Clear_EXT4()   (PORTC &= ~(1<<PC2))
00128   #define Set_EXT5()     (PORTB |=  (1<<PB5)) // EXT5
00129   #define Clear_EXT5()   (PORTB &= ~(1<<PB5))
00130   #define Set_EXT6()     (PORTE |=  (1<<PE1)) // EXT6
00131   #define Clear_EXT6()   (PORTE &= ~(1<<PE1))
00132   #define Toggle_EXT6()  (PINE  |=  (1<<PINE1))
00133   #define Set_EXT7()     (PORTD |=  (1<<PD3)) // EXT7
00134   #define Clear_EXT7()   (PORTD &= ~(1<<PD3))
00135   #define Set_EXT8()     (PORTD |=  (1<<PD4)) // EXT8
00136   #define Clear_EXT8()   (PORTD &= ~(1<<PD4))
00137   #define Set_EXT9()     (PORTE |=  (1<<PE0)) // EXT9
00138   #define Clear_EXT9()   (PORTE &= ~(1<<PE0))
00139   #define Toggle_EXT9()   (PINE |= (1<<PINE0))
00140   #define Set_EXT10()     (PORTD |=  (1<<PD2)) // EXT10
00141   #define Clear_EXT10()   (PORTD &= ~(1<<PD2))
00142   //EXT PORT AS INPUT
00143   #define Get_EXT1()     ((PINB & (1<<PB3))>>PB3) // EXT1
00144   #define Get_EXT2()     ((PINB & (1<<PB4))>>PB4) // EXT2
00145   #define Get_EXT3()     ((PINC & (1<<PC1))>>PC1) // EXT3
00146   #define Get_EXT4()     ((PINC & (1<<PC2))>>PC2) // EXT4
00147   #define Get_EXT5()     ((PINB & (1<<PB5))>>PB5) // EXT5
00148   #define Get_EXT6()     ((PINE & (1<<PE1))>>PE1) // EXT6
00149   #define Get_EXT7()     ((PIND & (1<<PD3))>>PD3) // EXT7
00150   #define Get_EXT8()     ((PIND & (1<<PD4))>>PD4) // EXT8
00151   #define Get_EXT9()     ((PINE & (1<<PE0))>>PE0) // EXT9
00152   #define Get_EXT10()     ((PIND & (1<<PD2))>>PD2) // EXT10
00153 
00154   // MACRO for ADC scheduler
00155   #define CONV_INIT     0
00156   #define CONV_POT      1
00157   #define CONV_CURRENT  2
00158 
00159   #define FREE  0
00160   #define BUSY  1
00161   /**************************/
00162   /* prototypes declaration */
00163   /**************************/
00164 
00165   // Hardware initialization
00166   void mc_init_HW(void);
00167   void mc_init_SW(void);
00168   void mc_init_port(void);
00169   void mc_init_pwm(void);
00170   void mc_init_IT(void);
00171   void PSC0_Init (unsigned int OCRnRB,
00172                   unsigned int OCRnSB,
00173                   unsigned int OCRnRA,
00174           unsigned int OCRnSA);
00175 
00176   void PSC1_Init (unsigned int OCRnRB,
00177                   unsigned int OCRnSB,
00178                   unsigned int OCRnRA,
00179           unsigned int OCRnSA);
00180 
00181   void PSC2_Init (unsigned int OCRnRB,
00182                   unsigned int OCRnSB,
00183                   unsigned int OCRnRA,
00184           unsigned int OCRnSA);
00185 
00186   // Phases commutation functions
00187   U8 mc_get_hall(void);
00188   void mc_duty_cycle(U8 level);
00189   void mc_switch_commutation(U8 position);
00190 
00191   // Sampling time configuration
00192   void mc_config_sampling_period(void);
00193 
00194   // Estimation speed
00195   void mc_config_time_estimation_speed(void);
00196   void mc_estimation_speed(void);
00197 
00198   // ADC use for current measure and potentiometer...
00199   void mc_ADC_Scheduler(void);
00200   U8 mc_Get_Current(void);
00201   U8 mc_Get_Potentiometer(void);
00202 
00203   // Over Current Detection
00204   void mc_set_Over_Current(U8 Level);
00205 
00206   // Number of turns calculation
00207   S32 mc_get_Num_Turn(void);
00208   void mc_reset_Num_Turn(void);
00209 
00210   void PSC_Stop(void);
00211   void PSC_Run(void);
00212 
00213 
00214 #endif

Generated on Wed Jul 12 16:55:10 2006 for Atmel BLDC Sensorless on ATAVRMC100 by  doxygen 1.4.7