2412|6

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请大侠帮助,PWM波形问题 [复制链接]

大家好,紧急求助,我想利用STM1和STM3两个定时器的PWM输出,产生下图所示的一个波形

想法是,让两个定时器产生同样的两个PWM输出,但是两个错时输出,一开一关,程序是这样的:
void Init_TIM1(void)
{
        TIM1_DeInit();
        TIM1_TimeBaseInit(0,TIM1_COUNTERMODE_UP,TIM1ARRValue,0);//  10KHz  12MHz
        TIM1_OC2Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, TIM1CompareValue, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_RESET);
        TIM1_OC2PreloadConfig(ENABLE);
        TIM1_ARRPreloadConfig(ENABLE);       
        TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);       
        TIM1_Cmd(ENABLE);
        TIM1_CtrlPWMOutputs(ENABLE);       
}

void Init_TIM3(void)
{
        TIM3_DeInit();
        TIM3_TimeBaseInit(TIM3_PRESCALER_1,TIM1ARRValue);//  10KHz  20MHz
        TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, TIM3CompareValue, TIM3_OCPOLARITY_HIGH);
        TIM3_OC1PreloadConfig(ENABLE);
        TIM3_ARRPreloadConfig(ENABLE);
        TIM3_ITConfig(TIM3_IT_UPDATE, ENABLE);
        TIM3_Cmd(DISABLE);
}


@far @interrupt void TIM1_UPD_OVF_BRK_IRQHandler(void)
{
        TIM1_Cmd(DISABLE);
        TIM3_SetCompare1(TIM3CompareValue);
        TIM3_Cmd(ENABLE);
        TIM1_ClearFlag(TIM1_FLAG_UPDATE);
}

@far @interrupt void TIM3_UPD_OVF_BRK_IRQHandler(void)
{
        TIM1_SetCompare2(TIM1CompareValue);
        TIM1_Cmd(ENABLE);
        TIM3_Cmd(DISABLE);
        TIM3_ClearFlag(TIM3_FLAG_UPDATE);
}


可是用示波器看最终出来的波形,两个输出的波形一模一样,请大侠指点一下问题出在哪里?或者指点下怎样能得到这种波形,不胜感激,谢谢!!!

QQ图片20160128090956.jpg (967.75 KB, 下载次数: 0)

QQ图片20160128090956.jpg
此帖出自stm32/stm8论坛

最新回复

uint32 cnt=0; tim3溢出中断 { cnt++; if (cnt&1) { ch1=占空比;ch2=无效值;} else { ch1=无效值;ch2=占空比;} } tim1的话得对下手册,记不清是哪个了,大概思路也是一个周期ch1输出,一个周期ch1n输出.       详情 回复 发表于 2016-1-28 18:03
点赞 关注
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在线等,补充一下,现在出来的波形貌似已经实现了一开一关(因为占空比和频率都变为原来的一半),但是两个输出没有错时,两个波形是同是为高或低的
此帖出自stm32/stm8论坛
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这是示波器显示的波形

QQ图片20160128092158.jpg (270.38 KB, 下载次数: 0)

QQ图片20160128092158.jpg
此帖出自stm32/stm8论坛
 
 

回复

4008

帖子

0

TA的资源

版主

4
 
两个定时器的话要同步才有可能,另外定时器不要总是起停,起停多了就不准确了.
你这个很简单,没必要用两个定时器,如果用tim1的话你看看互补功能,一个通道加互补通道就能实现.如果tim3用两个通道轮换输出就行了.
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

5
 
huo_hu 发表于 2016-1-28 09:28
两个定时器的话要同步才有可能,另外定时器不要总是起停,起停多了就不准确了.
你这个很简单,没必要用两个定 ...

怎么样用tim1的互补实现,或tim3的两个通道实现,麻烦您能说得更清楚一点么?小妹实在有点菜。谢谢啦
此帖出自stm32/stm8论坛
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

6
 
用一个定时器设定两个标志位,一个标志位到了另一个就取反,这样送pwm你看看行不行。
此帖出自stm32/stm8论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

7
 
uint32 cnt=0;
tim3溢出中断 {
cnt++;
if (cnt&1) {
ch1=占空比;ch2=无效值;}
else {
ch1=无效值;ch2=占空比;}
}

tim1的话得对下手册,记不清是哪个了,大概思路也是一个周期ch1输出,一个周期ch1n输出.
   
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表