OpenEdv-开源电子网

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

2KHZ频率的PWM输出,用示波器检测,没连蜂鸣器正常,连上蜂鸣器后电压变低,声音很怪,频率仍然是2KHZ

[复制链接]

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
发表于 2014-5-10 23:10:25 | 显示全部楼层 |阅读模式
5金钱

芯片:STM32F205RG

端口信息:PB6 - TIM4CH1

之前是用2KHZ的定时器直接翻转电平驱动蜂鸣器的,蜂鸣器可以正常工作

但是现在用PWM直接驱动后,示波器上发现频率还是2KHz,但是电压变化得特别没规律;

如果没有连接蜂鸣器,PWM输出又正常了

另外我用PB5 - TIM4CH3 同样输出PWM驱动LED灯没有任何问题。

给出点思路也是好的,多谢!

最佳答案

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

原因已经找到,GPIO采用默认配置是不行的,采用如下配置即可: [mw_shl_code=c,true]static void _beep_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.G ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-10 23:10:26 | 显示全部楼层

原因已经找到,GPIO采用默认配置是不行的,采用如下配置即可:

[mw_shl_code=c,true]static void _beep_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); }[/mw_shl_code]

回复

使用道具 举报

70

主题

6766

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13145
金钱
13145
注册时间
2012-11-26
在线时间
3816 小时
发表于 2014-5-10 23:16:57 | 显示全部楼层
你是不是把Buzzer直接接引脚的?

带不起来啊

加个三极管 或者 别的驱动吧
学无止境
回复

使用道具 举报

70

主题

6766

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13145
金钱
13145
注册时间
2012-11-26
在线时间
3816 小时
发表于 2014-5-10 23:18:11 | 显示全部楼层
不过你用PWM驱动buzzer是作甚啊
学无止境
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-10 23:44:48 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
感谢您的回复,有加了三极管的。在描述中有提到,直接翻转电平也可以驱动。
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-10 23:46:28 | 显示全部楼层
回复【3楼】jermy_z:
---------------------------------
驱动蜂鸣器之前是在定时器中断中翻转的,后来考虑直接硬件驱动,用户只在需要的时候打开和关闭即可。
回复

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2014-5-11 00:01:12 | 显示全部楼层
蜂鸣器有两种,一种是有源,一种是无源。

你那个是无源的吧,只有几个欧,如果高电平的占比太大了,就算加了三极管也不一定推得动,电压就会拉下来。你试试高电平占比在1/2或以下试试。一点点地去调,电位不变为准。你原来的驱动器件可能驱动能力在300毫安左右吧。如果不改占空比要正常,你必须换一个能推600MA以上的器件。
我的工作就是天天在玩
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-11 10:16:14 | 显示全部楼层
回复【6楼】chinafox:
---------------------------------
非常感谢,之前没交代,确实是无源的,占空比是50%。我再按您的方法一点点去尝试。
回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-11 10:17:22 | 显示全部楼层

另外,在本站找到相关的主题如下:


这个和我的问题很接近,但是还有点不一样http://www.openedv.com/posts/list/14468.htm

    我的占空比也是50%,频率是2KHZ,用示波器抓波形上传上来给大家看看,另附声音、代码和原理图

回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-11 10:27:45 | 显示全部楼层

[mw_shl_code=c,true]static void _beep_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); }[/mw_shl_code]


[mw_shl_code=c,true]static void _beep_timer_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_DeInit(TIM4); TIM_TimeBaseStructure.TIM_Period = 1000; // brightness = 1000 TIM_TimeBaseStructure.TIM_Prescaler = 30; // 1MHz TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM4, ENABLE); TIM_UpdateRequestConfig(TIM4, TIM_UpdateSource_Regular); TIM_Cmd(TIM4, ENABLE); } [/mw_shl_code]

原理图上蜂鸣器:

回复

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
 楼主| 发表于 2014-5-11 10:42:11 | 显示全部楼层

接了蜂鸣器的效果,两张图占空比不一样:


没有接蜂鸣器的波形:

回复

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2014-5-12 01:53:55 | 显示全部楼层
我咋觉得用库来写有点象JAVA的感觉.....................底层完全没有=。=!!
我的工作就是天天在玩
回复

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2014-5-12 22:47:48 | 显示全部楼层
乌龙。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 03:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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