案例分享:3-2 PWM 驱动实验
一、实验目的熟悉基本字符设备的驱动程序设计,掌握在Linux系统下PWM的使用方法并通过应用程序验证蜂鸣器驱动。
二、实验原理根据原理图,可知使用的是无源蜂鸣器。
PWM输出脚,默认为低电平,PWM计数器TCNTn的初始值等于TCNTBn,当TCNTn的值递减到等于TCMPBn的值时,PWM输出高电平,当PWM计数器的递减到0时,输出又变为低电平,如此周而复始。
程序框架1、可以在Ubuntu中查看相关驱动代码。2、打开驱动代码。蜂鸣器驱动实现为一个字符设备,通过 ioctl 函数来设置相关寄存器的值以此来实现PWM 波形的输出与禁止。3、首先查看驱动入口函数,在入口函数中申请了PWM。4、接着为防止驱动加载后直接响起,则使用了pwm_config和pwm_disable,分别是将占空比设置为0和禁用此PWM。5、当在应用层使用ioctl的时候,会对应到函数操作,这里的pwm_config,第一个参数是设置占空比是以有效时间,第二个参数是设置周期。pwm_enable则为启用此PWM。
三、实验步骤实验设备本实验中使用的软件为VMware17+Ubuntu 14.04 和串口调试工具Xshell。
本实验中使用的是TL6818-PlusTEB实验箱,所需的配件为Micro SD卡、读卡器、电源、Micro USB、RS232 交叉串口母线和USB 转 RS232 串口线。
编译源码(1)打开Ubuntu,将Demo文件夹拷贝到6818目录下。(2)执行指令进入内核文件夹里面,然后输入命令进入内核菜单。(3)在内核菜单,通过电脑键盘的上下左右按键、Enter键控制进入相应目录。(4)选择BUZZER驱动,关闭motor驱动。“*”代表选择,通过空格键控制。(5)然后选择exit,按下enter键不断退出。(6)退出到最后提示是否保存,选择Yes,按下enter键退出。(7)然后执行命令返回SDK目录,编译整个SDK。(8)等待编译完成,生成新的uImage。
文件拷贝(1)将SD系统启动卡通过读卡器连接到计算机,虚拟机Ubuntu系统会自动识别SD系统启动卡,点击连接到Ubuntu。(2)进入uImage目录,然后输入命令将uImage更新到卡里面。(3)在Ubuntu中,执行以下命令,在SD卡内建立一个目录用于放置执行文件,如果已有相应的文件夹,则跳过创建文件夹的步骤。(4)将测试文件拷贝到SD的目录。(5) 拷贝完成后,弹出SD卡。
硬件连接(1)插入SD卡。(2)使用RS232交叉串口母线和USB转RS232串口线连接实验箱的UART0和电脑的USB口。(3)设置拨码开关为SD卡启动模式100。(4)使用Micro USB线连接实验箱的USB OTG和电脑的USB口。(5)连接电源线,先不要上电。
软件操作接着进行软件部分操作。(1)先在设备管理器查看串口的端口号。(2)再设置串口调试工具,波特率设置为115200,点击连接,在Xshell调试终端会显示连接成功。(3)连接成功后,拨动实验箱的电源开关,将实验箱上电。(4)等待系统登录SD卡系统。(5)登录成功后,在串口调试窗口执行以下命令,进入测试程序所在目录,运行程序。(6)程序运行后蜂鸣器响起4声,说明蜂鸣器驱动正常。同时串口调试窗口打印相关信息。(7)实结束后,实验箱断电,取下SD卡,将SD系统启动卡通过读卡器连接到计算机,连接到Ubuntu,执行命今替换回原来的ulmage文件。