技术文章

当前页面: 首页 >技术文章 >ESM335x输出脉冲计数

ESM335x输出脉冲计数

供稿:成都英创信息技术有限公司 2016/6/14 11:56:28

0 人气:78

  • 关键词: 输出脉冲计数 ESM335x PWM
  • 摘要:ESM335x的PWM1和PWM2除了可用于产生标准的PWM信号外还支持输出脉冲计数功能,输出脉冲计数的工作原理是驱动程序每输出一个PWM波就产生一个中断并计数,当计数达到用户设定的脉冲个数后,驱动程序自动停止PWM输出,由于系统响应中断有一定的延时,所以驱动程序对输出脉冲的最高频率限制在5KHz。

ESM335x的PWM1和PWM2除了可用于产生标准的PWM信号外还支持输出脉冲计数功能,输出脉冲计数的工作原理是驱动程序每输出一个PWM波就产生一个中断并计数,当计数达到用户设定的脉冲个数后,驱动程序自动停止PWM输出,由于系统响应中断有一定的延时,所以驱动程序对输出脉冲的最高频率限制在5KHz。


应用程序通过打开PWM设备("PWM1:"或"PWM2:")使用脉冲计数功能,下面是示例代码:


  #include "stdafx.h"

  #include "bsp_drivers.h"


  int _tmain(int argc, _TCHAR* argv[])

  {

    HANDLEhPWM;

    PWM_INFO     pwm_info;

    DWORDdwBytes;

    BOOL     bRc;

    hPWM = CreateFile( TEXT("PWM1:"),

      GENERIC_READ|GENERIC_WRITE,

      FILE_SHARE_READ|FILE_SHARE_WRITE,

      NULL,

      OPEN_EXISTING,

      FILE_FLAG_RANDOM_ACCESS,

      NULL);


    pwm_info.dwNum = 0; // PWM输出模式

    pwm_info.dwFreq = 100000; // 频率范围1Hz~50MHz

    pwm_info.dwDuty = 500; // 占空比50%, 单位0.1%

    pwm_info.dwPol = 1; // 极性

    bRc = WriteFile( hPWM, &pwm_info, sizeof( PWM_INFO), &dwBytes, NULL );


    pwm_info.dwFreq = 0; // 频率参数为0,停止PWM输出

    bRc = WriteFile( hPWM, &pwm_info, sizeof( PWM_INFO), &dwBytes, NULL );


    pwm_info.dwNum = 3; // PWM脉冲计数输出模式

    pwm_info.dwFreq = 5000; // 频率范围1Hz~5KHz

    pwm_info.dwDuty = 500; // 占空比50%, 单位0.1%

    pwm_info.dwPol = 1; // 极性,无输出时IO保持为高电平

    // 脉冲输出完成或超时后WriteFile函数返回, dwBytes返回实际输出的脉冲个数

    bRc = WriteFile( hPWM, &pwm_info, sizeof( PWM_INFO), &dwBytes, NULL );


    CloseHandle( hPWM );

    return 0;

  }


  上面代码中的pwm_info用于设置PWM参数,其定义如下:


  typedef struct

  {

    /* PWM频率,单位:Hz,PWM模式输出频率范围1Hz~50MHz,脉冲计数模式频率范围1Hz~5KHz

      = 0: 停止PWM输出 */

    DWORDdwFreq;

    DWORDdwDuty; /* 占空比, 单位:0.1%, 范围:0 - 1000 */

    DWORD    dwPol; /* PWM极性, =0:高电平有效, =1:低电平有效 */

    DWORDdwNum; /* 输出脉冲个数, =0:连续的PWM输出 */

  } PWM_INFO, *PPWM_INFO;


当参数设置dwFreq=5000, dwDuty=500, dwPol=1, dwNum=3时,输出的波形如下:




只有当PWM脉冲信号输出时,其对应的IO才会被驱动为高电平或低电平,其余时间PWM引脚为高阻输入状态,由于ESM335x主板上GPIO上拉电阻的作用,在没有脉冲输出时,PWM引脚为上拉输入状态(高电平)。如果实际使用,时希望PWM平时保持为低电平,则需要在PWM信号上增加反向器,比如增加一级非门。


在PWM引脚上增加1K欧的下拉电阻,同时将设置dwPol=0,也可以保证PWM引脚在没有输出时保持为低电平,下图是在PWM引脚上增加了下拉电阻,同时参数设置为dwFreq=5000, dwDuty=500, dwPol=0, dwNum=3时输出的波形:




利用反向电路或增加下拉电阻,这两种方法都可以保证PWM信号在ESM335x上电启动过程中和没有脉冲输出时保持为低电平。


PWM脉冲通常用来控制步进电机,脉冲频率决定电机转速,脉冲个数控制电机的角位移。步进电机在启动过程中,需要控制脉冲从一个较低的频率逐渐增加到电机正常工作时的频率,电机在停止时也有一个相应的减速过程。在使用ESM335x的PWM驱动步进电机时,可以多次调用WriteFile函数,然后每次修改PWM脉冲频率来实现步进电机的加速和减速过程。需要注意的是在即便应用程序连续不断的调用WriteFile函数,在每次调用之间都会有几十到几百微秒不等的延时。

审核编辑(李晨晖)
更多内容请访问 成都英创信息技术有限公司(http://c.gongkong.com/?cid=5085)

手机扫描二维码分享本页

工控网APP下载安装

工控速派APP下载安装

 

我来评价

评价:
一般