OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6772|回复: 4

新手求助,想用pwm主从模式生成相位,频率,占空比可调的2个波

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2022-11-21
在线时间
7 小时
发表于 2022-11-24 12:53:00 | 显示全部楼层 |阅读模式
1金钱
网上找了个资料,相位没变化,求助求助!
网上代码如下:
void TIM3_PWMShiftInit(void)  
{  
     TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;  
    GPIO_InitTypeDef  GPIO_InitStruct;  
    TIM_OCInitTypeDef TIM_OCInitStruct;  

    /**********************TIM3 GPIO配置*****************************/  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);  

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_13;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  

    GPIO_Init(GPIOB,&GPIO_InitStruct);  
       
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
    GPIO_Init(GPIOA,&GPIO_InitStruct);  

    /**********************初始化TimBase结构体*************************/  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //开启TIM时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);       

    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;   //定时器不分频
    TIM_TimeBaseInitStruct.TIM_CounterMode   = TIM_CounterMode_Up;  
    TIM_TimeBaseInitStruct.TIM_Period    = 1799;       //频率 = 72000000/PSC/(ARR+1) = 40KHz
    TIM_TimeBaseInitStruct.TIM_Prescaler = 0;      

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);  
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);  
    /**********************初始化TIM3 OC结构体*************************/  
    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;  
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;  
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;  
    TIM_OCInitStruct.TIM_Pulse = 600;                 //TIM3 CH3占空比:600/(ARR+1)=33.3%
    TIM_OC3Init(TIM3,&TIM_OCInitStruct);  
               
    //TIM1 CH1pwm输出配置         
    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;                 
    TIM_OCInitStruct.TIM_Pulse=600;                   //TIM1 CH1占空比:600/(ARR+1)=33.3%
    TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;        //设置输出极性              
    TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Disable;//禁止互补端输出,缺失此语句无法调节输出极性                        
    TIM_OC1Init(TIM1,&TIM_OCInitStruct);            

    /**************************配置移相触发**************************/
    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;  //PWM2与Toggle模式可触发移相,其他模式不可
    TIM_OCInitStruct.TIM_Pulse = 600-2;             //约需2个定时器周期触发,移相:360*600/(ARR+2)= 120度
    TIM_OC2Init(TIM1,&TIM_OCInitStruct);            //需要CH2上升沿触发如果无法触发移相请更改CH2输出极性

    /**************************配置主从模式*************************/
    TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_OC2Ref);  //TIM1 OC2触发从定时器
    TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);

    TIM_SelectInputTrigger(TIM3, TIM_TS_ITR0);      //ITRO触发
    TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Trigger);   
       
    TIM_Cmd(TIM1, ENABLE);
    TIM_CtrlPWMOutputs(TIM1, ENABLE);               //高级定时器pwm输出使能,一定要记得打开


}


最佳答案

查看完整内容[请看2#楼]

问题解决了,改成TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset );复位模式就好了,高频率也有效,相位可调
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2022-11-21
在线时间
7 小时
 楼主| 发表于 2022-11-24 12:53:01 | 显示全部楼层
正点原子 发表于 2022-11-24 23:39
输出比较模式即可解决,不过频率不能太高,输出比较模式非常依赖中断!

问题解决了,改成TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset );复位模式就好了,高频率也有效,相位可调
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-11-24 23:39:58 | 显示全部楼层
输出比较模式即可解决,不过频率不能太高,输出比较模式非常依赖中断!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2022-11-21
在线时间
7 小时
 楼主| 发表于 2022-11-25 09:27:49 | 显示全部楼层
正点原子 发表于 2022-11-24 23:39
输出比较模式即可解决,不过频率不能太高,输出比较模式非常依赖中断!

对我用输出比较模式,低频正常,高频后占空比啥的都乱了
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2022-3-14
在线时间
12 小时
发表于 2023-8-30 11:42:50 | 显示全部楼层
这个频率能达到1M及以上吗?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 18:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表