PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发

上传人:m**** 文档编号:508533341 上传时间:2022-08-09 格式:DOC 页数:13 大小:153KB
返回 下载 相关 举报
PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发_第1页
第1页 / 共13页
PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发_第2页
第2页 / 共13页
PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发_第3页
第3页 / 共13页
PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发_第4页
第4页 / 共13页
PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发》由会员分享,可在线阅读,更多相关《PWM在ARM-Linux中的原理和蜂鸣器驱动实例开发(13页珍藏版)》请在金锄头文库上搜索。

1、PWM在ARLinux中的原理和蜂鸣器驱动实例开发PWM在RM iux中的原理和蜂鸣器驱动实例开发 嵌入式Linux之我行,重要讲述和总结了本人在学习嵌入式inx中的每个环节。一为总结经验,二但愿能给想入门嵌入式Linux的朋友提供以便。如有错误之处,谢请指正。 共享资源,欢迎转载:htt:/一、开发环境 主 机:VMWa-Fedora 9 开发板:Min244-64MBNan,Kre:2.0. 编译器:arm-in-gcc-.3二、PWM如何工作在M Linu中1. 什么是PW?PWM(脉冲宽度调制)简朴的讲是一种变频技术之一,是靠变化脉冲宽度来控制输出电压,通过变化周期来控制其输出频率。如

2、果还不是很清晰,好吧,来看看我们实际生活中的例子,我们的电电扇为什么扭一下按扭,电扇的转速就会发生变化;调一下收音机的声音按钮,声音的大小就会发生变化;尚有待会儿我们要讲的蜂鸣器也会根据不同的输入值而发出不同频率的叫声等等!!这些都是WM的应用,都是通过PM输出的频率信号进行控制的。2. ARM Linu中的PWM根据S3C2440的手册简介,3C2440A内部有5个16位的定期器,定期器0、3都带有脉冲宽度调制功能(WM),定期器是一种没有输出引脚的内部定期器,定期器0有一种用于大电流设备的死区生成器。看下图解释吧!!由S3C240的技术手册和上面这幅构造图,我们来总结一下2440内部定期器

3、模块的特性吧:)共5个16位的定期器,定期器0、1、2、3都带有脉冲宽度调制功能(PWM);2)每个定期器均有一种比较缓存寄存器(CPB)和一种计数缓存寄存器(TN);3)定期器、1共享一种8位的预分频器(预定标器),定期器2、3、4共享另一种8位的预分频器(预定标器),其值范畴是25;4)定期器0、1共享一种时钟分频器,定期器2、3、共享另一种时钟分频器,这两个时钟分频器都能产生5种不同的分频信号值(即:2、1/、1/8、1/16和TCK);)两个位的预分频器是可编程的且根据装载的值来对PCLK进行分频,预分频器和钟分频器的值分别存储在定期器配备寄存器TCG0和TCFG1中;)有一种CON控

4、制寄存器控制着所有定期器的属性和状态,TN的第07位控制着定期器0、第1位控制着定期器、第115位控制着定期器2、第619位控制着定期器3、第2位控制着定期器4。还是根据S324手册的描述和上图的构造,要开始一种PM定期器功能的环节如下(假设使用的是第一种定期器):1)分别设立定期器的预分频器值和时钟分频值,以供定期器0的比较缓存寄存器和计数缓存寄存器用;2)设立比较缓存寄存器TCP0和计数缓存寄存器TC0的初始值(即定期器0的输出时钟频率);)关闭定期器0的死区生成器(设立CN的第4位);)启动定期器0的自动重载(设立ON的第位);5)关闭定期器0的反相器(设立TON的第2位);6)启动定期

5、器的手动更新TCTB0&TCMPB0功能(设立TCON的第1位);7)启动定期器0(设立TCN的第0位);8)清除定期器0的手动更新TCNT&TCMPB0功能(设立TCON的第位)。由此可以看到,P的输出频率跟比较缓存寄存器和计数缓存寄存器的取值有关,而比较缓存寄存器和计数缓存寄存器的值又跟预分频器和时钟分频器的值有关;要使用PW功能其实也就是对定期器的有关寄存器进行操作。手册上也有一种公式:定期器输出频率 CLK / 预分频器值 + 1 时钟分频值。下面我们来通过一种蜂鸣器的实例来阐明PWM功能的使用。三、蜂鸣器驱动实例1. 蜂鸣器的种类和工作原理蜂鸣器重要分为压电式蜂鸣器和电磁式蜂鸣器两种

6、类型。压电式蜂鸣器重要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等构成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.51V直流工作电压),多谐振荡器起振,输出1.52.kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等构成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的互相作用下,周期性地振动发声。有源蜂鸣器和无源蜂鸣器的区别:这个“源”字是不是指电源,而是指震荡源,即有源蜂鸣器内有振荡源而无源蜂鸣器内部没有振荡源。有振荡源的通电就可以发

7、声,没有振荡源的需要脉冲信号驱动才干发声。额外知识:简朴蜂鸣器的制作措施)制备电磁铁M:在长约6厘米的铁螺栓上绕100圈导线,线端留下5厘米作引线,用透明胶布把线圈粘好,以免线圈松开,再用胶布把它粘在一种盒子上,电磁铁就做好了;)制备弹片:从铁罐头盒上剪下一条宽约厘米的长铁片,弯成直角,把电磁铁的一条引线接在弹片上,再用胶布把弹片紧贴在木板上;)用曲别针做触头,用书把曲别针垫高,用胶布粘牢,引出一条导线,如图连接好电路;4)调节M与之间的距离(通过移动盒子),使电磁铁能吸引弹片,调节触点与弹片之间的距离,使它们能正好接触,通电后就可以听到蜂鸣声。. 开发板上蜂鸣器原理图分析由原理图可以得知,蜂

8、鸣器是通过GPB0 IO口使用WM信号驱动工作的,而0口是一种复用的IO口,要使用它得先把她设立成T PM输出模式。3. 编写合适开发板的蜂鸣器驱动程序,文献名:my24_pwmc/*=Nme :my440_pw.cAutho : uag GagDate : 511/9Coprgh:LDscrpton :my24 wm rivr=*inld #nclude linux/int.#nlde#ilude #ilde #iclude #nclud#inclde asm.h#incle #ncud #nlud pat/reg-tme.h#deine PW_MAOR 0 /主设备号#deinePWM_N

9、AME m2440_pwm/设备名称stati in device_r=PWM_MAJOR; /系统动态生成的主设备号/打开设备stai intppen(structinode*inoe,sruct filefile)/对P0复用口进行复用功能设立,设立为TOUT0 WM输出s3c21gpo_cfgpin(321_GPB0, S32410_GPB0_TOT0);retrn 0;/关闭设备sttic npwm_clse(struct nod*inoe, sruct le*file)reurn 0;/对设备进行控制sac int pwm_ioct(structino *node, srutfle

10、*fil, unsigd ncmd, unignd ong arg)f(cm= )/如果输入的参数不不小于或等于0的话,就让蜂鸣器停止工作/这里又恢复GP口为IO口输出功能,由原理图可知直接给低电平可让蜂鸣器停止工作3c41_gpio_cgi(S3C10GB, S341_GP0_OUT);s3241_gpo_setin(S3C2410_GP0,0);ee/如果输入的参数不小于0,就让蜂鸣器开始工作,不同的参数,蜂鸣器的频率也不同样/定义某些局部变量usined ngtcn;unsined lon ct;nsiged ongg;unsigd ng tcfg;tuct *clp;nsgned ng

11、 pcl;/如下对各寄存器的操作结合上面讲的开始一种PWM定期器的环节和440手册PWM寄存器操作部分来看就比较容易理解tf = _rawad(S3C410TCF1); /读取定期器配备寄存器1的值tfg0 = _raw_rea(C240_CFG0);/读取定期器配备寄存器的值tcg &SC20_T_PRSCLER_MASK;cf0 (50 ); /设立tcfg的值为9tcg1 = S3C410_CFG_MUX0_MASK;tcfg1 3240_TCFG_MUX0_IV16; /设立tf1的值为x01即:1/1_awwritel(tcfg1, 3C241_TFG1); /将值tcfg写入定期器

12、配备寄存器1中_raw_writel(tcfg,3C210TCF0); /将值tcf0写入定期器配备寄存器0中clk_ lket(NULL,l);clk c_et_rte(lk_p); /从系统平台时钟队列中获取pck的时钟频率,在nlude/linx/clk.h中定义tct =(pck/50/6)c;/计算定期器的输出时钟频率(lkrescalr0 + 1/divider value)_aw_wrtl(tcn,C241_TCTB(0);/设立定期器0计数缓存寄存器的值_rawwril(ct/,SC410_TCMPB(0); /设立定期器比较缓存寄存器的值to _readl(3C410_TC); /读取定期器控制寄存器的值cn &= 0x1f;tc | 0xb; /关闭死区、自动重载、关反相器、更新NTB&TCP0、启动定期器0_raw_wril(co,S3C20_TON); /设立定期器控制寄存器的0-4位,即对定期器进行控制tcon &= 2;_raw_writel(co,3C210_ON); /清除定期器0的手动更新位return 0;/设备操作构造体stat truc ile_opratinspwm_fops =.wer= HISMOLE,ope = pm_pn,.release= p_cloe,.ioctl= pwm_iol,;/定义一种

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号