⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bldc.h

📁 基于ATMEGA48单片机的无刷电机控制程序
💻 H
字号:
/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
 *
 * \brief A brief description of the file is written here.
 *
 * A more detailed description of the file should written here.
 *
 * \par Application note:
 * AVR443: Sensorbased control of three-phase BLDC motor
 * \par
 * For comprehensive code documentation, supported compilers, compiler settings
 * and supported devices see readme.html\n
 * Target device: ATmega48/88/168
 *
 * \author               Atmel Corporation: http://www.atmel.com \n
 *                       Support email: avr@atmel.com
 *
 * $Name$
 * $Revision: 843 $
 * $RCSfile$
 * $Date: 2006-02-17 20:35:38 +0100 (fr, 17 feb 2006) $  \n
 ******************************************************************************/

//! \name Output pins to drive stages.
//@{
#define UL  PD6
#define VL  PD5
#define WL  PD3
#define UH  PD7
#define VH  PD4
#define WH  PD2
#define MC_MASK   ((1<<UL)|(1<<VL)|(1<<WL)|(1<<UH)|(1<<VH)|(1<<WH))
//@}



//! \name Port control registers for drive stages.
//@{
#define PORT_MC PORTD
#define DDR_MC  DDRD
#define PIN_MC  PIND
//@}



//! \name Hall sensor input pins.
//@{
#define HALL1 PB1
#define HALL2 PB2
#define HALL3 PB3
#define HALL_MASK  ((1<<HALL1)|(1<<HALL2)|(1<<HALL3))
//@}



//! \name Port control registers for Hall sensor inputs.
//@{
#define PORT_HALL PORTB
#define DDR_HALL  DDRB
#define PIN_HALL  PINB
//@}



#define PATTERN_DRV_OFFSET  0 //!< Offset for drive pattern in table.
#define PATTERN_COM0_OFFSET 6 //!< Offset for Timer 0 Output Compare config pattern in table.
#define PATTERN_COM2_OFFSET 12 //!< Offset for Timer 2 Output Compare config pattern in table.



/*! \name CCW driving configuration
 *
 *  IO driving configuration (driving enabled by setting
 *  IO to output)for counter clockwise rotation.
 */
//@{
#define PDP1_CCW  ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
#define PDP2_CCW  ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH))
#define PDP3_CCW  ((0<<UL)|(1<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH))
#define PDP4_CCW  ((0<<UL)|(1<<VL)|(0<<WL)|(1<<UH)|(0<<VH)|(0<<WH))
#define PDP5_CCW  ((0<<UL)|(0<<VL)|(1<<WL)|(1<<UH)|(0<<VH)|(0<<WH))
#define PDP6_CCW  ((0<<UL)|(0<<VL)|(1<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
//@}



/*! \name CW driving configuration
 *
 *  IO driving configuration (driving enabled by setting
 *  IO to output)for clockwise rotation.
 */
//@{
#define PDP1_CW  ((0<<UL)|(0<<VL)|(1<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
#define PDP2_CW  ((0<<UL)|(0<<VL)|(1<<WL)|(1<<UH)|(0<<VH)|(0<<WH))
#define PDP3_CW  ((0<<UL)|(1<<VL)|(0<<WL)|(1<<UH)|(0<<VH)|(0<<WH))
#define PDP4_CW  ((0<<UL)|(1<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH))
#define PDP5_CW  ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH))
#define PDP6_CW  ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
//@}

#define OVERCURRENT_PIN PC1   //!< Over-current LED signalling (active low).

//! \name PWM output configuration (for both TC0 and TC2)
//@{
#define UL_ON   ((1<<COM0A1)|(0<<COM0A0))
#define UL_OFF  ((0<<COM0A1)|(0<<COM0A0))
#define VL_ON   ((1<<COM0B1)|(0<<COM0B0))
#define VL_OFF  ((0<<COM0B1)|(0<<COM0B0))
#define WL_ON   ((1<<COM2B1)|(0<<COM2B0))
#define WL_OFF  ((0<<COM2B1)|(0<<COM2B0))

#define COM0P1_CCW  ((UL_ON)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P1_CCW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P2_CCW  ((UL_ON)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P2_CCW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P3_CCW  ((UL_OFF)|(VL_ON)|(1<<WGM01)|(1<<WGM00))
#define COM2P3_CCW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P4_CCW  ((UL_OFF)|(VL_ON)|(1<<WGM01)|(1<<WGM00))
#define COM2P4_CCW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P5_CCW  ((UL_OFF)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P5_CCW  ((WL_ON)|(1<<WGM21)|(1<<WGM20))
#define COM0P6_CCW  ((UL_OFF)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P6_CCW  ((WL_ON)|(1<<WGM21)|(1<<WGM20))

#define COM0P1_CW  ((UL_OFF)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P1_CW  ((WL_ON)|(1<<WGM21)|(1<<WGM20))
#define COM0P2_CW  ((UL_OFF)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P2_CW  ((WL_ON)|(1<<WGM21)|(1<<WGM20))
#define COM0P3_CW  ((UL_OFF)|(VL_ON)|(1<<WGM01)|(1<<WGM00))
#define COM2P3_CW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P4_CW  ((UL_OFF)|(VL_ON)|(1<<WGM01)|(1<<WGM00))
#define COM2P4_CW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P5_CW  ((UL_ON)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P5_CW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))
#define COM0P6_CW  ((UL_ON)|(VL_OFF)|(1<<WGM01)|(1<<WGM00))
#define COM2P6_CW  ((WL_OFF)|(1<<WGM21)|(1<<WGM20))

#define HP1 ((1<<HALL1)|(0<<HALL2)|(1<<HALL3))
#define HP2 ((1<<HALL1)|(0<<HALL2)|(0<<HALL3))
#define HP3 ((1<<HALL1)|(1<<HALL2)|(0<<HALL3))
#define HP4 ((0<<HALL1)|(1<<HALL2)|(0<<HALL3))
#define HP5 ((0<<HALL1)|(1<<HALL2)|(1<<HALL3))
#define HP6 ((0<<HALL1)|(0<<HALL2)|(1<<HALL3))
//@}


// Direction control
#define CLOCKWISE         1 //!< Used by Set_Direction() for CW rotation.
#define COUNTERCLOCKWISE  0 //!< Used by Set_Direction() for CCW rotation.



//! \name ADC multiplexing
//@{
#define ADC_MUX_SPEED_REF   ((0 << REFS1) | (0 << REFS0) | (1 << ADLAR))
#define ADC_MUX_SHUNT_H     ((0 << REFS1) | (0 << REFS0) | (1 << ADLAR) | (1 << MUX2))
#define ADC_MUX_SHUNT_L     ((0 << REFS1) | (0 << REFS0) | (1 << ADLAR) | (1 << MUX2) | (1 << MUX0))
//@}



// Current limiting
#define MAX_CURRENT                     1.0f   //!< Max motor current in Amperes.
#define CURRENT_SHUNT_RESISTANCE        0.22f  //!< Current shunt resistanse in Ohms.
#define ADC_REF_VOLTAGE                 5.0f   //!< ADC reference voltage in Volts.

#define VOLTS_PER_ADC_STEP              (ADC_REF_VOLTAGE / 256)  //!< Volts per LSB with 8-bit ADC.
#define MAX_SHUNT_VOLTAGE               (MAX_CURRENT * CURRENT_SHUNT_RESISTANCE)  //!< Max current shunt voltage.
#define MAX_CURRENT_ADC                 (signed int)(MAX_SHUNT_VOLTAGE / VOLTS_PER_ADC_STEP) //!< Calc max value for raw ADC reading.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -