資源簡介
利用STM32兩個(gè)定時(shí)器輸出4路PWM驅(qū)動(dòng)全橋電路,兩路為一組互補(bǔ)PWM,兩組之間可以實(shí)現(xiàn)任意角度的移相,周期和占空比可任意調(diào)節(jié)

代碼片段和文件信息
/**
??******************************************************************************
??*?@file???:?PWMoutput.c
??*?@author?:?wind
??*?@version:
??*?@date???:
??*?@brief??:
??******************************************************************************
??*/
/*?---------------------------------------------------------------------------*/
#include?“PWMoutput.h“
/*********************************************
*?@fun????:
??*?@brief??:
??*?@note???:Default?duty?cycle?:?50%shift?phase?:0
??*?@param??:占空比*?1000?的整數(shù)
??*?@retval?:
********************************************
??*/
void?PWM_Init(uint32_t?frequint16_t?DutyC_1000uint16_t?shiftph)
{
uint16_t?pulw??period?;
period?=?72*1000000?/?freq;?//計(jì)時(shí)器時(shí)鐘為72MHz?時(shí)PWM?一個(gè)周期內(nèi)的總計(jì)數(shù)次數(shù)
pulw?=?period?*?DutyC_1000?/1000?;??//?脈沖寬度的計(jì)數(shù)次數(shù),=?總次數(shù)*?占空比
shiftph?+=?340*72/1000;
PWM_GPIO_Config();
PWM_TIM_Config(?pulw?periodshiftph);
}
void?PWM_GPIO_Config(void)
{
GPIO_InitTypeDef??GPIO_InitStruct;
RCC_AHBPeriphClockCmd((PWM1_PORT_CLK?|PWM2_PORT_CLK?|PWM3_PORT_CLK?|PWM4_PORT_CLK?)?ENABLE);
// RCC_AHBPeriphClockCmd(PWM_PORT_CLKENABLE);
//PWM?GPIO?Init
GPIO_InitStruct.GPIO_Mode?=?GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType?=?GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed?=?GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd?=?GPIO_PuPd_NOPULL;
/***********
GPIO_InitStruct.GPIO_Pin?=?PWM1_PIN?|PWM2_PIN?|PWM3_PIN?|PWM4_PIN?;
GPIO_Init(PWM_PORT?&GPIO_InitStruct);
***********/
GPIO_InitStruct.GPIO_Pin?=?PWM1_PIN;
GPIO_Init(PWM1_PORT?&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin?=?PWM2_PIN;
GPIO_Init(PWM2_PORT?&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin?=?PWM3_PIN;
GPIO_Init(PWM3_PORT?&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin?=?PWM4_PIN;
GPIO_Init(PWM4_PORT?&GPIO_InitStruct);
GPIO_PinAFConfig(PWM1_PORT?PWM1_PIN_SPURCE?PWM1_PIN_AF);
GPIO_PinAFConfig(PWM2_PORT?PWM2_PIN_SPURCE?PWM2_PIN_AF);
GPIO_PinAFConfig(PWM3_PORT?PWM3_PIN_SPURCE?PWM3_PIN_AF);
GPIO_PinAFConfig(PWM4_PORT?PWM4_PIN_SPURCE?PWM4_PIN_AF);
}
/*********************************************
*?@fun????:
??*?@brief??:
??*?@note???:
??*?@param??:脈寬和整個(gè)周期的計(jì)數(shù)次數(shù)
??*?@retval?:
********************************************
??*/
/****************************************
//暫時(shí)設(shè)計(jì)一個(gè)周期內(nèi)計(jì)數(shù)次數(shù)nT次,輸入第一個(gè)參數(shù)為占空比x?1000
//為脈寬計(jì)數(shù)次數(shù)
********************************************/
void?PWM_TIM_Config(uint16_t?pulse??uint16_t?Perioduint16_t?shiftph)
{
TIM_TimebaseInitTypeDef??TIM_TimebaseInitStruct;
TIM_OCInitTypeDef??TIM_OCInitStruct;
TIM_BDTRInitTypeDef?TIM_BDTRInitStruct;
//Open?the??clock?
RCC_APB2PeriphClockCmd(PWM1_TIM_CLK?|PWM2_TIM_CLK?|PWM3_TIM_CLK?|PWM4_TIM_CLK?ENABLE);
//TimebaseInit
TIM_TimebaseInitStruct.TIM_Prescaler?=?0;
TIM_TimebaseInitStruct.TIM_CounterMode?=?TIM_CounterMode_Up;
TIM_TimebaseInitStruct.TIM_Period?=?Period?-?1;
TIM_TimebaseInitStruct.TIM_ClockDivision?=?TIM_CKD_DIV1?;
TIM_TimebaseInitStruct.TIM_Re
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????5397??2015-04-03?15:51??任意角度移相全橋PWM\PWMoutput.c
?????文件???????2383??2015-04-03?13:59??任意角度移相全橋PWM\PWMoutput.h
?????目錄??????????0??2015-04-03?15:55??任意角度移相全橋PWM
-----------?---------??----------?-----??----
?????????????????7780????????????????????3
評(píng)論
共有 條評(píng)論