找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1544|回复: 34
收起左侧

单片机怎么使得无源蜂鸣器在鸣响的同时,还能处理另外的程序?

  [复制链接]
ID:298743 发表于 2024-5-17 17:32 | 显示全部楼层 |阅读模式
用单片机定时器中断来模拟产生PWM信号,给到蜂鸣器工作,理论上来说要个尖一点的声音,我需要把一个周期定在两微秒,单片机根本就执行不了其他程序,如果开高一级优先级的中断来处理重要的程序,蜂鸣器的声音又会变
回复

使用道具 举报

ID:879809 发表于 2024-5-17 20:09 | 显示全部楼层
2微秒给无源蜂鸣器你是开玩笑嘛?
回复

使用道具 举报

ID:373388 发表于 2024-5-17 20:30 | 显示全部楼层
声波20-20KHz,超过这个范围就听不到了,蜂鸣器频率你定在1-2KHz就可以了
回复

使用道具 举报

ID:891089 发表于 2024-5-17 22:58 来自手机 | 显示全部楼层
看大家都顾左右而言他,我直接给结论吧。这样是不行的,蜂鸣器是需要连续pwm波的,无论是中断还是上操作系统,只要是单核的单片机都是会占用时间片的。建议看下esp32s2这款是双核的,大概可以满足你的要求。
回复

使用道具 举报

ID:123289 发表于 2024-5-17 23:35 | 显示全部楼层
傻乎乎的,用一个常鸣的蜂鸣器。
回复

使用道具 举报

ID:161164 发表于 2024-5-17 23:36 | 显示全部楼层
可以输出时钟信号
回复

使用道具 举报

ID:192020 发表于 2024-5-18 09:11 | 显示全部楼层
不用定时器,直接用PWM模块输出就好了
回复

使用道具 举报

ID:213173 发表于 2024-5-18 11:38 | 显示全部楼层
常见的无源蜂鸣器其谐振频率2000Hz左右,定时器中断周期在200-250us较为合适。中断程序占用的时间很少,实践证明用在1T单片机上根本感觉不到影响其它程序运行。
回复

使用道具 举报

ID:628113 发表于 2024-5-18 11:39 | 显示全部楼层
楼主本身想法并没有问题, 用 定时 中断控制无源蜂鸣器的PWM .
只要注意两点就OK:
1. CPU 必须足够快, 如果像 8Mhz 的低速CPU, 那基本上就干不了其他事情了。
2. 中断没必要如此频繁, 估计 100us 中断一次就足够了。
回复

使用道具 举报

ID:1109793 发表于 2024-5-18 17:38 | 显示全部楼层
2微秒,500K,你确定能听到?
回复

使用道具 举报

ID:298743 发表于 2024-5-19 21:46 | 显示全部楼层
xiaobendan001 发表于 2024-5-18 17:38
2微秒,500K,你确定能听到?

说错了,是10微妙蜂鸣器反转一次,确实能听到
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:11 | 显示全部楼层
rundstedt 发表于 2024-5-17 20:09
2微秒给无源蜂鸣器你是开玩笑嘛?

发错了,我定时的是10微妙,确实能听到声音
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:12 | 显示全部楼层
美琴的备胎 发表于 2024-5-17 22:58
看大家都顾左右而言他,我直接给结论吧。这样是不行的,蜂鸣器是需要连续pwm波的,无论是中断还是上操作系 ...

但是我看到别人的产品用的STC8八脚的芯片就做到了,六个定时器,其中一个定时器达到时间,蜂鸣器就会响,但是其他定时器还在定时
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:19 | 显示全部楼层
yzwzfyz 发表于 2024-5-17 23:35
傻乎乎的,用一个常鸣的蜂鸣器。

没看懂,我想控制能控制蜂鸣器的音量大小,用有源的不知道怎么控制,所以就用了无源的
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:20 | 显示全部楼层
lkc8210 发表于 2024-5-17 23:36
可以输出时钟信号

输出时钟信号会不会比中断IO口取反更消耗资源,因为一不执行时钟信号的程序,蜂鸣器就不会响了,定时器还有一点点执行其他程序的时间
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:21 | 显示全部楼层
qq475878026 发表于 2024-5-18 09:11
不用定时器,直接用PWM模块输出就好了

PWM模块不占用CPU资源吗?我还要同时做另外的一些事情
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:26 | 显示全部楼层
ppcbug 发表于 2024-5-18 11:39
楼主本身想法并没有问题, 用 定时 中断控制无源蜂鸣器的PWM .
只要注意两点就OK:
1. CPU 必须足够快,  ...

100us声音有点沉,没有滴滴的声音,我用的芯片是STC8H
回复

使用道具 举报

ID:298743 发表于 2024-5-19 22:27 | 显示全部楼层
之所以用无源蜂鸣器主要是我想控制蜂鸣器音量的大小,但是现在看来好像也没什么头绪
回复

使用道具 举报

ID:1121392 发表于 2024-5-20 01:17 | 显示全部楼层
多任务系统
回复

使用道具 举报

ID:1109793 发表于 2024-5-20 07:29 | 显示全部楼层
asdadqw2 发表于 2024-5-19 21:46
说错了,是10微妙蜂鸣器反转一次,确实能听到

那就是20us周期那样也是50K了,如果结果是正确的,你能听到也牛逼了,不用搞这个了,有这天赋。
回复

使用道具 举报

ID:458247 发表于 2024-5-20 08:52 | 显示全部楼层
asdadqw2 发表于 2024-5-19 22:27
之所以用无源蜂鸣器主要是我想控制蜂鸣器音量的大小,但是现在看来好像也没什么头绪

用快一点的stc单片机,或者stc单片机主频拉高点
回复

使用道具 举报

ID:23640 发表于 2024-5-20 09:07 | 显示全部楼层
1MS就可以达到1K的频率,一般蜂鸣器最大声音频率是2~4K之间,假设是4K,那么时间就是250US
回复

使用道具 举报

ID:192020 发表于 2024-5-20 09:07 | 显示全部楼层
asdadqw2 发表于 2024-5-19 22:21
PWM模块不占用CPU资源吗?我还要同时做另外的一些事情

PWM配好寄存器就运行了,运行期间CPU不参与的。
回复

使用道具 举报

ID:23640 发表于 2024-5-20 09:12 | 显示全部楼层
asdadqw2 发表于 2024-5-19 22:26
100us声音有点沉,没有滴滴的声音,我用的芯片是STC8H

你是用什么设备确定的100US?如果真是100US那就是10KHZ的频率,那是非常尖锐的声音了,最好用示波器/逻辑分析仪确认下你的时间实际是多少?
回复

使用道具 举报

ID:161164 发表于 2024-5-20 09:16 | 显示全部楼层
asdadqw2 发表于 2024-5-19 22:20
输出时钟信号会不会比中断IO口取反更消耗资源,因为一不执行时钟信号的程序,蜂鸣器就不会响了,定时器还 ...

输出时钟信号零消耗主CPU
但是调不了声音大小
回复

使用道具 举报

ID:384109 发表于 2024-5-20 09:31 | 显示全部楼层
楼主实际测试一下波形吧,你现在的要求已经打破了人耳能听到的声音频率范围,打破了基本理论了
回复

使用道具 举报

ID:844772 发表于 2024-5-20 09:55 | 显示全部楼层
asdadqw2 发表于 2024-5-19 22:21
PWM模块不占用CPU资源吗?我还要同时做另外的一些事情

硬件的pwm不太占用CPU,不过你10微秒产生的频率太高,应该是它的低次谐波发的声音,跟40微秒是一样的。
回复

使用道具 举报

ID:57657 发表于 2024-5-20 12:13 | 显示全部楼层
qq475878026 发表于 2024-5-18 09:11
不用定时器,直接用PWM模块输出就好了

PWM模块不是所有单片机都有此功能,具体见数据手册
回复

使用道具 举报

ID:298743 发表于 2024-5-21 11:22 | 显示全部楼层
yaosongjin 发表于 2024-5-20 09:12
你是用什么设备确定的100US?如果真是100US那就是10KHZ的频率,那是非常尖锐的声音了,最好用示波器/逻辑 ...

没有这些设备,我是用定时器取反io口来模拟pwm的,应该是比他高一级的定时器触发中断执行程序,把频率拉大了
回复

使用道具 举报

ID:298743 发表于 2024-5-21 11:24 | 显示全部楼层
lkc8210 发表于 2024-5-20 09:16
输出时钟信号零消耗主CPU
但是调不了声音大小

那好像有个想法,STC有多个PWM通道,是不是可以定义多个PWM输出,然后根据变量不同,选择不同的通道,那就可以输出不同的PWM信号,从而调节音量了吧
回复

使用道具 举报

ID:192020 发表于 2024-5-22 15:16 | 显示全部楼层
asdadqw2 发表于 2024-5-21 11:24
那好像有个想法,STC有多个PWM通道,是不是可以定义多个PWM输出,然后根据变量不同,选择不同的通道,那 ...

别人说的是时钟信号,你说的PWM,虽说一样是方波但不是同一个东西啊。然后PWM本来就是可调的,没必要说弄多个PWM来实现可调
回复

使用道具 举报

ID:298743 发表于 2024-5-22 17:24 | 显示全部楼层
qq475878026 发表于 2024-5-22 15:16
别人说的是时钟信号,你说的PWM,虽说一样是方波但不是同一个东西啊。然后PWM本来就是可调的,没必要说弄 ...

那搞错了,我还以为PWM和时钟信号是一样的东西
回复

使用道具 举报

ID:79094 发表于 2024-5-23 00:32 | 显示全部楼层
蜂鸣器 用 有源的 音量 可以加开关 并联电阻  或用三极管并联电阻  主要看你用在什么地方
回复

使用道具 举报

ID:57657 发表于 2024-5-23 05:43 | 显示全部楼层
lkc8210 发表于 2024-5-20 09:16
输出时钟信号零消耗主CPU
但是调不了声音大小

A通道PWM输出超声波载波(占空比越高音量越高) B通道输出频率信号,加个74HC08将超声波PWM调制后就能控制音量。
回复

使用道具 举报

ID:517951 发表于 2024-5-27 13:22 | 显示全部楼层
蜂鸣器有2种, 一种是给电就叫. 一种是需要驱动波形的, 音调可调.  
按楼主说的周期是2u秒, 那就是500khz, 人耳朵可听到的音频是20khz~20hz. 即便电路正常工作, 人也听不到.
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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