stm32f030 TIM1 PWM Applications (BLDC applications)

Source: Internet
Author: User

= = File time1.h============================================================ #ifndef _time1_h_#define _TIME1_H_# The include "Stm32f0xx.h"//======== defines the frequency ================================================ of the PWM #defineDEF_PWMFREDEF_ pwmfre_16k#definedef_pwmfre_8k8000//Count period value is 48000000/8000=6000#definedef_pwmfre_16k16000//count period value is 48000000/16000= 0.02u/n#definedef_pwmfre_20k20000//count period value is 48000000/20000=2400#definedef_pwmfre_25k25000//count period value is 48000000/ 16000=1920#definedef_pwmfre_30k30000//count period value is 48000000/16000=1600//========PWM1 2 3 channel output enable bit operation ====================== =============== #definePWMA_EnbTIM1->ccer |= (uint16_t) (((uint16_t) tim_ccer_cc1e) #definePWMA_DisTIM1->ccer &= (uint16_t) (~ ((uint16_t) tim_ccer_cc1e)) #definePWMB_EnbTIM1->ccer |= (uint16_t) (((uint16_t) tim_ccer_cc2e) ) #definePWMB_DisTIM1->ccer &= (uint16_t) (~ (uint16_t) tim_ccer_cc2e) #definePWMC_EnbTIM1->ccer |= (uint16 _t) ((((uint16_t) tim_ccer_cc3e)) #definePWMC_DisTIM1->ccer &= (uint16_t) (~ ((uint16_t) tim_ccer_cc3e)) # DefinepwmD_enbtim1->ccer |= (uint16_t) (((uint16_t) tim_ccer_cc4e) #definePWMD_DisTIM1->ccer &= (uint16_t) (( uint16_t) (tim_ccer_cc4e)) #definePWMABC_Dis tim1->ccer &= (uint16_t) ((uint16_t) (tim_ccer_cc1e| tim_ccer_cc2e| tim_ccer_cc3e))//========PWM1 2 3-channel complementary output enable bit operation ===================================== #definePWMAN_EnbTIM1->ccer | = (uint16_t) (((uint16_t) tim_ccer_cc1ne)) #definePWMAN_DisTIM1->ccer &= (uint16_t) (~ (uint16_t) Tim_ccer_ cc1ne)) #definePWMBN_EnbTIM1->ccer |= (uint16_t) (((uint16_t) tim_ccer_cc2ne)) #definePWMBN_DisTIM1->ccer & = (uint16_t) (~ ((uint16_t) tim_ccer_cc2ne)) #definePWMCN_EnbTIM1->ccer |= (uint16_t) (((uint16_t) tim_ccer_cc3ne)) # Definepwmcn_distim1->ccer &= (uint16_t) (~ (uint16_t) tim_ccer_cc3ne) #definePWMDN_EnbTIM1->ccer |= ( uint16_t) (((uint16_t) tim_ccer_cc4ne)) #definePWMDN_DisTIM1->ccer &= (uint16_t) (~ ((uint16_t) tim_ccer_cc4ne) ) #definePWMABCN_Enb tim1->ccer |= (uint16_t) ((uint16_t) (tim_ccer_cc1ne| tim_ccer_cc2ne| Tim_ccer_cc3ne)))#definePWMABCN_Dis tim1->ccer &= (uint16_t) (~ (uint16_t) (tim_ccer_cc1ne| tim_ccer_cc2ne| Tim_ccer_cc3ne)))//======== enable CC4 compare interrupts ===================================== #defineTIM1_CMP4IEN_ENBTIM1->dier | = TIM_IT_CC4//((uint16_t) 0x0010) #defineTIM1_CMP4IEN_DISTIM1->dier &= ~tim_it_cc4////======== enable CC4 update Interrupt ===== ================================//#defineTIM1_UpdateIEN_ENBTIM1->dier |= tim_it_update//((uint16_t) 0x0010)//# Definetim1_updateien_distim1->dier &= ~tim_it_update//========= comparison 4 interrupt entry point in time =============================== = = #defineV_CCP4PW150////===================================================extern void tim1_gpio_init (void); extern void Tim1_pwm_config (void), extern void Topwmvalue (UInt16 Tcon), extern void Bldc_bak (uint16_t pwmduty), extern voi D bldc_bak_end (void), extern void Tim1_ccp4nvic_config (void), extern void Toccp4pwmvalue (UInt16 pwmduty), #endif/* _time 1_h_ *///== file time1.c============================================================ #include "global.h"#include" time1.h "Tim_timebaseinittypedef tim_time1basestructure; Tim_ocinittypedef tim_ocinitstructure;uint16_t timerperiod = 0;//#defineDEF_PWM_NCP_ENB1//PWM complementary enable definition/************** Function Name: tim1_gpio_init* function Description: TIM1--GPIO PIN Configuration---Here you can set 6 PWM output * Input parameters: void* return parameter: No ***************************************************************  /void tim1_gpio_init (void) {gpio_inittypedef gpio_initstructure;    /* Enable GPIO clock */Rcc_ahbperiphclockcmd (RCC_AHBPERIPH_GPIOA, enable); /* Configure GPIO Pin multiplexing PWM1 PWM2 PWM3 */gpio_initstructure.gpio_pin = Gpio_pin_8 | Gpio_pin_9 | gpio_pin_10;//|  Gpio_pin_11 Gpio_initstructure.gpio_mode = GPIO_MODE_AF;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp;  GPIO_INITSTRUCTURE.GPIO_PUPD = Gpio_pupd_down;//gpio_pupd_up;  Gpio_init (Gpioa, &gpio_initstructure); Gpio_pinafconfig (Gpioa, Gpio_pinsource8, gpio_af_2); Turn on the PA8 multiplexing function gpio_pinafconfIG (Gpioa, Gpio_pinsource9, gpio_af_2); Open PA9 multiplexing function gpio_pinafconfig (Gpioa, Gpio_pinsource10, gpio_af_2); Open PA10 multiplexing function//Gpio_pinafconfig (Gpioa, Gpio_pinsource11, gpio_af_2); ----------Down tube PA7 PB0 PB1 configuration---------------------------------------------------gpio_initstructure.gpio_pin = Gpio_  pin_7;//Gpio_initstructure.gpio_mode = Gpio_mode_out;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp;  GPIO_INITSTRUCTURE.GPIO_PUPD = Gpio_pupd_nopull;  Gpio_init (Gpioa, &gpio_initstructure); -----------------------------------------------------------------------------------/* Configure GPIO PIN PWM2 PWM3 complementary gpio P    B0 PB1 */Rcc_ahbperiphclockcmd (RCC_AHBPERIPH_GPIOB, ENABLE); Gpio_initstructure.gpio_pin = Gpio_pin_0 | gpio_pin_1;//| |  Gpio_pin_11 Gpio_initstructure.gpio_mode = gpio_mode_out;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp; GPIO_INITSTRUCTURE.GPIO_PUPD = Gpio_pupd_nopull;  Gpio_init (Gpiob, &gpio_initstructure); }/******************************************************************************** function Name: GPIO_DOWNPIN_ConfigRst* Function Description: BLDC down Tube io configured as normal mode * input parameter: void* return parameter: No *************************************************************************  /void Gpio_downpin_afconfigrst (void) {gpio_inittypedef gpio_initstructure;  Gpio_initstructure.gpio_pin = gpio_pin_7;//Gpio_initstructure.gpio_mode = Gpio_mode_out;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp;  GPIO_INITSTRUCTURE.GPIO_PUPD = Gpio_pupd_nopull;    Gpio_init (Gpioa, &gpio_initstructure); Gpio_initstructure.gpio_pin = Gpio_pin_0 | gpio_pin_1;//| |  Gpio_pin_11 Gpio_initstructure.gpio_mode = gpio_mode_out;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp;  GPIO_INITSTRUCTURE.GPIO_PUPD = Gpio_pupd_nopull;    Gpio_init (Gpiob, &gpio_initstructure); }/************************************Function Name: gpio_downpin_afconfig* function Description: BLDC down Tube io configured as AF mode * input parameter: void* return parameter: None * * /void gpio_downpin_afconfig (void)  {Gpio_inittypedef gpio_initstructure;  Gpio_initstructure.gpio_pin = gpio_pin_7;//Gpio_initstructure.gpio_mode = GPIO_MODE_AF;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp;  GPIO_INITSTRUCTURE.GPIO_PUPD = gpio_pupd_up;  Gpio_init (Gpioa, &gpio_initstructure); Gpio_pinafconfig (Gpioa, Gpio_pinsource7, gpio_af_2); ----------------------------------------------------------Gpio_initstructure.gpio_pin = Gpio_pin_0 | gpio_pin_1;//| |  Gpio_pin_11 Gpio_initstructure.gpio_mode = GPIO_MODE_AF;  Gpio_initstructure.gpio_speed = Gpio_speed_50mhz;  Gpio_initstructure.gpio_otype = gpio_otype_pp;  GPIO_INITSTRUCTURE.GPIO_PUPD = gpio_pupd_up;     Gpio_init (Gpiob, &gpio_initstructure); Gpio_pinafconfig (GPIOB, Gpio_pinsource0, gpio_af_2); Gpio_pinafconfig (Gpiob, Gpio_pinsource1, gpio_af_2);} /******************************************************************************** function Name: TIM1_PWM_Config* function Description: TIM1-PWM configuration * Input parameters: void* return parameter: No ********************************************************************************/ The configuration of void tim1_pwm_config (void) {/* TIM1---------------------------------------------------TIM1 input Clock (TIM1CLK) is set to APB2  Clock (PCLK2) = TIM1CLK = PCLK2 = Systemcoreclock TIM1CLK = systemcoreclock, Prescaler = 0, TIM1 counter clock = Systemcoreclock Systemcoreclock is a 4-way PWM signal for our target at 17.57 KHz:-tim1_period = (systemcoreclock/17570 )-1 Channel 1 the duty ratio set for 50% Channel 2 is set to a duty ratio of 37.5% Channel 3 to the duty ratio set for 25% Channel 4 and the duty ratio for 12.5% timer pulses is calculated as follows:-Channelxpulse = Dutycy  CLE * (TIM1_PERIOD-1)/100*//* Calculates the value of a predetermined table, that is, how many clocks count to one cycle *///timerperiod = (systemcoreclock/17570)-1;  Timerperiod = (systemcoreclock/def_pwmfre)-1; Timerperiod = (systemcoreclock /Def_pwmfre);    /* TIM1 Clock Enable */Rcc_apb2periphclockcmd (RCC_APB2PERIPH_TIM1, enable);  /* Time Base setting */Tim_time1basestructure.tim_prescaler = 0;  Tim_time1basestructure.tim_countermode = tim_countermode_up;  /* Timing set to rising edge calculation mode */tim_time1basestructure.tim_period = Timerperiod;  tim_time1basestructure.tim_clockdivision = 0;  Tim_time1basestructure.tim_repetitioncounter = 0;  Tim_timebaseinit (TIM1, &tim_time1basestructure);  /* PWM mode setting for Channel 1,2,3,4 */tim_ocinitstructure.tim_ocmode = TIM_OCMODE_PWM1; Tim_ocinitstructure.tim_outputstate = tim_outputstate_disable;//tim_outputstate_enable; PWM output Enable bit tim_ocinitstructure.tim_outputnstate = tim_outputnstate_disable;//tim_outputnstate_enable;  Complementary PWM output Enable bit tim_ocinitstructure.tim_ocpolarity = Tim_ocpolarity_high; The PWM 1 is the active level tim_ocinitstructure.tim_ocnpolarity = Tim_ocnpolarity_low;  PWM complementary 0 is an effective level tim_ocinitstructure.tim_ocidlestate = Tim_ocidlestate_set;  Tim_ocinitstructure.tim_ocnidlestate = Tim_ocidlestate_reset; Tim_oCinitstructure.tim_pulse = 0; Assignment duty ratio tim_oc1init (TIM1, &tim_ocinitstructure);//Enable Channel 1 configuration Tim_ocinitstructure.tim_pulse = 0; Assignment duty ratio tim_oc2init (TIM1, &tim_ocinitstructure);//Enable Channel 2 configuration Tim_ocinitstructure.tim_pulse = 0;    Assignment duty ratio tim_oc3init (TIM1, &tim_ocinitstructure);//Enable Channel 3 configuration//------enable to compare Quad channel------------------------------------ Tim_ocinitstructure.tim_outputstate = tim_outputstate_disable;//tim_outputstate_enable;  Tim_ocinitstructure.tim_pulse = V_CCP4PW; Tim_oc4init (TIM1, &tim_ocinitstructure); Tim_itconfig (TIM1,TIM_IT_CC4, ENABLE);  TIM1 compare four interrupts//--------------------------------------------------------/* TIM1 Calculator Enable */Tim_cmd (TIM1, enable); /* TIM1 main output Enable */Tim_ctrlpwmoutputs (TIM1, enable);} /******************************************************************************** function Name: ToPwmValue* function Description: Assign each channel duty-free ratio * Input parameters: duty-free ratio * return parameter: no ********************************************************************************/void Topwmvalue (UInt16 pwmduty) {TIM1->CCR1 = Pwmduty ; TIM1->CCR2 = pwmduty; TIM1->CCR3 = pwmduty;//TIM1->CCR4 = pwmduty;} /******************************************************************************** function Name: BLDC_Bak* function Description: Brake * Input Parameters: Brake Duty * Return parameter: no ********************************************************************************/void BLDC_Bak ( uint16_t pwmduty) {gpio_downpin_afconfig (); Pwmabc_dis; Off PWM output Pwmabcn_enb; Enable complementary PWM output TIM1->CCR1 = pwmduty; Brake PWM value Tim1->ccr2 = pwmduty; TIM1->CCR3 = pwmduty;} /******************************************************************************** function Name: BLDC_Bak_End* function Description: At the end of the brake Initialize the pipe configuration to normal IO mode * input parameters: Brake Duty ratio * Return parameter: no ***************************************************************************** /void bldc_bak_end (void) {Pwmabcn_dis;//Inhibit complementary output gpio_downpin_afconfigrst ();//}/******************************** Function Name: tim1_ccp4nvic_config* function Description: TIM1 CCR4 Interrupt configuration * Input parameters: None * return parameter: NO * * * * ********************************************************/void tim1_ccp4nvic_config (void) {nvic_inittypedef nvic_initstructure;  /* TIM1 Clock Enable */Rcc_apb2periphclockcmd (RCC_APB2PERIPH_TIM1, enable);  /* TIM1 Interrupt nesting design */Nvic_initstructure.nvic_irqchannel = tim1_cc_irqn;//tim3_irqn;  nvic_initstructure.nvic_irqchannelpriority = 0;  Nvic_initstructure.nvic_irqchannelcmd = ENABLE;  Nvic_init (&nvic_initstructure); }/******************************************************************************** function Name: ToCCP4PwmValue* function Description: Assign compare 4 Interrupt Time value * Input parameter: Duty ratio * Return parameter: no ********************************************************************************/ void Toccp4pwmvalue (UInt16 pwmduty) {TIM1->CCR4 = pwmduty;}

Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.

stm32f030 TIM1 PWM Applications (BLDC applications)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.