[活动专区]

基于SC92F7250单片机的PWM应用

[复制链接]
1870|7
手机看帖
扫描二维码
随时随地手机跟帖
sanitIT|  楼主 | 2019-5-20 16:59 | 显示全部楼层 |阅读模式
一、       项目需求
      目前一个项目需要控制蜂鸣器发声,目前有两种方案可供选择:第一种方案就是使用有源蜂鸣器,直接使用管脚高低电平控制一颗三极管,从而去控制蜂鸣器响与不响;第二种方案就是使用无源蜂鸣器,单片机输出一定频率,一定占空比的PWM波,去控制一颗三极管开关,从而控制蜂鸣器的响与不响。这两种方案都是可行的。进一步调查发现,有源蜂鸣器都比无源蜂鸣器贵不少,为了降低成本,不得不优先选择无源蜂鸣器。
二、       项目评估
      使用无源蜂鸣器,那么单片机就必须能够输出PWM波,并且这个PWM波还能够控制频率、占空比。而且还能控制其关闭。经过查阅SC92F7250这款单片机的技术手册发现,其提供了一个独立的计数器,它可以支持6路的PWM输出(这里所说的6路指SC92F7252芯片,SC92F7250由于只有8个脚,它只支持一路PWM输出),8位PWM精度。无源蜂鸣器控制频率一般在2KHz左右,这完全符合要求啊。

895015ce26b7508b7a.png
三、       项目实施
      通过阅读【SC92F7252_7251_7250v1.1cn.pdf】文档中关于PWM章节的描述,配合着官方提供的DEMO,很容易就理解了每一个寄存器以及每一位的作用。于是就开始编写测试代码。
      边测试边修改,不一会就完美实现了。
951065ce26c560a31a.png
      看,这PWM波多么好看啊。来,控制一下蜂鸣器看看效果^_^。非常的完美,可惜你们听不见。哈哈哈!!!
废话少说,初始化代码以及蜂鸣器打开与关闭的代码奉上。

/* 使能蜂鸣器鸣叫 */
#defineBEEP_ENABLE()    PWMDTY4 = 45
/* 禁止蜂鸣器鸣叫 */
#define BEEP_DISABLE()   PWMDTY4 = 0

/*
*********************************************************************************************************
*  函 数名: bsp_initbeep
*  功能说明: 配置beep PWM输出
*  形    参:无
*  返 回值: 无
*********************************************************************************************************
*/
voidbsp_initbeep(void)
{
  /* 设置P2.6推挽输出 */
  P2CON |= 0x40;

  PWMCON = 0x04;   //PWM关闭,Fsys/32频率;
  PWMCFG0 = 0x02;   //PWM4输出到I/O
  PWMCFG1 = 0x00;   //PWM3\PWM4\PWM5不反向
  PWMPRD = 89;     //PWM周期=(89+1)
  PWMDTY4 = 0;      //PWM4的Duty = 0/90 = 0  默认关闭
  PWMCON |= 0x80;   //启动PWM工作
}

打开蜂鸣器只需调用BEEP_ENABLE()即可;关闭蜂鸣器只需调用BEEP_DISABLE()即可。

使用特权

评论回复

相关帖子

qq986433936| | 2019-5-21 23:43 | 显示全部楼层
不错,很好的学习参考。

使用特权

评论回复
赛元MCU3| | 2019-5-22 09:23 | 显示全部楼层
太棒了吧

使用特权

评论回复
化骨龙| | 2019-12-17 16:56 | 显示全部楼层
本帖最后由 化骨龙 于 2019-12-27 10:46 编辑

完全OJBK

使用特权

评论回复
qwe123zxc| | 2019-12-18 12:38 | 显示全部楼层
也希望赛元工程师多多发表些各种应用例程

使用特权

评论回复
waothom| | 2020-1-2 10:52 | 显示全部楼层
用IO口直接驱动压电式蜂鸣器就行啦,还省了电阻和3极管。不过蜂鸣器不响时IO口要设置为高阻态,不然电源纹波会使蜂鸣器有微响

使用特权

评论回复
评论
waothom 2020-1-2 16:04 回复TA
@knk :不设置为高阻输入的话会受纹波干扰会有很细微的声音,你可以试一下,要仔细听才听得出来,特别是有数码屏扫描显示的时候就会更明显,设为高阻输入就不会 
knk 2020-1-2 13:38 回复TA
不是把IO设置为蜂鸣器另一只脚的相同电平吗? 蜂鸣器另一只脚接地时,关闭蜂鸣器设置PWM占空比为0, 蜂鸣器另一只脚接电源时,关闭蜂鸣器设置PWM占空比为100%。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

19

帖子

1

粉丝