亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stm32f10x_svpwm_3shunt.c

?? ARM_CORTEX-M3應用實例開發詳解光盤
?? C
?? 第 1 頁 / 共 3 頁
字號:
  ADC_ResetCalibration(ADC1);
  
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));

 /* Enable ADC2 */
  ADC_Cmd(ADC2, ENABLE);   //喚醒ADC2

  /* Enable ADC2 reset calibaration register */   
  ADC_ResetCalibration(ADC2);
  
  /* Check the end of ADC2 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC2));

  /* Start ADC2 calibaration */
  ADC_StartCalibration(ADC2);
  
  /* Check the end of ADC2 calibration */
  while(ADC_GetCalibrationStatus(ADC2));
 //================================================================================== 
  
  SVPWM_3ShuntCurrentReadingCalibration();
    
  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
//  NVIC_StructInit(&NVIC_InitStructure);
  /* Enable the ADC Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ADC_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = ADC_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  /* Enable the Update Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIM1_UP_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIM1_UP_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
    
  /* Enable the TIM1 BRK Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = BRK_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = BRK_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		//沒有打開緊急停車功能
  NVIC_Init(&NVIC_InitStructure); 

/* Enable the DMA_CHANEL1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = DMA_CH1_PRE_EMPTION_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = DMA_CH1_SUB_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

//  ADC_SoftwareStartConvCmd(ADC1, ENABLE);		  //首先軟件觸發規則組,連續掃描
  /* ADC1、ADC2 regular conversions trigger is TIM4_CC4*/ 
  ADC_ExternalTrigConvCmd(ADC1, ENABLE);
  ADC_ExternalTrigConvCmd(ADC2, ENABLE);

} 


/*******************************************************************************
* Function Name  : SVPWM_3ShuntCurrentReadingCalibration
* Description    : Store zero current converted values for current reading 
                   network offset compensation in case of 3 shunt resistors 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/

void SVPWM_3ShuntCurrentReadingCalibration(void)
{
  static u16 bIndex;
  
  /* ADC1 Injected group of conversions end interrupt disabling */
  ADC_ITConfig(ADC1, ADC_IT_JEOC, DISABLE);
  
  hPhaseAOffset=0;
  hPhaseBOffset=0;
  hPhaseCOffset=0;
  
  /* ADC1 Injected conversions trigger is given by software and enabled */ 
  ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);  
  ADC_ExternalTrigInjectedConvCmd(ADC1,ENABLE); 
  
  /* ADC1 Injected conversions configuration */ 
  ADC_InjectedSequencerLengthConfig(ADC1,3);
  ADC_InjectedChannelConfig(ADC1, PHASE_A_ADC_CHANNEL,1,SAMPLING_TIME_CK);
  ADC_InjectedChannelConfig(ADC1, PHASE_B_ADC_CHANNEL,2,SAMPLING_TIME_CK);
  ADC_InjectedChannelConfig(ADC1, PHASE_C_ADC_CHANNEL,3,SAMPLING_TIME_CK);
  
  /* Clear the ADC1 JEOC pending flag */
  ADC_ClearFlag(ADC1, ADC_FLAG_JEOC);  
  ADC_SoftwareStartInjectedConvCmd(ADC1,ENABLE);
   
  /* ADC Channel used for current reading are read 
     in order to get zero currents ADC values*/ 
  for(bIndex=0; bIndex <NB_CONVERSIONS; bIndex++)
  {
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_JEOC)) { }
    
    hPhaseAOffset += (ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1)>>3);
    hPhaseBOffset += (ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_2)>>3);
    hPhaseCOffset += (ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_3)>>3);    
        
    /* Clear the ADC1 JEOC pending flag */
    ADC_ClearFlag(ADC1, ADC_FLAG_JEOC);    
    ADC_SoftwareStartInjectedConvCmd(ADC1,ENABLE);
  }
  
  SVPWM_InjectedConvConfig();  
}



/*******************************************************************************
* Function Name  : SVPWM_InjectedConvConfig
* Description    : This function configure ADC1 for 3 shunt current 
*                  reading and temperature and voltage feedbcak after a 
*                  calibration of the three utilized ADC Channels
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SVPWM_InjectedConvConfig(void)
{
  /* ADC1 Injected conversions configuration */ 
  ADC_InjectedSequencerLengthConfig(ADC1,2);
  
  ADC_InjectedChannelConfig(ADC1, PHASE_B_ADC_CHANNEL, 1, 
                                                      SAMPLING_TIME_CK);
  ADC_InjectedChannelConfig(ADC1, BUS_VOLT_FDBK_CHANNEL, 
                                                   2, SAMPLING_TIME_CK);
    
  /* ADC1 Injected conversions trigger is TIM1 TRGO */ 
  ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_TRGO); 
  
  /* ADC2 Injected conversions configuration */ 
  ADC_InjectedSequencerLengthConfig(ADC2,2);
  
  ADC_InjectedChannelConfig(ADC2, PHASE_A_ADC_CHANNEL, 1, 
                                                      SAMPLING_TIME_CK);
  ADC_InjectedChannelConfig(ADC2, TEMP_FDBK_CHANNEL, 2,
                                                      SAMPLING_TIME_CK);
  ADC_ExternalTrigInjectedConvCmd(ADC2,ENABLE);

  /* Bus voltage protection initialization*/                            
  ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleInjecEnable);
  ADC_AnalogWatchdogSingleChannelConfig(ADC1,BUS_VOLT_FDBK_CHANNEL);
  ADC_AnalogWatchdogThresholdsConfig(ADC1, OVERVOLTAGE_THRESHOLD>>3,0x00);
   
  /* ADC1 Injected group of conversions end and Analog Watchdog interrupts
                                                                     enabling */
  ADC_ITConfig(ADC1, ADC_IT_JEOC | ADC_IT_AWD, ENABLE);
}

/*******************************************************************************
* Function Name  : SVPWM_3ShuntGetPhaseCurrentValues
* Description    : This function computes current values of Phase A and Phase B 
*                 in q1.15 format starting from values acquired from the A/D 
*                 Converter peripheral.
* Input          : None
* Output         : Stat_Curr_a_b
* Return         : None
*******************************************************************************/
Curr_Components SVPWM_3ShuntGetPhaseCurrentValues(void)
{
  Curr_Components Local_Stator_Currents;
  s32 wAux;

  switch (bSector)
   {
   case 4:
   case 5: //Current on Phase C not accessible     
           // Ia = (hPhaseAOffset)-(ADC Channel 11 value)    
            wAux = (s32)(hPhaseAOffset)- ((ADC1->JDR1)<<1);          
           //Saturation of Ia 
            if (wAux < S16_MIN)
            {
              Local_Stator_Currents.qI_Component1= S16_MIN;
            }  
            else  if (wAux > S16_MAX)
                  { 
                    Local_Stator_Currents.qI_Component1= S16_MAX;
                  }
                  else
                  {
                    Local_Stator_Currents.qI_Component1= wAux;
                  }
                     
           // Ib = (hPhaseBOffset)-(ADC Channel 12 value)
            wAux = (s32)(hPhaseBOffset)-((ADC2->JDR1)<<1);
           // Saturation of Ib
            if (wAux < S16_MIN)
            {
              Local_Stator_Currents.qI_Component2= S16_MIN;
            }  
            else  if (wAux > S16_MAX)
                  { 
                    Local_Stator_Currents.qI_Component2= S16_MAX;
                  }
                  else
                  {
                    Local_Stator_Currents.qI_Component2= wAux;
                  }
           break;
           
   case 6:
   case 1:  //Current on Phase A not accessible     
            // Ib = (hPhaseBOffset)-(ADC Channel 12 value)
            wAux = (s32)(hPhaseBOffset)-((ADC1->JDR1)<<1);
            //Saturation of Ib 
            if (wAux < S16_MIN)
            {
              Local_Stator_Currents.qI_Component2= S16_MIN;
            }  
            else  if (wAux > S16_MAX)
                  { 
                    Local_Stator_Currents.qI_Component2= S16_MAX;
                  }
                  else
                  {
                    Local_Stator_Currents.qI_Component2= wAux;
                  }
            // Ia = -Ic -Ib 
            wAux = ((ADC2->JDR1)<<1)-hPhaseCOffset-
                                            Local_Stator_Currents.qI_Component2;
            //Saturation of Ia
            if (wAux> S16_MAX)
            {
               Local_Stator_Currents.qI_Component1 = S16_MAX;
            }
            else  if (wAux <S16_MIN)
                  {
                   Local_Stator_Currents.qI_Component1 = S16_MIN;
                  }
                  else
                  {  
                    Local_Stator_Currents.qI_Component1 = wAux;
                  }
           break;
           
   case 2:
   case 3:  // Current on Phase B not accessible
            // Ia = (hPhaseAOffset)-(ADC Channel 11 value)     
            wAux = (s32)(hPhaseAOffset)-((ADC1->JDR1)<<1);
            //Saturation of Ia 
            if (wAux < S16_MIN)
            {
              Local_Stator_Currents.qI_Component1= S16_MIN;
            }  
            else  if (wAux > S16_MAX)
                  { 
                    Local_Stator_Currents.qI_Component1= S16_MAX;
                  }
                  else
                  {
                    Local_Stator_Currents.qI_Component1= wAux;
                  }
     
            // Ib = -Ic-Ia;
            wAux = ((ADC2->JDR1)<<1) - hPhaseCOffset - 
                                            Local_Stator_Currents.qI_Component1;
            // Saturation of Ib
            if (wAux> S16_MAX)
            {
              Local_Stator_Currents.qI_Component2=S16_MAX;
            }
            else  if (wAux <S16_MIN)
                  {  
                    Local_Stator_Currents.qI_Component2 = S16_MIN;
                  }
                  else  
                  {
                    Local_Stator_Currents.qI_Component2 = wAux;
                  }                     
           break;

   default:
           break;
   } 
  
  return(Local_Stator_Currents); 
}

/*******************************************************************************
* Function Name  : SVPWM_3ShuntCalcDutyCycles
* Description    : Computes duty cycle values corresponding to the input value
		   and configures the AD converter and TIM0 for next period 
		   current reading conversion synchronization
* Input          : Stat_Volt_alfa_beta
* Output         : None
* Return         : None
*******************************************************************************/

void SVPWM_3ShuntCalcDutyCycles (Volt_Components Stat_Volt_Input)
{
   s32 wX, wY, wZ, wUAlpha, wUBeta;
   u16  hTimePhA=0, hTimePhB=0, hTimePhC=0, hTimePhD=0;
   u16  hDeltaDuty;
    
   wUAlpha = Stat_Volt_Input.qV_Component1 * T_SQRT3 ;
   wUBeta = -(Stat_Volt_Input.qV_Component2 * T);

   wX = wUBeta;
   wY = (wUBeta + wUAlpha)/2;
   wZ = (wUBeta - wUAlpha)/2;
   
  // Sector calculation from wX, wY, wZ
   if (wY<0)
   {
      if (wZ<0)
      {
        bSector = SECTOR_5;
      }
      else // wZ >= 0
        if (wX<=0)
        {
          bSector = SECTOR_4;
        }
        else // wX > 0
        {
          bSector = SECTOR_3;
        }
   }
   else // wY > 0
   {
     if (wZ>=0)
     {
       bSector = SECTOR_2;
     }
     else // wZ < 0
       if (wX<=0)
       {  
         bSector = SECTOR_6;
       }
       else // wX > 0
       {
         bSector = SECTOR_1;
       }
    }
   
   /* Duty cycles computation */
  PWM4Direction=PWM2_MODE;
    
  switch(bSector)
  {  
    case SECTOR_1:
                hTimePhA = (T/8) + ((((T + wX) - wZ)/2)/131072);
				hTimePhB = hTimePhA + wZ/131072;
				hTimePhC = hTimePhB - wX/131072;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久久久久久夜| 亚洲丝袜精品丝袜在线| 久久久精品综合| 亚洲美女免费视频| 国产一级精品在线| 在线观看91精品国产麻豆| 亚洲国产电影在线观看| 97se狠狠狠综合亚洲狠狠| 欧美激情综合在线| 日韩电影免费在线看| 菠萝蜜视频在线观看一区| 欧美精品久久一区二区三区| 亚洲视频资源在线| 成人黄色电影在线 | 欧美男生操女生| 国产精品久久久久久久裸模| 国产在线国偷精品免费看| 欧美综合在线视频| 亚洲视频在线观看三级| 懂色av一区二区三区蜜臀| 欧美不卡一区二区| 日本成人中文字幕在线视频| 欧美四级电影在线观看| 一区二区三区在线播放| 欧美性一二三区| 欧美视频在线一区二区三区| 国产精品欧美久久久久无广告 | 国产精品国产成人国产三级| 国产成人av一区二区| 26uuu欧美| 国产精品亚洲视频| 欧美国产视频在线| 成人动漫一区二区| 1024成人网| 91网站在线播放| 亚洲激情一二三区| 欧美性生活久久| 天涯成人国产亚洲精品一区av| 欧美在线制服丝袜| 天天综合色天天| 欧美片在线播放| 免费xxxx性欧美18vr| 精品奇米国产一区二区三区| 国产在线视频精品一区| 久久精品人人做| 99久久亚洲一区二区三区青草| 中文字幕五月欧美| 欧美影片第一页| 日日噜噜夜夜狠狠视频欧美人| 欧美一区日韩一区| 精品一区中文字幕| 国产精品久久久久婷婷二区次| 色婷婷av一区二区三区gif | 国产精品国产三级国产有无不卡 | 亚洲成人777| 日韩精品自拍偷拍| 粉嫩绯色av一区二区在线观看| 1024成人网| 777xxx欧美| 国产大片一区二区| 亚洲精品va在线观看| 欧美成人激情免费网| 成人国产视频在线观看 | 国产精品美女久久久久久久久久久| 99精品久久99久久久久| 天堂蜜桃91精品| 国产欧美一区二区三区在线老狼| 色偷偷88欧美精品久久久| 日韩电影在线一区二区三区| 国产日韩欧美综合一区| 欧美色图一区二区三区| 国产一区二区0| 亚洲国产欧美日韩另类综合 | 欧美久久一二三四区| 国产在线精品一区二区| 亚洲激情网站免费观看| 欧美成人精品二区三区99精品| 99精品热视频| 国产剧情在线观看一区二区| 亚洲国产成人av网| 国产精品色哟哟| 日韩欧美国产一区二区在线播放 | 亚洲欧美电影一区二区| 精品日产卡一卡二卡麻豆| 91福利社在线观看| 成人久久视频在线观看| 青青青伊人色综合久久| 一区二区在线观看不卡| 国产午夜亚洲精品羞羞网站| 欧美老人xxxx18| 一本大道久久a久久精品综合| 国产一区二区三区蝌蚪| 五月婷婷欧美视频| 一区二区三区国产精华| 国产精品女主播在线观看| 久久香蕉国产线看观看99| 91精品国产麻豆| 精品视频一区二区不卡| 色天天综合久久久久综合片| 成人午夜电影久久影院| 国产高清一区日本| 国产一区二区主播在线| 久久9热精品视频| 日本午夜精品视频在线观看| 午夜久久福利影院| 亚洲国产精品久久人人爱蜜臀| 中文字幕日本不卡| 国产精品久久99| 国产精品免费视频观看| 国产精品女上位| 中文字幕一区av| 最新不卡av在线| 亚洲美女在线一区| 亚洲综合一二三区| 亚洲午夜羞羞片| 日韩在线a电影| 日本欧美一区二区三区乱码| 免费观看在线色综合| 日本亚洲天堂网| 麻豆一区二区三| 国产综合色视频| 国产激情视频一区二区三区欧美| 国产乱码精品一区二区三区五月婷 | 久久精品无码一区二区三区| 久久综合九色综合97_久久久| 精品美女被调教视频大全网站| 精品国产一区二区三区四区四| 欧美白人最猛性xxxxx69交| 精品国产伦一区二区三区免费| 久久综合色婷婷| 中文字幕在线免费不卡| 亚洲一区中文在线| 美女一区二区视频| 国产成人精品免费在线| 色94色欧美sute亚洲线路二| 精品视频在线免费| 欧美mv日韩mv亚洲| 亚洲国产成人一区二区三区| 亚洲综合成人在线视频| 日韩不卡一区二区三区| 国产精品2024| 91国偷自产一区二区三区成为亚洲经典| 欧美亚洲高清一区| 欧美电影免费观看高清完整版| 国产亚洲va综合人人澡精品| 亚洲男帅同性gay1069| 日韩激情在线观看| 粉嫩高潮美女一区二区三区| 欧美亚洲尤物久久| 久久综合久久综合久久综合| 亚洲人成在线播放网站岛国| 男人操女人的视频在线观看欧美 | 久久精品久久久精品美女| 国产在线播精品第三| 91天堂素人约啪| 日韩三级视频在线看| 亚洲欧洲制服丝袜| 久久91精品国产91久久小草| 91丨九色丨尤物| 久久久久久**毛片大全| 一区二区国产视频| 国产成人综合在线| 91.麻豆视频| 综合久久一区二区三区| 裸体一区二区三区| 99re这里只有精品首页| 精品日本一线二线三线不卡| 亚洲一区二区欧美日韩 | 欧洲一区二区三区在线| 久久久午夜精品理论片中文字幕| 亚洲一级片在线观看| 不卡视频在线看| 久久九九99视频| 久久国产精品无码网站| 欧洲日韩一区二区三区| 国产精品大尺度| 国产一区二区在线电影| 欧美一区二区在线不卡| 亚洲一区二区三区四区在线免费观看 | 高清不卡一区二区在线| 日韩午夜在线影院| 午夜视频一区在线观看| 不卡的av在线| 国产欧美日韩在线看| 精品一区二区三区的国产在线播放| 欧美性大战久久久久久久蜜臀| 中文字幕一区免费在线观看| 国产激情一区二区三区四区 | 亚洲国产精品t66y| 狠狠色丁香婷婷综合久久片| 欧美精三区欧美精三区| 一区二区三区四区视频精品免费 | 久久久久99精品国产片| 久久国产欧美日韩精品| 日韩视频在线你懂得| 日韩中文字幕亚洲一区二区va在线| 在线观看亚洲精品| 亚洲午夜免费电影| 欧美日韩日日夜夜| 婷婷国产v国产偷v亚洲高清|