首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于 2.6 内核的 pwm 蜂鸣器驱动设计(1)

基于 2.6 内核的 pwm 蜂鸣器驱动设计(1)

一、开发环境 二、PWM 怎样工作在 ARM Linux 中 1. 什么是 PWM? PWM(脉冲宽度调制)简单的讲是一种变频技术之一,是靠改变脉冲宽度 来控制输出电压,通过改变周期来控制其输出频率。如果还不是很清楚,好吧, 来看看我们实际生活中的例子,我们的电风扇为什么扭一下按扭,风扇的转速就 会发生变化;调一下收音机的声音按钮,声音的大小就会发生变化;还有待会儿 我们要讲的蜂鸣器也会根据不同的输入值而发出不同频率的叫声等等!!这些都 是 PWM 的应用,都是通过 PWM 输出的频率信号进行控制的。 2. ARM Linux 中的 PWM 根据 S3C2440 的手册介绍,S3C2440A 内部有 5 个 16 位的定时器,定 时器 0、1、2、3 都带有脉冲宽度调制功能(PWM),定时器 4 是一个没有输出引 脚的内部定时器,定时器 0 有一个用于大电流设备的死区生成器。看下图解释 吧!!
  由 S3C2440 的技术手册和上面这幅结构图,我们来总结一下 2440 内部定 时器模块的特性吧: 1) 5 个 16 位的定时器, 共 定时器 0、 2、 都带有脉冲宽度调制功能(PWM); 1、 3 2)每个定时器都有一个比较缓存寄存器(TCMPB)和一个计数缓存寄存器 (TCNTB); 3)定时器 0、1 共享一个 8 位的预分频器(预定标器),定时器 2、3、4 共享 另一个 8 位的预分频器(预定标器),其值范围是 0~255; 4)定时器 0、1 共享一个时钟分频器,定时器 2、3、4 共享另一个时钟分 频器,这两个时钟分频器都能产生 5 种不同的分频信号值(即:1/2、1/4、1/8、 1/16 和 TCLK); 5)两个 8 位的预分频器是可编程的且根据装载的值来对 PCLK 进行分频, 预分频器和钟分频器的值分别存储在定时器配置寄存器 TCFG0 和 TCFG1 中; 6)有一个 TCON 控制寄存器控制着所有定时器的属性和状态,TCON 的第 0~7 位控制着定时器 0、第 8~11 位控制着定时器 1、第 12~15 位控制着定时器 2、第 16~19 位控制着定时器 3、第 20~22 位控制着定时器 4。 还是根据 S3C2440 手册的描述和上图的结构,要开始一个 PWM 定时器功 能的步骤如下(假设使用的是第一个定时器):
  1)分别设置定时器 0 的预分频器值和时钟分频值,以供定时器 0 的比较缓 存寄存器和计数缓存寄存器用; 2)设置比较缓存寄存器 TCMPB0 和计数缓存寄存器 TCNTB0 的初始值(即 定时器 0 的输出时钟频率); 3)关闭定时器 0 的死区生成器(设置 TCON 的第 4 位); 4)开启定时器 0 的自动重载(设置 TCON 的第 3 位); 5)关闭定时器 0 的反相器(设置 TCON 的第 2 位); 6)开启定时器 0 的手动更新 TCNTB0&TCMPB0 功能(设置 TCON 的第 1 位); 7)启动定时器 0(设置 TCON 的第 0 位); 8)清除定时器 0 的手动更新 TCNTB0&TCMPB0 功能(设置 TCON 的第 1 位)。 由此可以看到,PWM 的输出频率跟比较缓存寄存器和计数缓存寄存器的取 值有关, 而比较缓存寄存器和计数缓存寄存器的值又跟预分频器和时钟分频器的 值有关;要使用 PWM 功能其实也就是对定时器的相关寄存器进行操作。手册上 也有一个公式:定时器输出频率 = PCLK / {预分频器值 + 1} / 时钟分频值。下 面我们来通过一个蜂鸣器的实例来说明 PWM 功能的使用。 三、蜂鸣器驱动实例 1. 蜂鸣器的种类和工作原理
  蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外 壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或 集成电路构成。当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输 出 1.5~2.5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通 电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动 膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 有源蜂鸣器和无源蜂鸣器的区别:这个“源”字是不是指电源,而是指震荡 源,即有源蜂鸣器内有振荡源而无源蜂鸣器内部没有振荡源。有振荡源的通电就 可以发声,没有振荡源的需要脉冲信号驱动才能发声。
返回列表