Welcome 微信登录

首页 / 操作系统 / Linux / 嵌入式Linux工控板的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, &paras); //启动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”来操作这些管脚。Python Ubuntu 下的IDE选择在Thinkpad T60 上安装 Linux 时如何不破坏一键恢复相关资讯      嵌入式Linux 
  • 2015年嵌入式和移动Linux领域的几  (01月06日)
  • OpenWRT嵌入式Linux故障排除一例  (01/17/2015 13:04:14)
  • 10款专为嵌入式系统打造的Linux平  (06/27/2014 14:27:09)
  • 解决嵌入式Linux中的时区问题  (09/13/2015 13:49:19)
  • 嵌入式Linux开发环境搭建  (08/19/2014 05:49:14)
  • 嵌入式Linux中GPS信息读取与处理  (04/08/2014 19:31:47)
本文评论 查看全部评论 (0)
表情: 姓名: 字数