linux输出指定数量脉冲,基于i.MX6UL实现PWM脉冲计数

1. 适用范围

本文档介绍了基于i.MX6UL实现PWM脉冲计数的基本实现原理。

2. 客户需求

2.1 基本需求

基本需求为在i.MX6UL上利用PWM输出固定频率的脉冲波形,并严格控制该频率下的脉冲输出个数。应用程序调用系统接口设置PWM输出的频率和脉冲输出个数,之后PWM启动脉冲输出,当输出指定的脉冲个数后,产生中断提示应用程序。此时应用程序再次设置最新的PWM输出频率和脉冲个数,循环往复工作。

2.2 参数需求

PWM频率范围  :最小0Hz,最大25KHz;

计数个数范围    :最小0,最大60000。

3. 原理简介

由于i.MX6UL的PWM脉冲输出本身不具备计数功能,所以采用了PWM+EPIT结合使用的方式。

EPIT(Enhanced Period Interrupt Timer)为i.MX6UL实现的高精度周期性中断定时器,其和PWM采用的是同一个时钟源。

基本思路为:当应用程序设置PWM计数值时启动PWM输出,将PWM计数值换算为EPIT的定时周期,并启动EPIT开始计时,当定时周期到时产生中断, 在EPIT中断中禁用PWM输出,此时PWM脉冲输出的个数也应该达到理论输出个数。

3.1 用户调用流程

用户调用流程如图 3-1所示。

15c49cd55a62d3d5b82f294b8f0d8b2f.png

图 3-1用户调用流程

3.2 ControlLib库实现

3.2.1 ControlOpen操作

打开PWM设备、EPIT设备,设置PWM设备和EPIT工作的默认频率。将PWM设备与EPIT设备关联,以使EPIT中断中可以禁用对应的PWM脉冲输出。

3.2.2 ControlClose操作

关闭PWM设备、EPIT设备。

3.2.3 ControlSet操作

按照如下公式,根据用户设置的PWM频率和计数数值,换算为EPIT定时的数值。

f378b8459e1a0c7e3d2d7c161c1f6fe9.png

之后设置PWM工作的频率,启动PWM输出;设置EPIT定时时长,启动EPIT定时。

3.2.4 ControlEventWait操作

调用EPIT设备提供的接口,阻塞等待定时器到期后的中断。

3.3 参数有效范围

3.3.1 PWM频率范围

PWM输出的最大频率为50KHz,最小为25Hz。

PWM占空比默认为50%,目前暂不支持调整。

3.3.2 计数有效范围

PWM脉冲计数理论最大值为0xFFFFFFFF,但计数值Count实际受以下关系制约:

019dccfd6ee656971b648c003e3044d3.png

Freq为PWM实际设置的输出频率,当Freq减小时,Count最大可计数值随之减小。

4. 测试结果

当设置50KHz频率,20次输出时,示波器抓到如图 4-1所示波形。

cf1478d49ffec6da22eb933005e6587f.png

图 4-1 50KHz,输出20次

当设置25KHz频率,33次输出时,示波器抓到如图 4-2所示波形。

149a5a4566e0d16abf1783c38e9f3d1f.png

图 4-2 25KHz,输出33次

当设置10KHz频率,60次输出时,示波器抓到如图 4-3所示波形。

ec616566b9f3b55dba5d797ef6f13eb0.png

图 4-3 10KHz,输出60次

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值