chaohang021 发表于 2023-11-16 09:56

【AT-START-F423测评】PWM驱动无源蜂鸣器

本帖最后由 muyichuan2012 于 2023-11-16 10:25 编辑

本次主要使用通用定时器TMR2产生PWM输出,驱动无源蜂鸣器。无源蜂鸣器模块正常供电后在IO引脚输入2~5K频率的方波蜂鸣器响,否则不响。

首先是初始化系统时钟和GPIO,对照开发板上的丝印,实际上GPIO_PINS_6和GPIO_PINS_9才对应PWM功能。

void gpio_configuration(void)
{
gpio_init_type gpio_init_struct;

gpio_default_para_init(&gpio_init_struct);

gpio_init_struct.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7 | GPIO_PINS_8 | GPIO_PINS_9;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOC, &gpio_init_struct);
}


分频系数
/* compute the prescaler value */
prescalervalue = (uint16_t) ((crm_clocks_freq_struct.apb1_freq * 2) / 12000000) - 1;


默认分频系数计算出的PWM方波频率为220HZ

连接无源器件如图所示

此时PWM方波频率较低,蜂鸣器响度一般,可以修改分频系数,增大方波频率。
/* compute the prescaler value */
// prescalervalue = (uint16_t) ((crm_clocks_freq_struct.apb1_freq * 2) / 12000000) - 1;
prescalervalue = (uint16_t) ((crm_clocks_freq_struct.apb1_freq * 2) / 120000000) - 1;


此时方波频率差不多为2.6KHZ,蜂鸣器响度明显增大。

forgot 发表于 2023-11-17 09:07

记得很多驱动无源蜂鸣器播放音乐就是这种方式搞的,可以放乐谱的
页: [1]
查看完整版本: 【AT-START-F423测评】PWM驱动无源蜂鸣器