Main Page | File List | Globals

BLDC.h

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00023 #ifndef __BLDC_H__
00024 #define __BLDC_H__
00025 
00027 #define SYSTEM_FREQUENCY        8000000
00028 
00030 #define PWM_BASE_FREQUENCY      20000
00031 
00033 #define PWM_TOP_VALUE           (SYSTEM_FREQUENCY / PWM_BASE_FREQUENCY / 2)
00034 
00036 #define FALSE     0
00037 
00039 #define TRUE      (!FALSE)
00040 
00042 #define UL    PB5
00043 
00045 #define UH    PB4
00046 
00048 #define VL    PB3
00049 
00051 #define VH    PB2
00052 
00054 #define WL    PB1
00055 
00057 #define WH    PB0
00058 
00060 #define CW    0
00061 
00063 #define CCW   1
00064 
00068 #define DIRECTION_OF_ROTATION     CCW
00069 
00071 #define DRIVE_PATTERN_STEP1_CCW      ((1 << UL) | (1 << VH))
00072 
00074 #define DRIVE_PATTERN_STEP2_CCW      ((1 << UL) | (1 << WH))
00075 
00077 #define DRIVE_PATTERN_STEP3_CCW      ((1 << VL) | (1 << WH))
00078 
00080 #define DRIVE_PATTERN_STEP4_CCW      ((1 << VL) | (1 << UH))
00081 
00083 #define DRIVE_PATTERN_STEP5_CCW      ((1 << WL) | (1 << UH))
00084 
00086 #define DRIVE_PATTERN_STEP6_CCW      ((1 << WL) | (1 << VH))
00087 
00088 
00090 #define DRIVE_PATTERN_STEP1_CW      ((1 << VH) | (1 << WL))
00091 
00093 #define DRIVE_PATTERN_STEP2_CW      ((1 << UH) | (1 << WL))
00094 
00096 #define DRIVE_PATTERN_STEP3_CW      ((1 << UH) | (1 << VL))
00097 
00099 #define DRIVE_PATTERN_STEP4_CW      ((1 << WH) | (1 << VL))
00100 
00102 #define DRIVE_PATTERN_STEP5_CW      ((1 << WH) | (1 << UL))
00103 
00105 #define DRIVE_PATTERN_STEP6_CW      ((1 << VH) | (1 << UL))
00106 
00108 #define EDGE_FALLING          1
00109 
00111 #define EDGE_RISING           0
00112 
00114 #define DRIVE_PORT  PORTB
00115 
00117 #define DRIVE_DDR   DDRB
00118 
00120 #define ADC_MUX_U           0x0
00121 
00123 #define ADC_MUX_V           0x1
00124 
00126 #define ADC_MUX_W           0x2
00127 
00129 #define ADC_MUX_SPEED_REF   0x4
00130 
00132 #define ADC_MUX_CURRENT     0x3
00133 
00135 #define ADC_MUX_REF_VOLTAGE 0x5
00136 
00138 #define ADC_REF_CHANNEL                 ((0 << REFS1) | (0 << REFS0))
00139 
00141 #define ADC_RES_ALIGNMENT_BEMF          (1 << ADLAR)
00142 
00144 #define ADC_RES_ALIGNMENT_SPEED_REF     (1 << ADLAR)
00145 
00147 #define ADC_RES_ALIGNMENT_CURRENT       (1 << ADLAR)
00148 
00150 #define ADC_RES_ALIGNMENT_REF_VOLTAGE   (1 << ADLAR)
00151 
00153 #define ADMUX_U             (ADC_REF_CHANNEL | ADC_RES_ALIGNMENT_BEMF | ADC_MUX_U)
00154 
00156 #define ADMUX_V             (ADC_REF_CHANNEL | ADC_RES_ALIGNMENT_BEMF | ADC_MUX_V)
00157 
00159 #define ADMUX_W             (ADC_REF_CHANNEL | ADC_RES_ALIGNMENT_BEMF | ADC_MUX_W)
00160 
00162 #define ADMUX_SPEED_REF     (ADC_REF_CHANNEL | ADC_RES_ALIGNMENT_SPEED_REF | ADC_MUX_SPEED_REF)
00163 
00165 #define ADMUX_CURRENT       (ADC_REF_CHANNEL | ADC_RES_ALIGNMENT_CURRENT | ADC_MUX_CURRENT)
00166 
00168 #define ADMUX_REF_VOLTAGE   (ADC_REF_CHANNEL | ADC_RES_ALIGNMENT_REF_VOLTAGE | ADC_MUX_REF_VOLTAGE)
00169 
00171 #define ADC_PRESCALER_8     ((0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0))
00172 
00174 #define ADC_PRESCALER_16     ((1 << ADPS2) | (0 << ADPS1) | (0 << ADPS0))
00175 
00177 #define ADC_PRESCALER       ADC_PRESCALER_8
00178 
00180 #define ADC_TRIGGER_SOURCE  ((1 << ADTS2) | (0 << ADTS1) | (0 << ADTS0))
00181 
00186 #define STARTUP_NUM_COMMUTATIONS  8
00187 
00189 #define STARTUP_DELAY_MULTIPLIER  100
00190 
00195 #define STARTUP_LOCK_DELAY        10000
00196 
00198 #define MAX_RESTART_ATTEMPTS    10
00199 
00201 #define ZC_DETECTION_HOLDOFF_TIME_US (filteredTimeSinceCommutation / 2)
00202 
00204 #define SET_PWM_COMPARE_VALUE(compareValue)          (OCR0B = compareValue)
00205 
00207 #define CLEAR_ALL_TIMER0_INT_FLAGS    (TIFR0 = TIFR0)
00208 
00210 #define DISABLE_ALL_TIMER0_INTS       (TIMSK0 = 0)
00211 
00213 #define SET_TIMER0_INT_ZC_DETECTION   (TIMSK0 = (1 << TOIE0))
00214 
00216 #define CLEAR_ALL_TIMER1_INT_FLAGS    (TIFR1 = TIFR1)
00217 
00219 #define DISABLE_ALL_TIMER1_INTS       (TIMSK1 = 0)
00220 
00222 #define SET_TIMER1_INT_COMMUTATION    (TIMSK1 = (1 << OCIE1A))
00223 
00225 #define SET_TIMER1_INT_HOLDOFF        (TIMSK1 = (1 << OCIE1B))
00226 
00228 #define EXTERNAL_REF_VOLTAGE      ((4930UL * 10) / 43)
00229 
00231 #define SHUNT_RESISTANCE          220
00232 
00234 #define ADC_RESOLUTION   256
00235 
00240 #define TICKS_PER_SECOND    1000000UL
00241 
00243 #define TICKS_PER_MINUTE    (TICKS_PER_SECOND * 60)
00244 
00251 #define COMMUTATION_TIMING_IIR_COEFF_A      1
00252 
00259 #define COMMUTATION_TIMING_IIR_COEFF_B      3
00260 
00262 #define SPEED_CONTROL_OPEN_LOOP
00263 //#define SPEED_CONTROL_CLOSED_LOOP
00264 
00266 #define CURRENT_LIMITER_START         2500
00267 
00269 #define CURRENT_LIMITER_CRITICAL      3000
00270 
00275 #define ANALOG_COMPARATOR_ENABLE
00276 
00281 #define CURRENT_LIMITER_FACTOR   (1 / 5)
00282 
00284 #define DISABLE_DRIVING               (DRIVE_PORT = 0x00)
00285 
00287 #define STARTUP_PWM_COMPARE_VALUE  130
00288 
00290 #define ADC_ZC_THRESHOLD 0x98
00291 
00296 #define COMMUTATION_CORRECTION 50
00297 
00299 #define MIN_PWM_COMPARE_VALUE    90
00300 
00302 #define MAX_PWM_COMPARE_VALUE    200
00303 
00305 #define MIN_SPEED 3000UL
00306 
00308 #define MAX_SPEED 8000UL
00309 
00311 #define P_REG_K_P 64
00312 
00314 #define P_REG_SCALING 65536
00315 
00316 static void ResetHandler(void);
00317 static void InitPorts(void);
00318 static void InitTimers(void);
00319 static void InitADC(void);
00320 static void InitAnalogComparator(void);
00321 static void WatchdogTimerEnable(void);
00322 static void MakeTables(void);
00323 static void StartMotor(void);
00324 static void PWMControl(void);
00325 static void StartupDelay(unsigned int delay);
00326 static unsigned long CalculateSpeed();
00327 static unsigned long CalculateSpeedSetpoint();
00328 static unsigned int CalculateCurrent();
00329 static signed int SpeedControl(void);
00330 static unsigned char CurrentControl(void);
00331 
00332 
00333 #endif  // File guard

Generated on Tue Oct 11 10:57:02 2005 for Sensorless control of 3-phase brushless DC motors by  doxygen 1.4.4