ARM编程--->控制PWM波产生音乐

定时器与PWM波

  1. 晶振的作用
  • 晶振(Crystal Oscillator)用于提供一个稳定的时钟信号,帮助处理器和其他硬件设备衡量时间流逝。晶振的频率决定了时钟信号的速率。例如,8 MHz 的晶振每秒产生 8,000,000 次振荡。这些振荡信号用于驱动处理器的内部时钟和定时器模块。
  1. 定时器的工作原理
  • 定时器计数:定时器会通过每次时钟信号来递增或递减计数器(TCNT)。当计数器达到设定的周期(TCNTB),就会发出一个中断信号。定时器的工作周期取决于分频器的值以及晶振的频率。
  • 分频器:分频器用于将时钟信号的频率进行缩减,比如从 64 MHz 缩减到 1 KHz,最终生成一个 1 ms 的时钟周期,用于定时器计数。
  • 定时周期:定时器会从 0 计数到设定的周期值,然后触发中断。当定时器达到设定的周期值时,计数器重置并开始新一轮计数。
  1. 定时器与 PWM 结合
  • PWM(Pulse Width Modulation) 是一种常用于调节设备(如灯光、马达)输出强度的技术,利用定时器生成脉冲波,控制输出信号的占空比。
  • PWM 的基本原理:通过改变脉冲的占空比,可以调节输出信号的强弱。占空比是指信号为高电平的时间与总周期的比值。
  • PWM 的工作过程:
    • 设定两个值:周期(TCNTB)和比较值(TCMPB)。
    • 当定时器计数器的值达到周期值时,计数器重置并开始新一轮计数;当计数器值达到比较值时,输出电平改变。
    • 通过修改比较值 TCMPB 与周期值 TCNTB 之间的关系,可以改变 PWM 波形的占空比。
控制蜂鸣器产生音乐流程
  1. 初始化GPIO为PWM输出

    GPD0CON &= ~0xF;    // 清除 GPD0_0 的配置位
    GPD0CON |= 1<<1;    // 将 GPD0_0 配置为 PWM 输出(TOUT_0)
    
    • GPD0CON:用于控制 GPD0_0 管脚的功能,通过设置 0x2,将其配置为 PWM 输出模式。
  2. PWM定时器配置

    TCFG0 &= ~0xFF;     // 清除 TCFG0 的前8位
    TCFG0 |= 124;       // 设置预分频器为 124
    TCFG1 &= ~0xF;      // 清除 TCFG1 的前4位
    TCFG1 |= 3;         // 设置分频器为 1/8
    TCNTB0 = 100;       // 设置定时器周期寄存器的初始值为 100
    TCMPB0 = 30;        // 设置比较寄存器的值为 30
    
    • TCFG0 和 TCFG1:分别用于设置预分频和分频器。预分频器设置为 124,分频器设置为 1/8。
    • TCNTB0 和 TCMPB0:这两个寄存器用于设定 PWM 波形的周期和占空比。周期寄存器(TCNTB0)决定 PWM 信号的周期,而比较寄存器(TCMPB0)决定高电平时间的长短,从而控制占空比。
  3. 控制 PWM 定时器

    • 定时器初始化
    TCON |= 1<<3;       // 设置定时器为自动重载模式
    TCON &= ~(1<<2);    // 设置不翻转电平
    TCON |= 1<<1;       // 更新 TCNTB 和 TCMPB 到 TCNT 和 TCMP
    TCON &= ~(1<<1);    // 清除更新位
    
    
    • 定时器的启动与停止
    TCON |= 1<<0;       // 启动定时器
    TCON &= ~(1<<0);    // 停止定时器
    
    • TCON:用于控制定时器的状态(启动、停止、更新、翻转等)。当设置 TCON 的第 1 位时,定时器会更新 TCNT 和 TCMP 的值,并且立即清除此位以确保正确更新。
  4. 蜂鸣器频率控制

    char yf[] = {
         0,191,170,152,143,128,114,101};  // 不同频率对应的 PWM 周期值
    
    • yf 数组:存储了蜂鸣器不同音调对应的 PWM 周期值。程序通过循环修改定时器的周期值和占空比,产生不同频率的 PWM 信号,控制蜂鸣器发出不同频率的声音。
  5. 延时函数

    void mdelay(int msec)
    {
         
        while
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值