你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何用STM32产生相位差180度,且占空比可调的两路PWM

[复制链接]
tonghua 提问时间:2016-3-25 16:07 /
最近需要用到两路相位差180度,且占空比可调的PWM,看到论坛上说用输出比较模式,但输出比较模式只能产生一定相位差且占空比固定的PWM,求助
收藏 评论2 发布时间:2016-3-25 16:07

举报

2个回答
tonghua 回答时间:2016-3-25 16:29:08
自己顶起来
shuolang 回答时间:2016-3-26 06:46:40
使用TIM1的反相输出功能,具体你可以看官方例程,大概代码如下:
//TIM1做PWM输出
void Tim1_Config(void)
{
  TimerPeriod =  (SystemCoreClock / 20000 ) - 1;
  ccr1 = TimerPeriod / 2;  //占空比1/2 = 50%
  ccr2 = TimerPeriod / 3;  //占空比1/3 = 33%
  ccr3 = TimerPeriod / 4;  //占空比1/4 = 25%
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
  //时基初始化
  TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //死区控制用。
  TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数器方向
  TIM_TimeBaseInitStructure.TIM_Prescaler = 0;   //Timer clock = sysclock /(TIM_Prescaler+1) = 168M
  TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
  TIM_TimeBaseInitStructure.TIM_Period = TimerPeriod - 1;  
  TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
  
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_Pulse = ccr1;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
  
  TIM_OC1Init(TIM1,&TIM_OCInitStructure);
  
  TIM_Cmd(TIM1,ENABLE);
  TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
例如使用OC1/OC1N两个通道输出反向信号如下,是否你要的效果?




所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版