"

欢迎光临⚽im体育官方网站✅亚洲权威-信誉品牌-游戏公司✅im体育官方网站_多款游戏集于一体_顶尖原生app_im体育官方网站|非常注重玩家体验⚽邀请您入住��️‍��

<address id="jxlrj"><nobr id="jxlrj"><meter id="jxlrj"></meter></nobr></address>

<form id="jxlrj"></form><noframes id="jxlrj"><address id="jxlrj"></address>

<em id="jxlrj"></em>

    <address id="jxlrj"><address id="jxlrj"><listing id="jxlrj"></listing></address></address>
    <em id="jxlrj"></em>

    <sub id="jxlrj"></sub>

    <address id="jxlrj"><listing id="jxlrj"><menuitem id="jxlrj"></menuitem></listing></address><form id="jxlrj"></form>

      <form id="jxlrj"></form>
      <sub id="jxlrj"><listing id="jxlrj"><listing id="jxlrj"></listing></listing></sub>

        <noframes id="jxlrj">
        <address id="jxlrj"></address>

        <address id="jxlrj"></address>
          "
          欢迎来到汉得利(常州)电子股份有限公司!阿里商铺 | 收藏本站 | 汉得利动态
          汉得利蜂鸣器—专业提供报警器蜂鸣器工作灯麦克风扬声器导电银浆生产厂家

          全国服务热线:400-110-0878

          热门关键词: AVAS汽车蜂鸣器汽车报警器贴片蜂鸣器有源蜂鸣器无源蜂鸣器

          当前位置:汉得利电声 > 新闻中心 > 常见问题 >

          STM32与无源蜂鸣器

          文章出处:汉得利责任编辑:蜂鸣器人气:发表时间:2018-07-17 09:31字体: [ ]

          使用有源蜂鸣器im体育官方网站,只能发出固定的”滴滴“声,当然不能满足于此呀im体育官方网站。使用无源蜂鸣器,只要输出不同频率的PWM波im体育官方网站,即可发出不同的音符im体育官方网站。不同的音符组合起来就是一个曲子了im体育官方网站。

          1 乐谱简析

          1.1 音阶

          音阶是音乐必不可少的要素,主要由声音的频率决定。通过给蜂鸣器不同频率的音频脉冲,可以产生不同的音阶im体育官方网站,而要产生某频率的音频脉冲,最简单的办法是算出该音频的周期,然后将此周期除以2即为半周期的时间im体育官方网站。通过程序控制单片机某引脚半周期为“高”、半周期为“低”,不断交替变换,即可产生该频率的矩形波im体育官方网站,接到蜂鸣器上就可发出该频率的声音。若想改变音阶,只需要改变半周期时间即可im体育官方网站。下表为各音调音符频率对照表im体育官方网站,据此可产生不同音阶的音符。“#”表示半音im体育官方网站,用于上升或下降半个音,乘以2就提升该声音一个8度音阶,减半则降一个8度。

          STM32与无源蜂鸣器

          1.2 节拍

          若要构成音乐im体育官方网站,光有音阶是不够的,还需要节拍im体育官方网站,也就是音符持续时间的长短,一般用拍数表示im体育官方网站。至于1拍是多少秒,没有严格的规定,只要节拍适宜im体育官方网站,声音悦耳即可。假如某首歌曲的节奏是每分钟120拍im体育官方网站,那么1拍为0.5 s,1/4拍为0.125 sim体育官方网站,以此类推可得到其他节拍对应的时长。这样,利用不同的频率,加上与拍数对应的延时,就构成了乐曲。

          2 STM32中的定时器

          音阶的产生与声音频率有关,为了实现不同音阶,必须能为蜂鸣器提供不同频率的脉冲。为此im体育官方网站,选择STM32芯片,利用其自带的定时器im体育官方网站,通过PWM产生脉冲信号。STM32中一共有11个定时器,包含2个高级控制定时器im体育官方网站、4个普通定时器、2个基本定时器,以及2个看门狗定时器和1个系统滴答定时器SysTiek。其中im体育官方网站,TIM1和TIM8是高级定时器,时钟由APB2的输出产生。TIM2~TIM5是普通定时器,TIM6和TIM7是基本定时器,这6个定时器的时钟由APB1的输出产生im体育官方网站。

          2.1 定时时长的计算

          定时器的一个主要功能就是到指定时间就会产生一个溢出事件im体育官方网站,这个时间的设置与定时器时钟有关im体育官方网站,在定时器时钟基础上进行预分频,设置计数溢出大小即可。

          2.1.1 系统时钟设置

          要保证定时的准确性,必须先确保系统时钟的设置是我们所预期的im体育官方网站。定时器时钟分配可查看数据手册。通过编程使SYSCLK为72 MHzim体育官方网站,APB1预分频后得到PCLK1为36 MHz,再经TIM2~TIM7倍频器得到TIM2~TIM7时钟72 MHz。时钟源多采用HSE(外部时钟源),对于STM32F103im体育官方网站,其外部时钟为8 MHz,而STM32F107外部时钟为25 MHz,因此,在使用HSE做时钟源时,这两种器件产生SYSCLK的分频和倍频方式不同,需要使用者引起注意。

          2.1.2 定时器相关参数设置

          定时器的参数由结构体TimeBaselnitTypeDef定义,主要包括预分频系数、时钟分割im体育官方网站、计数器模式、计数溢出大小等im体育官方网站。例如,要由TIM3(定时器3)产生一个时长为1 s的定时,首先,应进行系统时钟的设置,得到TIM3CLK=72MHzim体育官方网站,然后进行定时器设置。其中,预分频系数为35 999,此时,TIM3时钟为72 MHz/36 000=2 kHz,无时钟分割。设置计数溢出大小为1 999im体育官方网站,即每计2 000个数就产生一个更新事件,输出频率为2 kHz/2 000=1 Hz。

          2.2 STM32的PWM输出

          脉冲宽度调制(Pulse Width Modulation,PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,简而言之,就是实现对输出信号脉冲宽度的控制,一般用来控制步进电机等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出im体育官方网站,其中,高级定时器TIM1和TIM8能够产生3对PWM互补输出,而TIM2~TIM5也能同时产生4路的PWM输出。

          2.2.1 PWM输出引脚

          STM32给不同的定时器分配了不同的输出引脚im体育官方网站,考虑到引脚复用功能im体育官方网站,STM32还提出了一个“重映像”的概念,就是通过设置某一些相关的寄存器,使得在其他非原始指定的引脚上也能输出PWM波形,但是这种重映像不是随意的,使用方法可参照参考文献。例如,TIM3的通道2,在没有重映像的时候,指定的引脚是PA7。如果设置部分重映像之后im体育官方网站,输出就被映像到PB5上了im体育官方网站;如果设置完全重映像的话,输出就被映像到PC7上im体育官方网站。

          2.2.2 占空比的计算

          占空比(Duty Ratio)有如下含义:在一串理想的脉冲周期序列(如方波)中,正脉冲的持续时间与脉冲总周期的比值im体育官方网站。

          当TIM_Period为1 999时,若想得到占空比50%im体育官方网站,则TIM_Pulse应设置为(1999+1)/2=1000。

          3.2 程序设计

          STM32与无源蜂鸣器

          改变PWM的音调im体育官方网站,可以输出Do re mi fa so la si do这样的7个音符im体育官方网站,还可以输出不同音调的Do re mi fa so la si doim体育官方网站。

          在实例程序里面,我定义了低中高三个音阶。音符的频率则是mbed提供的。已经宏定义好了。

          只要改变PWM的输出周期,即可发出不同的音调(频率是周期的倒数)im体育官方网站。

          为了方便起见,写了一个音阶类(Pitch)im体育官方网站,虚基类im体育官方网站。里面有一个perform函数im体育官方网站,参数是音符和持续时间。例如要发出Do这个声音im体育官方网站,持续0.5s,只要perform(1,0.5)就好。

          还有一个Stop函数,停止响声0.5s则stop(0.5),无参数则直接停止。后面的Lowim体育官方网站、Midim体育官方网站、High类则是派生类,实现了Pitch的虚函数im体育官方网站。

          程序里面包括:

          1、发出低中高三个声调的Do re mi fa so la si do音。

          2、中音版的小星星im体育官方网站。

          3、低音版的小星星。

          #include "mbed.h"

          #define NOTE_B0 31

          #define NOTE_C1 33

          #define NOTE_CS1 35

          #define NOTE_D1 37

          #define NOTE_DS1 39

          #define NOTE_E1 41

          #define NOTE_F1 44

          #define NOTE_FS1 46

          #define NOTE_G1 49

          #define NOTE_GS1 52

          #define NOTE_A1 55

          #define NOTE_AS1 58

          #define NOTE_B1 62

          #define NOTE_C2 65

          #define NOTE_CS2 69

          #define NOTE_D2 73

          #define NOTE_DS2 78

          #define NOTE_E2 82

          #define NOTE_F2 87

          #define NOTE_FS2 93

          #define NOTE_G2 98

          #define NOTE_GS2 104

          #define NOTE_A2 110

          #define NOTE_AS2 117

          #define NOTE_B2 123

          #define NOTE_C3 131

          #define NOTE_CS3 139

          #define NOTE_D3 147

          #define NOTE_DS3 156

          #define NOTE_E3 165

          #define NOTE_F3 175

          #define NOTE_FS3 185

          #define NOTE_G3 196

          #define NOTE_GS3 208

          #define NOTE_A3 220

          #define NOTE_AS3 233

          #define NOTE_B3 247

          #define NOTE_C4 262

          #define NOTE_CS4 277

          #define NOTE_D4 294

          #define NOTE_DS4 311

          #define NOTE_E4 330

          #define NOTE_F4 349

          #define NOTE_FS4 370

          #define NOTE_G4 392

          #define NOTE_GS4 415

          #define NOTE_A4 440

          #define NOTE_AS4 466

          #define NOTE_B4 494

          #define NOTE_C5 523

          #define NOTE_CS5 554

          #define NOTE_D5 587

          #define NOTE_DS5 622

          #define NOTE_E5 659

          #define NOTE_F5 698

          #define NOTE_FS5 740

          #define NOTE_G5 784

          #define NOTE_GS5 831

          #define NOTE_A5 880

          #define NOTE_AS5 932

          #define NOTE_B5 988

          #define NOTE_C6 1047

          #define NOTE_CS6 1109

          #define NOTE_D6 1175

          #define NOTE_DS6 1245

          #define NOTE_E6 1319

          #define NOTE_F6 1397

          #define NOTE_FS6 1480

          #define NOTE_G6 1568

          #define NOTE_GS6 1661

          #define NOTE_A6 1760

          #define NOTE_AS6 1865

          #define NOTE_B6 1976

          #define NOTE_C7 2093

          #define NOTE_CS7 2217

          #define NOTE_D7 2349

          #define NOTE_DS7 2489

          #define NOTE_E7 2637

          #define NOTE_F7 2794

          #define NOTE_FS7 2960

          #define NOTE_G7 3136

          #define NOTE_GS7 3322

          #define NOTE_A7 3520

          #define NOTE_AS7 3729

          #define NOTE_B7 3951

          #define NOTE_C8 4186

          #define NOTE_CS8 4435

          #define NOTE_D8 4699

          #define NOTE_DS8 4978

          //7个音符组成了美妙的音乐

          //低 Do re mi fa so la si do

          int melody[] = { NOTE_C4, NOTE_D4,NOTE_E4, NOTE_F4, NOTE_G4,NOTE_A4,NOTE_B4,NOTE_C5};

          //中 Do re mi fa so la si do

          int melody2[] = { NOTE_C5, NOTE_D5,NOTE_E5, NOTE_F5, NOTE_G5,NOTE_A5,NOTE_B5,NOTE_C6};

          //高

          int melody3[] = { NOTE_C6, NOTE_D6,NOTE_E6, NOTE_F6, NOTE_G6,NOTE_A6,NOTE_B6,NOTE_C7};

          //PWM输出口

          PwmOut m(PB_13);

          //音调类

          class Pitch{

           public:

           virtual void perfrom(int,double)=0;

           void stop(double time = 0){

          if(time==0)

          m = 1;

          else{

          m = 1;

          wait(time);

          }//end else

          }//end stop

          };

          class Low:public Pitch{

           public:

           void perfrom(int index,double time){

          m.period_us(1000000/melody[index-1]);

          m.write(0.5);

          wait(time);

          }

          };

          class Mid:public Pitch{

           public:

           void perfrom(int index,double time){

          m.period_us(1000000/melody2[index-1]);

          m.write(0.5);

          wait(time);

          }

          };

          class Hig:public Pitch{

           public:

           void perfrom(int index ,double time){

          m.period_us(1000000/melody3[index-1]);

          m.write(0.5);

          wait(time);

          }

          };

          int main()

          {

           //低音版

           Low low;

           //11 55 66 5

           low.perfrom(1,0.5);

           low.perfrom(1,0.5);

           low.perfrom(5,0.5);

           low.perfrom(5,0.5);

           low.perfrom(6,0.5);

           low.perfrom(6,0.5);

           low.perfrom(5,0.8);

           low.stop(0.2);

           //44 33 22 1

           low.perfrom(4,0.5);

           low.perfrom(4,0.5);

           low.perfrom(3,0.5);

           low.perfrom(3,0.5);

           low.perfrom(2,0.5);

          low.perfrom(2,0.5);

          low.perfrom(1,0.5);

          low.stop(0.2);

          //55 44 33 2

          low.perfrom(5,0.5);

          low.perfrom(5,0.5);

          low.perfrom(4,0.5);

          low.perfrom(4,0.5);

          low.perfrom(3,0.5);

          low.perfrom(3,0.5);

          low.perfrom(2,0.5);

          low.stop(0.2);

          //55 44 33 2

          low.perfrom(5,0.5);

          low.perfrom(5,0.5);

          low.perfrom(4,0.5);

          low.perfrom(4,0.5);

          low.perfrom(3,0.5);

          low.perfrom(3,0.5);

          low.perfrom(2,0.5);

          low.stop(0.2);

          //11 55 66 5

          low.perfrom(1,0.5);

          low.perfrom(1,0.5);

          low.perfrom(5,0.5);

          low.perfrom(5,0.5);

          low.perfrom(6,0.5);

          low.perfrom(6,0.5);

          low.perfrom(5,0.5);

          low.stop(0.2);

          //44 33 22 1

          low.perfrom(4,0.5);

          low.perfrom(4,0.5);

          low.perfrom(3,0.5);

          low.perfrom(3,0.5);

          low.perfrom(2,0.5);

          low.perfrom(2,0.5);

          low.perfrom(1,0.5);

          low.stop();

          }

          最新产品

          同类文章排行

          最新资讯文章

          返回顶部
          在线客服
          热线电话

          汉得利微信公众号
          im体育官方网站