OpenEdv-开源电子网

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

MINI版的PWM波

[复制链接]

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
发表于 2018-2-8 16:41:56 | 显示全部楼层 |阅读模式
1金钱
芯片:stm32F103RCT6,定时器频率72M,自动重装初值为2,不分频,是不是PWM出来的频率理论上为36M,占空比为50%且不可调。我试了下,出来的结果与理论相差有点大
程序:参照库函数改的
int main(void)
{

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-8 16:41:57 | 显示全部楼层
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
 楼主| 发表于 2018-2-8 16:43:04 | 显示全部楼层
主函数:
int main(void)
{       
        delay_init();                     

        TIM2_PWM_Init(1,0);
  

           while(1)
        {
               
          TIM_SetCompare4(TIM2,1);
                          
        }
}
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-8 16:48:33 | 显示全部楼层
关键代码没贴出来啊    PWM配置函数在哪   不然没法分析啊
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
 楼主| 发表于 2018-2-8 16:53:55 | 显示全部楼层
魔双月壁 发表于 2018-2-8 16:48
关键代码没贴出来啊    PWM配置函数在哪   不然没法分析啊

这些都是原子的库函数
void TIM2_PWM_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
       
       
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        TIM_DeInit(TIM2);
        TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ         80K
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ  2»·ÖÆμ
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //Ñ¡Ôñ¶¨ê±Æ÷Ä£ê½:TIMÂö3å¿í¶èμ÷ÖÆÄ£ê½2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è½Ïêä3öê1Äü
        TIM_OCInitStructure.TIM_Pulse = 100; //éèÖÃ′y×°èë2¶»ñ±è½Ï¼Ä′æÆ÷μÄÂö3åÖμ
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ:TIMêä3ö±è½Ï¼«DÔ¸ß
       
        TIM_OC1Init(TIM2, &TIM_OCInitStructure);  //¸ù¾YTIM_OCInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIMx
        TIM_OC2Init(TIM2, &TIM_OCInitStructure);  //¸ù¾YTIM_OCInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIMx
        TIM_OC3Init(TIM2, &TIM_OCInitStructure);
        TIM_OC4Init(TIM2, &TIM_OCInitStructure);
       
        TIM_CtrlPWMOutputs(TIM2,ENABLE);        //MOE Ö÷êä3öê1Äü       
        TIM_Cmd(TIM2, ENABLE);  //ê1ÄüTIM1
}
回复

使用道具 举报

0

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
319
金钱
319
注册时间
2017-6-19
在线时间
64 小时
发表于 2018-2-8 17:07:04 | 显示全部楼层
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
你的GPIO速度只有50M,你却想定时器72M来输出pwm,
36M的pwm周期频率,50%占空比,IO电平的翻转频率是72M
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-8 17:21:11 | 显示全部楼层
TIM_DeInit(TIM2);下的语句改成下面的试试,还有你的while里的TIM2是什么,会不会产生冲突

TIM_TimeBaseStructure.TIM_Period =arr;//记数
TIM_TimeBaseStructure.TIM_Prescaler =psc; //分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;        //向上计数时 CNT<CCR时 为有效电平   否则为无效电平           模式2相反
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较模式使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //有效电平  占空比为高电平占空比          空闲时高电平     记数到通道值翻转
TIM_OCInitStructure.TIM_Pulse=1;        //控制占空比  =通道/记数         
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse=1;               
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse=1;       
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse=1;         
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
         
       TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);          
        TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
        TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);
        TIM_ARRPreloadConfig(TIM2,ENABLE);

TIM_Cmd(TIM2, ENABLE);       
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
 楼主| 发表于 2018-2-9 15:53:53 | 显示全部楼层
余泽煌 发表于 2018-2-8 17:07
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
你的GPIO速度只有50M,你却想定时器72M来输出pwm,
...

但是我设置的在KHZ的是对的,一旦频率上Mhz,出来的波形就开始有偏差了。那个程序出来的是33.3MKZ
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
 楼主| 发表于 2018-2-9 15:56:28 | 显示全部楼层
魔双月壁 发表于 2018-2-8 17:21
TIM_DeInit(TIM2);下的语句改成下面的试试,还有你的while里的TIM2是什么,会不会产生冲突

TIM_TimeBaseS ...

我是想改变他的占空比。之前应该有条件的,还没往上加。在循环里面,和循环外面出来的结果一样的
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2017-7-23
在线时间
39 小时
 楼主| 发表于 2018-2-9 15:59:33 | 显示全部楼层
魔双月壁 发表于 2018-2-8 17:21
TIM_DeInit(TIM2);下的语句改成下面的试试,还有你的while里的TIM2是什么,会不会产生冲突

TIM_TimeBaseS ...

TIM_OCInitStructure.TIM_Pulse=0;你就改了这里吧,还有模式吧,TIM_OCInitStructure.TIM_Pulse这个在   TIM_SetCompare4(TIM2,1);会重新赋值的吧
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-9 16:36:29 | 显示全部楼层
TIM_SetCompare4(TIM2,1);我不知道你这个函数是什么  我没有开发板资料

我是把模式2 PWM2改成了模式1 PWM1

这样容易算   

还有你的示波器是3.3MHZ   这个结果也未必就错   要看你的示波器性能

频率越高 在示波器上的波形 越接近正弦波  我的示波器看PWM  4MHZ波形  出来的就已经是正弦波了  当然我的示波器带宽比较小


回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-9 16:53:19 | 显示全部楼层
我分别测了下4M  8M  18M下的波形
4M.png
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-9 16:53:49 | 显示全部楼层
波形                                       
4.jpg
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-9 16:54:26 | 显示全部楼层
8M下的波形  
8.jpg
8M.png
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-9 16:57:30 | 显示全部楼层
我的示波器比较差36MHZ下   是一条直线

所以我不能确定是stm32已经做不到输出36MHZ了  

还是说stm32可以输出36MHZ波形但是我的示波器性能差看不到了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 20:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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