0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术ESM335x Linux输出脉冲计数介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-04 10:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、综述

ESM335X具有4路PWM输出,其中PWM1和PWM2除了可以用于产生标准的PWM信号,现已支持输出脉冲计数功能,可以在应用程序中设置脉冲个数,当输出脉冲个数达到指定值时,驱动程序自动停止PWM输出,由于系统响应延迟,使用输出脉冲计数功能时最高频率不应超过100KHz。本文将介绍Linux系统下输出脉冲计数功能的使用方法。

2、应用程序

1、使用PWM输出功能需要设置如下结构体:

structpwm_config_info

{

unsignedintfreq;/*in Hz*/

unsignedintduty;/*in %*/

unsignedintpolarity;

unsignedintcount;

};

我们为了实现输出计数功能更新了此结构体,如果需要使用输出脉冲计数功能,用户需要更新头文件“em335x_drivers.h”中的此结构体及相应的封装函数(见下文),我们也提供更改过的头文件和示例程序,需要的用户可以和我们联系。

●freq用于设置频率,单位Hz,设置为0时停止输出

●duty用于设置占空比,单位%

●polarity用于设置输出极性(高电平有效或低电平有效),可以取值:

#definePWM_POLARITY_NORMAL(0 << 0) // 高电平有效

#define PWM_POLARITY_INVERTED(1 << 0) // 低电平有效

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

●count用于设置输出脉冲个数,count设置为0时为标准PWM输出,连续输出

2、使用PWM输出时,首先需要打开对应的设备文件,然后在调用write()函数进行参数设置,我们对write()函数进行了进一步封装:

intPWM_Start(intfd,intfreq,intduty,intcount )

{

intrc;

structpwm_config_infoconf;

conf.freq = freq;

conf.duty = duty;

conf.polarity = POLARITY;

conf.count = count;

rc =write(fd, &conf,sizeof(structpwm_config_info));

returnrc;

}

用户在应用程序中可以直接调用此函数使能PWM脉冲输出功能:

#include "pwm_api.h"

intfd;

intnpwm = 1;

chardevice[32];

unsignedintfreq = 1000;

unsignedintduty = 50;

unsignedintcount = 5;

sprintf( device, "/dev/em335x_pwm%d", npwm );

fd =open(device, O_RDWR);

if( fd < 0)

{

printf("can not open /dev/em335x_pwm%d device file!\n", npwm);

return-1;

}

printf( "Open %s\n", device );

PWM_Start( fd, freq, duty, count );

3、使用脉冲输出计数功能后,在PWM输出时可以调用read()函数读取剩余输出个数,对于标准的连续PWM输出read()函数没有意义:

intbuf;

intnread = read ( fd, &buf,sizeof(buf) );

if( nread < 0 )

{

perror( "read" );

exit(-1);

}

if( buf > 0 )

printf( "remaining count = %d\n", buf );

4、使用过程中也可以用write()函数停止PWM输出,我们也进行了封装:

intPWM_Stop(intfd )

{

intrc;

structpwm_config_infoconf;

memset( &conf, 0,sizeof(structpwm_config_info));

rc = write(fd, &conf,sizeof(structpwm_config_info));

returnrc;

}

用户直接调用此函数就可以停止PWM输出:

PWM_Stop( fd);

使用完之后关闭设备文件:

close(fd);

5、我们在驱动中也实现了对select()函数的支持,select()函数只在进行PWM输出计数时有意义,熟悉select()函数的用户可以在应用程序中使用select()函数等待PWM脉冲计数输出完成设置的个数,然后再进行其他操作,select()函数可以使用户不必为了等待PWM脉冲计数输出完成而阻塞应用程序,同时select()函数也可以使用户同时对PWM1和PWM2两个设备进行监控,在应用程序中的使用方法如下:

fd_set fdWrite;

structtimeval aTime;

intret;

while(1)

{

FD_ZERO(&fdWrite);

FD_SET(fd,&fdWrite);

aTime.tv_sec = 2;

aTime.tv_usec = 0;

ret = select ( fd+1, NULL, &fdWrite, NULL, &aTime );

if( ret<0 )

printf( "select, something wrong!\n " );

if( ret>0 )

{

if( FD_ISSET(fd, &fdWrite) )

{

printf ( "pwm out all complete!\n" );

/*PWM输出已经输出完设置个数,用户可以在此进行下一步操作*/

/*write(……) or something else*/

break;

}

}

}

Polarity= PWM_POLARITY_INVERTED(低电平有效), freq=5000, duty=60, count=3 时程序运行结果如下:

如果需要使用脉冲输出计数功能或者有任何疑问请和我们联系。

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

    关注

    88

    文章

    11628

    浏览量

    217976
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    36950
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    龙芯中科助力2025教育信息技术应用创新大赛成功举办

    2025年11月13日-15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术应用创新工作委员会、浙江高校信
    的头像 发表于 11-21 16:23 593次阅读

    OBOO鸥柏|信触摸一体机兆芯115寸Linux国产系统技术智造

    BOO鸥柏信触摸一体机:兆芯115寸Linux智造新标杆在信息技术应用创新浪潮中,【OBOO鸥柏】推出的信触摸一体机以其卓越性能和智能化设计,成为行业数字化转型的重要工具。这款搭载
    的头像 发表于 11-16 15:44 456次阅读
    OBOO鸥柏|信<b class='flag-5'>创</b>触摸一体机兆芯115寸<b class='flag-5'>Linux</b>国产系统<b class='flag-5'>技术</b>智造

    定时器实现步进电机的正反脉冲计

    的外部时钟模式 B 和挂起模式,实现步进电机的正反脉冲计数。 注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。 支持
    发表于 09-10 16:40

    由倍讯科技研制的CCLinkIE转ModbusTCP网关,可达成与脉冲计数器的连接

    本研究案例展示三菱可编程逻辑控制器(PLC)在工业自动化控制中的实际应用。应用时,将三菱PLC与脉冲计数器相连,实现控制与数据采集功能。采用CCLinkIE到ModbusTCP的网关转换方式,解决不
    的头像 发表于 08-26 16:58 485次阅读
    由倍讯科技研制的CCLinkIE转ModbusTCP网关,可达成与<b class='flag-5'>脉冲计数</b>器的连接

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 729次阅读

    Texas Instruments CC335x SimpleLink™双频Wi-Fi® 6配套IC数据手册

    ) 和Wi-Fi 5 (802.11ac)。这些CC335x是Texas Instruments的第10代连接组合芯片。因此,CC335x基于成熟的技术设计而成。这些器件非常适合配备运行TCP/IP的
    的头像 发表于 07-23 11:37 860次阅读
    Texas Instruments CC<b class='flag-5'>335x</b> SimpleLink™双频Wi-Fi® 6配套IC数据手册

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 560次阅读

    DEKRA德凯成为沙特通信和信息技术设备技术法规认证机构

    近日,DEKRA德凯成功获得沙特标准、计量和质量组织(SASO)认可,正式成为沙特通信和信息技术设备技术法规(Technical Regulation for Communications
    的头像 发表于 07-15 14:27 729次阅读

    开疆智能CCLinkIE转ModbusTCP网关连接脉冲计数器配置案例

    本案例是三菱PLC通过CCLinkIE转ModbusTCP网关连接脉冲计数器的配置案例,具体配置如下。 配置过程: 首先设置从站通讯参数 主要设置IP地址,工作模式以及端口号(Modbus默认502
    的头像 发表于 06-25 17:49 367次阅读
    开疆智能CCLinkIE转ModbusTCP网关连接<b class='flag-5'>脉冲计数</b>器配置案例

    经过光耦之后,脉冲计数功能为什么不能实现?

    设置PA0为普通定时器,复用推挽输出,但是发现信号经过光耦之后高电平不到2V,不能进行脉冲计数,如果设置成中断输入,高电平是3.3V,请问这是啥原因?现有的电路能否实现脉冲计数功能?
    发表于 06-17 06:08

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和实现数字主权的重任。简单来
    的头像 发表于 06-13 10:06 6308次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    增量式编码器原理介绍

    增量式编码器是一种将位移信息转换成周期性电信号,再将电信号转换成脉冲计数的装置。
    的头像 发表于 03-03 10:21 2036次阅读
    增量式编码器原理<b class='flag-5'>介绍</b>

    芯盛智能荣获2024年信息技术应用创新工作委员会卓越贡献成员单位

    日前,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称 “信工委会”)2024 年度总结座谈会于北京隆重举行。此次会议对在信工作中作出突出贡献的成员单位予以表彰。江苏
    的头像 发表于 01-20 09:56 929次阅读

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 768次阅读

    有方科技参编的信息技术团体标准发布

    近日,有方科技参编的《信息技术产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息技术产品供应链成熟度 共性指标 第2部分:技术掌控评价》《信息技术产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 901次阅读