M-Arch(11)第十个示例:PWM驱动有源蜂鸣器SFM-27-I

2021-11-12 14:20:27 浏览数 (1)

前言

回顾下之前的章节:

  • 第一章节中我们描述了整个框架的核心设计思路以及主要的文件架构
  • 第二章节中我们基于一个简单的定时器OS实现了串口的数据打印,并完成了通用crc模块的设计和测试
  • 第三章节中我们给出了真随机数和伪随机数的概念和代码示例,并在架构上对接口进行了重构
  • 第四章节中我们回顾了FMC的基本知识,并给出了示例,后面我们将在设计IAP的时候再次使用到FMC
  • 第五章节中我们使用ADC和DMA搭建了一个通用的采样框架,并通过串口给出了采样的数据示例
  • 第六章节中我们总结了DAC的基本使用方法,并通过DAC生成了任意频率的正弦波,三角波和方波
  • 第七章节中我们总结下时钟的概念,并给出了获取系统中各模块的时钟频率的代码
  • 第八章节中我们介绍了如何通过串口的DMA来实现串口数据的收发
  • 第九章节中我们介绍了定时器的使用,以及如何产生普通占空比PWM以及互补带死区的PWM,这在控制中十分重要
  • 第十章节中我们介绍了SPI的概念,以及用三线SPI的时序驱动DS1302时钟芯片的方法,进一步掌握了SPI的使用

本文我们将介绍使用PWM控制无源蜂鸣器的方法。

关键字:STM32,GD32,PWM,无源蜂鸣器

蜂鸣器

蜂鸣器有2种:无源蜂鸣器和有源蜂鸣器,所谓有源,是指蜂鸣器内部带有震荡源,通电就可以响;所谓无源,是指蜂鸣器内部不带震荡源,需要频率信号驱动。

有源蜂鸣器

无源蜂鸣器

有震荡源-频率固定

无震荡源-频率可控

管脚有方向

管脚无方向

单向有内阻,一般超过1KΩ

双向有内阻,一般几百Ω

有电路板

无电路板

通电即发声

频率信号驱动

便宜

SFM-27-I

对于有源蜂鸣器而言,可通过PWM的高低电平控制蜂鸣器的蜂鸣频率,高电平响,低电平不响。

基本接口代码如下(GD32):

代码语言:javascript复制
void timer3_pwm_change(uint16_t period, uint16_t pulse)
{
    timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_1, pulse);
    timer_autoreload_value_config(TIMER2, period);
    TIMER_SWEVG(TIMER2) |= (uint32_t)TIMER_SWEVG_UPG;
}

结果展示

PWM有源蜂鸣器

0 人点赞