打印
[STM32F0]

PWM输出的脉冲频率不一致

[复制链接]
2824|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
btflzd|  楼主 | 2016-4-6 17:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我使用STM32F030想输出50MHZ占空比百分之50的PWM 但无论怎么修改自动重装值和时钟分频数 似乎只能达到25MHZ
而且这个输出4个25MHZ的脉冲后 会输出2个20MHZ的脉冲


如果我使用倍频到96MHZ 则会出现8个50m的PWM 然后再出现一个9mhz的PWM

我想所有的PWM输出一致 请问这是怎么回事?

25PWM.jpg (191.91 KB )

输出4个25M的PWM后 会输出2个20M的PWM

输出4个25M的PWM后 会输出2个20M的PWM

PWM.jpg (135.58 KB )

倍频到96MHZ 则会出现8个50m的PWM 然后再出现一个9mhz的PWM

倍频到96MHZ 则会出现8个50m的PWM 然后再出现一个9mhz的PWM
沙发
btflzd|  楼主 | 2016-4-6 17:37 | 只看该作者
        以下是TIM1的初始化  在主函数里面没有任何其他函数 只有这个初始化函数

                TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                TIM_OCInitTypeDef  TIM_OCInitStructure;
                GPIO_InitTypeDef GPIO_InitStructure;

                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);       
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH2          |GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource8,GPIO_AF_2);//初始化GPIO   //功能复用2

                TIM_DeInit(TIM1);
                TIM_TimeBaseStructure.TIM_Prescaler =1-1;//(psc - 1);//        //时钟预分频数   
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM_CounterMode_Down;//          //向上计数模式
                TIM_TimeBaseStructure.TIM_Period = 2-1;           // 自动重装载寄存器周期的值(计数值)
                TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                       
                TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                 //////指定重复计数值  时间计数到0时候 更新时间时的起始数值  //输出4个脉冲

                TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);               

               
                /* Channel 1, 2, 3 and 4 Configuration in PWM mode */
                TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
                TIM_OCInitStructure.TIM_Pulse = 0;         ///输出的占空比       
                TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low; //TIM_OCPolarity_High; /// 设置输出极性       
                TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;////使能该通道输出
               
               
                TIM_OC1Init(TIM1, &TIM_OCInitStructure);        ///pb4   TIM3   ///TIM1 pa8
                TIM_SetCompare1(TIM1, 1);
                //  TIM_ClearFlag(TIM1, TIM_FLAG_Update);                                // 清除溢出中断标志
                //  TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
                TIM_Cmd(TIM1, ENABLE);/////启动TIM1计数器       
                TIM_CtrlPWMOutputs(TIM1,ENABLE);  ////TIM1主输出使能        

使用特权

评论回复
板凳
戈卫东| | 2016-4-6 19:42 | 只看该作者
你应该用示波器

使用特权

评论回复
地板
戈卫东| | 2016-4-6 19:44 | 只看该作者
而且,主频50M不可能出50M的PWM的,最快到25M

使用特权

评论回复
5
airwill| | 2016-4-6 20:14 | 只看该作者
对啊, 主频才 48MHz, 一个时钟高,一个时钟低, 也就 24Mhz 是最高了.
另外, 倍频到96MHZ 则会出现8个50m的PWM 然后再出现一个9mhz的PWM, 这是逻辑分析仪的采样点和你的 PWM 不同步引起的

使用特权

评论回复
6
mmuuss586| | 2016-4-6 20:20 | 只看该作者
030主频才48MHZ,你整这么高;

使用特权

评论回复
7
btflzd|  楼主 | 2016-4-6 20:28 | 只看该作者
airwill 发表于 2016-4-6 20:14
对啊, 主频才 48MHz, 一个时钟高,一个时钟低, 也就 24Mhz 是最高了.
另外, 倍频到96MHZ 则会出现8个50m的PW ...

http://www.stmcu.org/module/forum/thread-583043-1-1.html看到这位兄弟倍频了 所以也试试

使用特权

评论回复
8
btflzd|  楼主 | 2016-4-6 20:30 | 只看该作者
airwill 发表于 2016-4-6 20:14
对啊, 主频才 48MHz, 一个时钟高,一个时钟低, 也就 24Mhz 是最高了.
另外, 倍频到96MHZ 则会出现8个50m的PW ...

按照你的说法 那么倍频后能输出的pwm真的是50mhz吗?我的逻辑分析仪设置只用三通道 采样率100MHZ

使用特权

评论回复
9
airwill| | 2016-4-6 20:32 | 只看该作者
倍频到96MHZ, 最高是 48MHz

使用特权

评论回复
10
btflzd|  楼主 | 2016-4-6 20:33 | 只看该作者
戈卫东 发表于 2016-4-6 19:44
而且,主频50M不可能出50M的PWM的,最快到25M

我倍频了  
试过用示波器 但是脉冲好像很乱
放大到500MV    放大时间后  显示的频率也是很难看 很难确定频率

使用特权

评论回复
11
ccw1986| | 2016-4-6 20:36 | 只看该作者
btflzd 发表于 2016-4-6 17:37
以下是TIM1的初始化  在主函数里面没有任何其他函数 只有这个初始化函数

                TIM_TimeBaseInitType ...

是不是你的分频值设置的不对啊

使用特权

评论回复
12
btflzd|  楼主 | 2016-4-6 20:47 | 只看该作者
airwill 发表于 2016-4-6 20:14
对啊, 主频才 48MHz, 一个时钟高,一个时钟低, 也就 24Mhz 是最高了.
另外, 倍频到96MHZ 则会出现8个50m的PW ...

采样点不同步 这种现象能消除吗?
还是超过多少频率就会出现这种现象?
我记得好像10MHZ的PWM也会这样

不过我记得前些天用逻辑分析仪采集遥控车的遥控晶振  49.860mhz和27.145MHZ的 似乎能得到一样的波形  但我刚才再试着采集 一个波形都采不到 很奇怪

使用特权

评论回复
13
btflzd|  楼主 | 2016-4-6 20:47 | 只看该作者
ccw1986 发表于 2016-4-6 20:36
是不是你的分频值设置的不对啊

应该不是吧  就算是不对 也不会波形不一致吧

使用特权

评论回复
14
奥卡姆剃刀| | 2016-4-7 14:42 | 只看该作者
顶一个!

使用特权

评论回复
15
范寿铭| | 2016-4-7 16:21 | 只看该作者
进中断也需要时间的

使用特权

评论回复
16
btflzd|  楼主 | 2016-4-7 16:24 | 只看该作者
范寿铭 发表于 2016-4-7 16:21
进中断也需要时间的

你指的是TIM1的定时中断吗?我没开启  这个PWM还会进中断吗?

使用特权

评论回复
17
范寿铭| | 2016-4-7 16:29 | 只看该作者
btflzd 发表于 2016-4-7 16:24
你指的是TIM1的定时中断吗?我没开启  这个PWM还会进中断吗?

哦  那可能是你逻分采样率不够

使用特权

评论回复
18
范寿铭| | 2016-4-7 16:30 | 只看该作者
btflzd 发表于 2016-4-7 16:24
你指的是TIM1的定时中断吗?我没开启  这个PWM还会进中断吗?

哦  那可能是你逻分采样率不够

使用特权

评论回复
19
静水竹林| | 2016-4-7 17:41 | 只看该作者
这波形挺漂亮的

使用特权

评论回复
20
gejigeji521| | 2016-4-7 23:29 | 只看该作者
波形不错,可能是采用频率不够导致的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

52

帖子

1

粉丝