英创信息技术嵌入式Linux主板EM9160的PWM功能及其应用简介

描述

        PWM是指一种周期可调、占空比可调的稳定脉冲输出,即通常所说的脉宽调制脉冲信号。这种信号在工业自动控制中有广泛的应用。英利公司的嵌入式Linux主板EM9160可支持3路独立的PWM输出,输出频率范围从1Hz–10MHz,占空比从1%-99%。与EM9160的其他硬件资源一样,应用程序对EM9160的PWM功能的操作也是通过驱动程序来实现的。下表列出的是EM9160的PWM资源配置情况:

PWM编号

设备文件名

输出管脚

PWM1

'/dev/em9x60_pwm1'

GPIO12

PWM2

'/dev/em9x60_pwm2'

GPIO14

PWM3

'/dev/em9x60_pwm3'

GPIO15

        PWM功能的操作很简单,在打开设备文件后,通过两个IOCTL命令来实现PWM的启动和停止:

IOCTL命令

参数

备注

EM9X60_PWM_IOCTL_START

  设置 PWM的频率和占空比,并启动

EM9X60_PWM_IOCTL_STOP

  停止PWM脉冲输出

  启动PWM的命令,通过双参数数据结构来传递必要的参数:

  struct double_pars

  {

  unsigned int par1;

  unsigned int par2;

  };

  在上述结构中,par1用于设置PWM的输出频率,单位为Hz;而par2用于设置PWM的输出占空比,单位为% 。若我们需要生成38KHz脉冲用于红外串口数据的调制,则:

  struct double_pars paras;

  paras.par1 = 38000; // -》 38000Hz = 38KHz

  paras.par2 = 50; // -》 50%

  若我们希望用PWM1输出38KHz信号,其主要的代码为:

  int fd = open(‘/dev/em9x60_pwm1’, O_RDWR); //打开设备文件

  通过IOCTL函数启动PWM:

  int rc = ioctl(fd, EM9X60_PWM_IOCTL_START, ¶s); //启动PWM

  或暂停PWM输出:

  int rc = ioctl(fd, EM9X60_PWM_IOCTL_STOP, NULL); //暂停PWM

  在使用PWM中需要注意以下几点:

  1、EM9160所有的PWM通道都是与GPIO管脚复用的,因此需避免在设计出现GPIO的使用与PWM冲突。

  2、若串口‘/dev/ttyS2’或‘/dev/ttyS4’-‘/dev/ttyS6’之一被设置作为ISO7816的接口,它将自动占用PWM2或PWM3作为SCK时钟的输出,因此应用程序也不应当打开对应的PWM设备文件,以避免资源冲突。

  3、当PWM设备文件关闭、及执行来close(fd)后,对应的管脚会恢复成输入状态的GPIO,这时仍然可以通过GPIO的设备文件“/dev/em9x60_gpio”来操作这些管脚。


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分