// // Boost_HW_SetPwm() // void Boost_HW_SetPwm(void) { GPIO_InitTypeDef gpioL, gpioH, gpioIn; gpioL.GPIO_Pin = BOOST_PWM_L_PIN; gpioL.GPIO_Mode = GPIO_Mode_AF; gpioL.GPIO_OType = GPIO_OType_PP; gpioL.GPIO_Speed = GPIO_Speed_Level_3; gpioH.GPIO_Pin = BOOST_PWM_H_PIN; gpioH.GPIO_Mode = GPIO_Mode_AF; gpioH.GPIO_OType = GPIO_OType_PP; gpioH.GPIO_Speed = GPIO_Speed_Level_3; gpioIn.GPIO_Pin = BOOST_IN_PIN; gpioIn.GPIO_Mode = GPIO_Mode_OUT; gpioIn.GPIO_OType = GPIO_OType_PP; gpioIn.GPIO_Speed = GPIO_Speed_Level_3; //Aciona o clock do HRTIM: RCC_APB2PeriphClockCmd(RCC_APB2Periph_HRTIM1, ENABLE); RCC_HRTIM1CLKConfig(RCC_HRTIM1CLK_PLLCLK); //Aciona o pino que queremos o HRTIM: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); GPIO_Init(BOOST_PWM_PORT, &gpioL); GPIO_PinAFConfig(BOOST_PWM_PORT, GPIO_PinSource10,GPIO_AF_13); GPIO_Init(BOOST_PWM_PORT, &gpioH); GPIO_PinAFConfig(BOOST_PWM_PORT, GPIO_PinSource11,GPIO_AF_13); GPIO_Init(BOOST_PWM_PORT, &gpioIn); GPIO_ResetBits(BOOST_PWM_PORT, BOOST_IN_PIN); //COnfigura o HRTIM para obter-se uma saida pushpull em pwmH e L: // OBS usamos o timer B HRTIM1->HRTIM_MASTER.MCR = 0x00000000; //desliga o HRTIM HRTIM1->HRTIM_MASTER.MPER = BOOST_HRTIM_LOAD_VAL(BOOST_SW_FREQ); //Periodo do master timer HRTIM1->HRTIM_TIMERx[1].TIMxCR = 0x00000000 | ( 1 << 3); //MOdo de operacao como output compare e em push-pull HRTIM1->HRTIM_TIMERx[1].PERxR = BOOST_HRTIM_LOAD_VAL(BOOST_SW_FREQ); //TPWM em hertz acertado HRTIM1->HRTIM_TIMERx[1].CMP1xR = MAP_TO_PWM(1.0f); //Duty cicle minimo HRTIM1->HRTIM_TIMERx[1].SETx1R = (1 << 2); //acerta evento de set HRTIM1->HRTIM_TIMERx[1].RSTx1R = (1 << 3); //e evento de reset //HRTIM1->HRTIM_TIMERx[1].SETx2R = (1 << 2); //HRTIM1->HRTIM_TIMERx[1].RSTx2R = (1 << 3); HRTIM1->HRTIM_TIMERx[1].DTxR = (250 << 16) | (250 << 0) | (0x01 << 10); //acerta o dead time para 20ns (obtido experim.) HRTIM1->HRTIM_TIMERx[1].OUTxR = (1 << 8); //acerta o sistema de push pull HRTIM1->HRTIM_COMMON.OENR = (1 << 2) | (1 << 3); //habilita as saidas PWM. HRTIM1->HRTIM_MASTER.MCR = 0x003F0008; //Habilita o master timer }
//configure high resolution timer for buck converter and RF out //push pull mode for HRTIM1_B void RF_config(){ HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure; HRTIM_BaseInitTypeDef HRTIM_BaseInitStruct; HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure; HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure; HRTIM_CompareCfgTypeDef HRTIM_CompareStructure; /* ----------------------------*/ /* HRTIM Global initialization */ /* ----------------------------*/ /* Use the PLLx2 clock for HRTIM */ RCC_HRTIM1CLKConfig(RCC_HRTIM1CLK_PLLCLK); /* Enable HRTIM clock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_HRTIM1, ENABLE); /* HRTIM DLL calibration: periodic calibration, set period to 14µs */ HRTIM_DLLCalibrationStart(HRTIM1, HRTIM_CALIBRATIONRATE_14); HRTIM1_COMMON->DLLCR |= HRTIM_DLLCR_CALEN; /* Wait calibration completion*/ while(HRTIM_GetCommonFlagStatus(HRTIM1, HRTIM_ISR_DLLRDY) == RESET); /* --------------------------------------------------- */ /* TIMERB initialization: timer mode and PWM frequency */ /* --------------------------------------------------- */ HRTIM_TimerInitStructure.HalfModeEnable = HRTIM_HALFMODE_DISABLED; HRTIM_TimerInitStructure.StartOnSync = HRTIM_SYNCSTART_DISABLED; HRTIM_TimerInitStructure.ResetOnSync = HRTIM_SYNCRESET_DISABLED; HRTIM_TimerInitStructure.DACSynchro = HRTIM_DACSYNC_NONE; HRTIM_TimerInitStructure.PreloadEnable = HRTIM_PRELOAD_ENABLED; HRTIM_TimerInitStructure.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT; HRTIM_TimerInitStructure.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK; HRTIM_TimerInitStructure.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED; //setup hrtimer for max clock speed in continous mode. HRTIM_BaseInitStruct.Period = PERIOD_6_78MHZ; HRTIM_BaseInitStruct.RepetitionCounter = 255; //this is for interupts? HRTIM_BaseInitStruct.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL32; HRTIM_BaseInitStruct.Mode= HRTIM_MODE_CONTINOUS; //setup timer B HRTIM_Waveform_Init(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, &HRTIM_BaseInitStruct, &HRTIM_TimerInitStructure); HRTIM_TimerWaveStructure.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED; HRTIM_TimerWaveStructure.DelayedProtectionMode = HRTIM_TIMDELAYEDPROTECTION_DISABLED; HRTIM_TimerWaveStructure.FaultEnable = HRTIM_TIMFAULTENABLE_NONE; HRTIM_TimerWaveStructure.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE; HRTIM_TimerWaveStructure.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED; HRTIM_TimerWaveStructure.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE; HRTIM_TimerWaveStructure.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED; HRTIM_TimerWaveStructure.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE; HRTIM_WaveformTimerConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, &HRTIM_TimerWaveStructure); //more configure things HRTIM_TIM_OutputStructure.Polarity = HRTIM_OUTPUTPOLARITY_HIGH; HRTIM_TIM_OutputStructure.SetSource = HRTIM_OUTPUTSET_TIMPER; HRTIM_TIM_OutputStructure.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1; HRTIM_TIM_OutputStructure.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE; HRTIM_TIM_OutputStructure.IdleState = HRTIM_OUTPUTIDLESTATE_INACTIVE; HRTIM_TIM_OutputStructure.FaultState = HRTIM_OUTPUTFAULTSTATE_INACTIVE; HRTIM_TIM_OutputStructure.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED; HRTIM_TIM_OutputStructure.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR; HRTIM_WaveformOutputConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1, &HRTIM_TIM_OutputStructure); HRTIM_TIM_OutputStructure.SetSource = HRTIM_OUTPUTSET_TIMCMP2; HRTIM_TIM_OutputStructure.ResetSource = HRTIM_OUTPUTRESET_TIMCMP3; HRTIM_WaveformOutputConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB2, &HRTIM_TIM_OutputStructure); //set up the 3 compares HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR; HRTIM_CompareStructure.AutoDelayedTimeout = 0; HRTIM_CompareStructure.CompareValue = (PERIOD_6_78MHZ>>1); //starting value HRTIM_WaveformCompareConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, &HRTIM_CompareStructure); HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR; HRTIM_CompareStructure.AutoDelayedTimeout = 0; HRTIM_CompareStructure.CompareValue = (PERIOD_6_78MHZ)>>2; //starting value HRTIM_WaveformCompareConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_2, &HRTIM_CompareStructure); HRTIM_CompareStructure.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR; HRTIM_CompareStructure.AutoDelayedTimeout = 0; HRTIM_CompareStructure.CompareValue = (PERIOD_6_78MHZ*3)>>2; //starting value HRTIM_WaveformCompareConfig(HRTIM1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_3, &HRTIM_CompareStructure); //enable timer HRTIM_WaveformCounterStart(HRTIM1, HRTIM_TIMERID_TIMER_B); }