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

📄 psc_drv.c

📁 DSP, 三相交流异步电机控制程序, C语言, 空间矢量SPWM, 内含PI算法及三相桥开关控制
💻 C
📖 第 1 页 / 共 2 页
字号:
#   else
#      error (PSC1_FIFTY_PERCENT_MODE should be 0, or 1)
#   endif

#   if (PSC1_SYMETRICAL_FLANK_WIDTH_MODULATION == 1)
       Psc1_symetrical_flank_width_modulation();
#   elif (PSC1_SYMETRICAL_FLANK_WIDTH_MODULATION == 0)
       Psc1_end_of_cycle_flank_width_modulation();
#   else
#      error (PSC1_SYMETRICAL_FLANK_WIDTH_MODULATION should be 0, or 1... See config.h file)
#   endif

#   if (PSC1_AUTOLOCK_MODE == 1)
       Enable_psc1_autolock_mode();
#   elif (PSC1_AUTOLOCK_MODE == 0)
       Disable_psc1_autolock_mode();
#   else
#      error (PSC1_AUTOLOCK_MODE should be 0, or 1... See config.h file)
#   endif

#   if (PSC1_PRESCALER_DIVIDER == 64)
       Divide_psc1_input_clock_by_64();
#   elif (PSC1_PRESCALER_DIVIDER == 16)
       Divide_psc1_input_clock_by_16();
#   elif (PSC1_PRESCALER_DIVIDER == 4)
       Divide_psc1_input_clock_by_4();
#   elif (PSC1_PRESCALER_DIVIDER == 0)
       Disable_psc1_prescaler();
#   else
#      error (PSC1_PRESCALER_DIVIDER should be 0, 4, 16, or 64... See config.h file)
#   endif

#   if (PSC1_PLL_FREQUENCY == 64)
       Wait_pll_ready();
       Psc1_use_pll_clock();
#   elif (PSC1_PLL_FREQUENCY == 32)
       Wait_pll_ready();
       Psc1_use_pll_clock();
#   elif (PSC1_PLL_FREQUENCY == 0)
       Psc1_use_io_clock();
#   else
#      error (PSC1_PLL_FREQUENCY should be 0, 32, or 64... See config.h file)
#   endif
}

//! Update all the PSC1 comparison values accordingly to the four values
//! passed as Psc_comparison_values typedef.
//!
//! @param Comparison values via U16.
//!   psc1_comparison_values->deadtime0 (=) U16 deadtime0
//!   psc1_comparison_values->ontime0   (=) U16 ontime0
//!   psc1_comparison_values->deadtime1 (=) U16 deadtime1
//!   psc1_comparison_values->ontime1   (=) U16 ontime1
//!
void update_psc1 ( Psc_comparison_values *psc1_comparison_values )
{
    Lock_psc1_compare_values();
    OCR1SAH = HIGH(psc1_comparison_values->deadtime0);
    OCR1SAL = LOW (psc1_comparison_values->deadtime0);
    OCR1RAH = HIGH(psc1_comparison_values->ontime0);
    OCR1RAL = LOW (psc1_comparison_values->ontime0);
    OCR1SBH = HIGH(psc1_comparison_values->deadtime1);
    OCR1SBL = LOW (psc1_comparison_values->deadtime1);
    OCR1RBH = HIGH(psc1_comparison_values->ontime1);
    OCR1RBL = LOW (psc1_comparison_values->ontime1);
    Update_psc1_compare_values();
}

//! Update half the PSC1 comparison values accordingly to the two values
//! passed as Psc_fifty_percent_comparison_values typedef.
//! This function is usefull if the PSC1 is configured in fifty percent mode
//!
//! @param Comparison values via U16.
//!   psc1_fifty_percent_comparison_values->deadtime1 (=) U16 deadtime1
//!   psc1_fifty_percent_comparison_values->ontime1   (=) U16 ontime1
//!
void update_psc1_fifty ( Psc_fifty_percent_comparison_values *psc1_fifty_percent_comparison_values )
{
    Lock_psc1_compare_values();
    OCR1SBH = HIGH(psc1_fifty_percent_comparison_values->deadtime1);
    OCR1SBL = LOW (psc1_fifty_percent_comparison_values->deadtime1);
    OCR1RBH = HIGH(psc1_fifty_percent_comparison_values->ontime1);
    OCR1RBL = LOW (psc1_fifty_percent_comparison_values->ontime1);
    Update_psc1_compare_values();
}
#endif // USE_PSC1

#ifdef USE_PSC2 //!< this define is set on config.h file
//! Configures the PSC2 accordingly to the PSC2 Define Configuration values.
//!
//! @param None.
//!
//! @pre  - Define the configuration in config.h file
//!
//! @post - Set the psc2 comparison values
//!       - Start the PSC2 thanks to Start_psc2() macro
void init_psc2(void)
{
#   if (PSC2_PLL_FREQUENCY == 64)
       Start_pll_64_mega();
#   elif (PSC2_PLL_FREQUENCY == 32)
       Start_pll_32_mega();
#   elif (PSC2_PLL_FREQUENCY == 0)
#   else
#      error (PSC2_PLL_FREQUENCY should be 0, 32, or 64... See config.h file)
#   endif

#   if (PSC2_OUTPUT_SELECTION == 3)
       Enable_both_psc2_outputs();
#   elif (PSC2_OUTPUT_SELECTION == 2)
       Enable_pscout21();
#   elif (PSC2_OUTPUT_SELECTION == 1)
       Enable_pscout20();
#   elif (PSC2_OUTPUT_SELECTION == 0)
       Disable_both_psc2_outputs();
#   else
#      error (PSC2_OUTPUT_SELECTION should be 0, 1, 2, or 2... See config.h file)
#   endif

#   if (PSC2_ACTIVE_STATE == 1)
       Psc2_outputs_active_high();
#   elif (PSC2_ACTIVE_STATE == 0)
       Psc2_outputs_active_low();
#   else
#      error (PSC2_ACTIVE_STATE should be 0, or 1... See config.h file)
#   endif

#   if (PSC2_RAMP_MODE == 4)
       Psc2_in_4_ramps_mode();
#   elif (PSC2_RAMP_MODE == 2)
       Psc2_in_2_ramps_mode();
#   elif (PSC2_RAMP_MODE == 1)
       Psc2_in_1_ramp_mode();
#   elif (PSC2_RAMP_MODE == 0)
       Psc2_in_centered_aligned_mode();
#   else
#      error (PSC2_RAMP_MODE should be 0, 1, 3, or 4... See config.h file)
#   endif

#   if (PSC2_FIFTY_PERCENT_MODE == 1)
       Enable_psc2_fifty_percent_mode();
#   elif (PSC2_FIFTY_PERCENT_MODE == 0)
       Disable_psc2_fifty_percent_mode();
#   else
#      error (PSC2_FIFTY_PERCENT_MODE should be 0, or 1)
#   endif

#   if (PSC2_SYMETRICAL_FLANK_WIDTH_MODULATION == 1)
       Psc2_symetrical_flank_width_modulation();
#   elif (PSC2_SYMETRICAL_FLANK_WIDTH_MODULATION == 0)
       Psc2_end_of_cycle_flank_width_modulation();
#   else
#      error (PSC2_SYMETRICAL_FLANK_WIDTH_MODULATION should be 0, or 1... See config.h file)
#   endif

#   if (PSC2_AUTOLOCK_MODE == 1)
       Enable_psc2_autolock_mode();
#   elif (PSC2_AUTOLOCK_MODE == 0)
       Disable_psc2_autolock_mode();
#   else
#      error (PSC2_AUTOLOCK_MODE should be 0, or 1... See config.h file)
#   endif

#   if (PSC2_PRESCALER_DIVIDER == 64)
       Divide_psc2_input_clock_by_64();
#   elif (PSC2_PRESCALER_DIVIDER == 16)
       Divide_psc2_input_clock_by_16();
#   elif (PSC2_PRESCALER_DIVIDER == 4)
       Divide_psc2_input_clock_by_4();
#   elif (PSC2_PRESCALER_DIVIDER == 0)
       Disable_psc2_prescaler();
#   else
#      error (PSC2_PRESCALER_DIVIDER should be 0, 4, 16, or 64... See config.h file)
#   endif

#   if (PSC2_PLL_FREQUENCY == 64)
       Wait_pll_ready();
       Psc2_use_pll_clock();
#   elif (PSC2_PLL_FREQUENCY == 32)
       Wait_pll_ready();
       Psc2_use_pll_clock();
#   elif (PSC2_PLL_FREQUENCY == 0)
       Psc2_use_io_clock();
#   else
#      error (PSC2_PLL_FREQUENCY should be 0, 32, or 64... See config.h file)
#   endif
}

//! Update all the PSC2 comparison values accordingly to the four values
//! passed as Psc_comparison_values typedef.
//!
//! @param Comparison values via U16.
//!   psc2_comparison_values->deadtime0 (=) U16 deadtime0
//!   psc2_comparison_values->ontime0   (=) U16 ontime0
//!   psc2_comparison_values->deadtime1 (=) U16 deadtime1
//!   psc2_comparison_values->ontime1   (=) U16 ontime1
//!
void update_psc2 ( Psc_comparison_values *psc2_comparison_values )
{
    Lock_psc2_compare_values();
    OCR2SAH = HIGH(psc2_comparison_values->deadtime0);
    OCR2SAL = LOW (psc2_comparison_values->deadtime0);
    OCR2RAH = HIGH(psc2_comparison_values->ontime0);
    OCR2RAL = LOW (psc2_comparison_values->ontime0);
    OCR2SBH = HIGH(psc2_comparison_values->deadtime1);
    OCR2SBL = LOW (psc2_comparison_values->deadtime1);
    OCR2RBH = HIGH(psc2_comparison_values->ontime1);
    OCR2RBL = LOW (psc2_comparison_values->ontime1);
    Update_psc2_compare_values();
}

//! Update half the PSC2 comparison values accordingly to the two values
//! passed as Psc_fifty_percent_comparison_values typedef.
//! This function is usefull if the PSC2 is configured in fifty percent mode
//!
//! @param Comparison values via U16.
//!   psc2_fifty_percent_comparison_values->deadtime1 (=) U16 deadtime1
//!   psc2_fifty_percent_comparison_values->ontime1   (=) U16 ontime1
//!
void update_psc2_fifty ( Psc_fifty_percent_comparison_values *psc2_fifty_percent_comparison_values )
{
    Lock_psc2_compare_values();
    OCR2SBH = HIGH(psc2_fifty_percent_comparison_values->deadtime1);
    OCR2SBL = LOW (psc2_fifty_percent_comparison_values->deadtime1);
    OCR2RBH = HIGH(psc2_fifty_percent_comparison_values->ontime1);
    OCR2RBL = LOW (psc2_fifty_percent_comparison_values->ontime1);
    Update_psc2_compare_values();
}
#endif // USE_PSC2

⌨️ 快捷键说明

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