• 大小: 3KB
    文件类型: .zip
    金币: 2
    下载: 4 次
    发布日期: 2021-06-23
  • 语言: 其他
  • 标签: PWM  相位差  STM32  

资源简介

自己在别人的基础上修改的(之前不能修改占空比),既能够修改相位差也能修改占空比,看完之后你能理解这个思想就可以随便修改了

资源截图

代码片段和文件信息

#include “tim.h“
#include “stm32f10x.h“

/*
1、同一个定时器的不同通道之间实现PWM输出不同的占空比和相位
可以利用修改PWM的输出模式为TIM_OCMode_Toggle,可以实现;
1)当比较寄存器的值一直不变化时,输出的占空比是50%,不变化;改变两个通道之间的相位的话,可以通过改变通道的输出极性和[一个通道比较值为0,另一个比较值设定既可实现]
2)当想要改变PWM的相位和占空比时,需要在该定时器的更新中断中,修改比较寄存器的值(设定两个比较值既可,在更新中断中轮训改变寄存器值)
3)在程序运行时,改变占空比的同时,也会改变相位。同时在改变的PWM第一拍,占空比的值是不对的。
*/


u16 Test_CH1Test_CH1_1Test_CH2 Test_CH2_1 Period1;
void TIM3_Config(uint16_t preuint16_t arr)
{
   TIM_TimebaseInitTypeDef  TIM_TimebaseInitStructure;
 NVIC_InitTypeDef        NVIC_InitHALLStructure;

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3ENABLE);
   //这个函数就在一开始的时候使用切记
   TIM_DeInit(TIM3);
   //TIM
   TIM_TimebaseInitStructure.TIM_Prescaler = pre;
   TIM_TimebaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimebaseInitStructure.TIM_Period  = arr;
   TIM_TimebaseInitStructure.TIM_ClockDivision = 0;
   TIM_TimebaseInitStructure.TIM_RepetitionCounter = 0;
   TIM_TimebaseInit(TIM3&TIM_TimebaseInitStructure);
 
 TIM_UpdateRequestConfig(TIM3 TIM_UpdateSource_Regular);
 
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 NVIC_InitHALLStructure.NVIC_IRQChannel = TIM3_IRQn;
 NVIC_InitHALLStructure.NVIC_IRQChannelPreemptionPriority =  1;//2
                                                     
    NVIC_InitHALLStructure.NVIC_IRQChannelSubPriority = 1;//0
    NVIC_InitHALLStructure.NVIC_IRQChannelCmd = ENABLE;
    
    NVIC_Init(&NVIC_InitHALLStructure);
  TIM_ITConfig(TIM3 TIM_IT_Update ENABLE);

   //open periph
   TIM_Cmd(TIM3ENABLE);
   
}
//TIM3 CH1 PA6  CH2 PA7
void PWM_Config(uint16_t pulseuint16_t degFunctionalState status)
{
TIM_OCInitTypeDef  TIM_OCInitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIOENABLE);

//GPIO

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA&GPIO_InitStructure);

//TIM OC
TIM_OC1PreloadConfig(TIM3TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//TIM_OCMode_PWM1  TIM_OCMode_Toggle
if(status)
{
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
}
else
{
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
}
TIM_OCInitStructure.TIM_Pulse = TIMX_CH1_CCRx_First;//CH1---PA6
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
if(status)
{
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
}
else
{
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
}
TIM_OCInitStructure.TIM_Pulse = TIMX_CH2_CCRx_First;
    //当小于等于180度的时候使用相反的极性
if(deg<=180)
{
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
}
//当大于的时候使用相同的极性

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-10-28 11:25  STM32 同一个定时输出不同的相位差和占空比\
     文件        5626  2017-10-28 11:25  STM32 同一个定时输出不同的相位差和占空比\time.c
     文件         461  2017-10-28 11:25  STM32 同一个定时输出不同的相位差和占空比\time.h

评论

共有 条评论