imx6q开发板的PWM蜂鸣器调试

本文详细介绍在I.MX6Q开发板上,通过修改背光设备树实现PWM4驱动蜂鸣器的过程。包括硬件原理图分析、设备树修改及测试步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发板:I.MX6Q  5155

Linux内核:嵌入式3.10.53

蜂鸣器:无源压电式

日期:2019-6-29 18:50

调试目的:在开发板上实现PWM驱动蜂鸣器蜂鸣。

调试过程如下:

 (0)首先运行开发板Linux系统,查看目前系统所使用的pwm设备。

如下:

可见目前系统只有背光是使用pwm实现,为了调试方便,可以通过背光来模拟蜂鸣器,使用背光设备树来驱动蜂鸣器,因为系统自带了可以在用户空间调试背光的brightness文件(后面会用到),用这种方法可以利用brightness文件以调试蜂鸣器

(1)查看硬件原理图和datasheet,了解硬件相关信息。

在IMX6Q原理图(SPF-27516_C5)中搜索pwm,发现了一处连接pwm的管脚,即DISP0_PWM。

从原理图可知,DISP0_PWM连接的是SD1_DAT3,但我们还不能确定是不是该管脚是不是连接的背光。

(2)查看背光设备树,确定背光连接管脚。

在sourceinsight中搜索backlight,可在imx6qdl-sabresd.dtsi中得到以下信息管脚

可知backlight连接的是pwm1。
在imx6qdl-sabresd.dtsi中搜索pwm1,可得:

可知pwm1连接的管脚为pinctrl_pwm1_1。
继续搜索pinctrl_pwm1_1,可在imx6qdl.dtsi中得到以下信息:

MX6QDL_PAD_SD1_DAT3__PWM1_OUT可知,背光的pwm对应的管脚为SD1_DAT3,至此可确定原理图中DISP0_PWM即是连接的背光引脚。
从以上DTS文件信息也可以知道,DTS文件已经建好了pwm控制背光的设备树。

到这里,我们确定了一个信息,即背光连接的PWM1管脚是SD1_DAT3。已知我们的板子有PWM1、PWM2、PWM3、PWM4四个PWM,现在PWM1已经使用,那么能否用其他某一个PWM控制蜂鸣器?继续下面探索。

(3)查阅datasheet,确定可用于蜂鸣器的PWM。

查阅datasheet,看是否有其他可用的pwm。在datasheet中得到以下信息:

可知SD1_CMD管脚可以复用为PWM4_OUT输出,因此可以使用pwm4来驱动蜂鸣器。在原理图中查找SD1_CMD,得到如下信息:

可以看出SD1_CMD管脚已经被连接到了蜂鸣器控制器上,所以我们可以对SD1_CMD进行配置,以实现pwm4驱动蜂鸣器。

(4)修改背光设备树,以实现PWM4驱动蜂鸣器。

       Ⅰ、修改imx6qdl.dtsi中pwm1节点,如下

这里将本用于背光的PWM1管脚配置为用于蜂鸣器的PWM4管脚。

       Ⅱ、修改imx6qdl-sabresd.dtsi中pwm1节点,如下

这里依样画葫芦,根据原来pwm1的描述,修改为pwm4的描述。

        Ⅲ、修改imx6qdl-sabresd.dtsi中节点,如下

这里依然使用了backlight的名字,这样便可以使用系统自带的文件brightness文件来调试蜂鸣器。其中的字段“pwms”指定了蜂鸣器的频率(这里我取370370,转换为频率为2700HZ),“brightness-levels”字段指定了占空比,分7级,输入7最大,100%,蜂鸣器不会响(因为是无源蜂鸣器,输入0也一样不响),输入6占空比为50%,蜂鸣器声音最大。

到这一步,设备树的修改便已完成。

(5)测试

测试时,运行Linux系统后,输入如下命令,在用户空间进行测试。其中的brightness文件是3.10.53系统提供的测试imx6q背光的文件,通过往该文件写入0-7几个数字可以调节背光亮度,如果我们前面的工作没有出错,那输入非0或非7数字蜂鸣器就会发出蜂鸣声。

测试结果:蜂鸣器无声响,示波器测量蜂鸣器管脚亦无波形,可知未成功。

原因排查:

如下,

输入dmesg | grep pwm命令查看启动信息,得到如下信息:

可以看到,MX6Q_PAD_SD1_CMD引脚正在被另一个设备iomuxc所占用,无法分配给208c000.pwm(208c000为pwm4地址信息,可在datasheet中查到),也就是我们的pwm4设备,在DTS文件中搜索MX6Q_PAD_SD1_CMD,在imx6qdl-sabresd.dtsi中可得到如下信息,

由最后一行信息可知MX6Q_PAD_SD1_CMD在这里被占用。
从数据手册也可以看出,SD1_CMD可以有5种使用方式,其中就包含了GPIO1_IO18,如下表,
 

因此可以确定是GPIO_IO18占用了MX6Q_PAD_SD1_CMD管脚,将其屏蔽掉,再重新编译设备树。
启动系统,再输入“echo 6 > /sys/bus/platform/devices/backlight.36/backlight/backlight.36/brightness” 命令,蜂鸣器发出声响,成功!

最后再重复一遍,这种方法是在背光设备树的基础上,修改相应管脚等信息来实现PWM驱动蜂鸣器,这种方法可以利用系统中已有的调试背光用的brightness文件,以在用户空间调试蜂鸣器,方便快捷。但这样占用了背光的设备树,将会使背光不能使用。若想同时使用PWM驱动背光和蜂鸣器,需要另外建立蜂鸣器自己的设备树,其方法也和上面所叙大同小异,只是不修改背光的设备树而已,在此不多赘述,只将最主要的修改部分贴出,如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值