資源簡介
利用STM32兩個定時器輸出4路PWM驅動全橋電路,兩路為一組互補PWM,兩組之間可以實現任意角度的移相,周期和占空比可任意調節

代碼片段和文件信息
/**
??******************************************************************************
??*?@file???:?PWMoutput.c
??*?@author?:?wind
??*?@version:
??*?@date???:
??*?@brief??:
??******************************************************************************
??*/
/*?---------------------------------------------------------------------------*/
#include?“PWMoutput.h“
/*********************************************
*?@fun????:
??*?@brief??:
??*?@note???:Default?duty?cycle?:?50%shift?phase?:0
??*?@param??:占空比*?1000?的整數
??*?@retval?:
********************************************
??*/
void?PWM_Init(uint32_t?frequint16_t?DutyC_1000uint16_t?shiftph)
{
uint16_t?pulw??period?;
period?=?72*1000000?/?freq;?//計時器時鐘為72MHz?時PWM?一個周期內的總計數次數
pulw?=?period?*?DutyC_1000?/1000?;??//?脈沖寬度的計數次數,=?總次數*?占空比
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??:脈寬和整個周期的計數次數
??*?@retval?:
********************************************
??*/
/****************************************
//暫時設計一個周期內計數次數nT次,輸入第一個參數為占空比x?1000
//為脈寬計數次數
********************************************/
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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????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
評論
共有 條評論