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

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

3天内不再提示

英创信息技术脉冲计数功能在ESM335x-Linux主板上的实现

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

扫码添加小助手

加入工程师交流群

1、综述

工业控制中,经常需要获取脉冲信号计数值、频率、周期、占空比等参数。英创嵌入式主板ESM335X系列 Linux系统现已实现外部输入脉冲信号的计数、频率、周期、占空比测量功能。

主要功能及技术指标如下:

1、读取一段时间内的外部输入脉冲信号计数值。

2、外部输入脉冲信号周期、有效脉宽测量。

3、根据测得周期计算外部输入脉冲信号瞬时频率。

4、根据测得计数值和测量时间间隔计算两次有效信号读取时间内外部输入脉冲信号重复频率(平均频率)。

5、测得误差200KHz左右时最大,瞬时频率误差不超过0.1%,重复频率误差不超过0.005%,占空比误差不超过0.05%,计数值测量准确无误差。

2、硬件连接

ESM335X系列嵌入式主板引出了3路PWM输出,其中两路(PWM1和PWM2)可以用来进行外界输入的脉冲信号计数、频率、占空比测量,相应的GPIO复用脚为GPIO6和GPIO7, 对应的引脚请参考光盘资料《ESMARC 335x工控主板数据手册》,用户使用脉冲波输入计数功能时可将外来信号接到上述两个GPIO管脚中的任意一个,并且地线与开发板接地引脚相连,然后在应用程序中获得计数值、频率、占空比。若用户启用了脉冲输入计数功能,则相应管脚不能再作为PWM脉冲输出或GPIO使用。

使用注意事项:

1、GPIO管脚最大只允许输入3.3V电压,超过将会导致开发板损坏!以开发板接地脚为基准,负值电压无效,不符合电压要求时需要设计缓冲放大电路。

2、输入脉冲波最大频率不应超过200KHz!超过之后由于硬件限制测量误差将急剧变大。

3、应用程序

为了简化用户使用脉冲计数功能,内部使用了原pwm输出模块,Linux系统内部没有增加新的设备节点,使用设备的计数功能(capture模式,后文简称cap),仍然需要使用pwm模式的设备节点进行模块功能设置。

(1)程序中使用到的结构体及常量定义

与内核直接交换数据读取设备原始测量值的结构体为cap_config_info,应用于read、write函数:

typedef struct cap_config_info

{

//以下为输入参数

unsigned intdwPolarity;//设置输入信号极性

unsigned intdwMaxFreq;//设置输入信号最大频率

//以下为输出参数,输入无效

unsigned longdwTimeUs;//两次读取之间的时间差

unsigned intdwCount;//两次读取之间的计数值

unsigned intdwPeriodNs;//读取时刻脉冲周期

unsigned intdwWidthNs;//读取时刻的脉冲有效脉宽

}CAP_INFO, *PCAP_INFO;

1、dwPolarity用于设置输入脉冲信号极性,可设为PWM_POLARITY_NORMAL和PWM_POLARITY_INVERTED,定义在pwm_api.h头文件中。

2、dwMaxFreq等于0时用于停止计数功能,dwMaxFreq不为零时用于设置输入信号最大频率,最大频率不应超过200KHz,输入单位为Hz。

3、dwTimeUs为输出参数,读取获得上次读操作(或使能操作)到本次读操作之间的时间差,单位为us。

4、dwCount为输出参数,读取获得上次读操作(或使能操作)到本次读操作之间的计数值,单位为 个。

5、dwPeriodNs为输出参数,读取获得本次读操作时脉冲信号周期, 单位为ns。

6、dwWidthNs为输出参数,读取获得本次读操作时脉冲信号有效脉冲宽度,单位为ns。

7、用户可根据dwPeriodNs和dwWidthNs计算占空比。

8、用户可根据dwPeriodNs计算读操作时的脉冲信号频率。

9、用户可根据dwTimeUs和dwCount计算两次读操作之间的输入信号的平均频率。

(2)函数及系统调用

在进行计数操作时,首先打开相应的设备节点/dev/em335x_pwmX,X为编号(1或者2),使能设备开始计数相关代码:

a)打开设备节点:

intnpwm = 1;

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! ", npwm);

return -1;

}

printf( "Open %s ", device );

b)使能cap模式:

int CAP_Start(int fd, unsigned int polarity, unsigned int maxfreq )

{

int rc;

struct cap_config_infoconf;

memset(&conf, 0 ,sizeof(struct cap_config_info))

conf.dwPolarity = polarity;

conf.dwMaxFreq = maxfreq;

rc = write(fd, &conf, sizeof(struct cap_config_info));

if ( rc == 0 )

return rc;

else

{

printf( " config for cap model failed! ");

exit(1);

}

}

用户只需要调用此函数即可使能脉冲信号计数功能,并且计数功能开始计数。也可自己设置参数调用write使能cap模式。如:

#include "pwm_api.h"

unsigned intpolarity = PWM_POLARITY_NORMAL;

unsigned intmaxfreq = 200000000;

CAP_Start( fd, polarity, maxfreq );

c)在计数过程中可以调用read函数或者我们提供的CAP_Read函数读取测量数值:

int CAP_Read(int fd, struct cap_config_info* conf )

{

printf ( "reading^^^^^^^ " );

int rc;

rc = read(fd, conf, sizeof(struct cap_config_info));

return rc;

}

用户可根据自己需要在任意时刻选择调用此函数或者直接调运read获取测量值。

根据测量值可以计算脉冲频率并转换单位,注意测得dwCount小于2时其他参数均无效:

doublePeriodUs;//单位us

doubleWidthUs;//单位us

doubleDuty;//单位%

intCount;//个数

doubleFreq;//单位Hz

doubleAVGFreq;//单位Hz

unsigned int TimeUs;//单位us

CAP_Read ( fd, &conf );

Count = conf.dwCount;

if(Count>1)

{

PeriodUs = (double)conf.dwPeriodNs/1000.0;//单位转换

WidthUs = (double)conf.dwWidthNs/1000.0;

Duty = (double)conf.dwWidthNs*100000.0/conf.dwPeriodNs;

Freq = CAP_CLK_FREQ/(double)conf.dwPeriodNs;

AVGFreq = (double)conf.dwCount*CAP_CLK_FREQ/(double)conf.dwTimeUs;

}

else

{

PeriodUs = 0;

WidthUs = 0;

Duty = 0;

Freq = 0;

AVGFreq = 0;

}

d)使用完成后需要关闭计数功能,同样可以自行设置参数调用write或者使用CAP_Stop,也可以直接使用close关闭设备节点同事停止使用计数功能:

int CAP_Stop(int fd )

{

printf ( "stopping^^^^^^^ " );

int rc;

struct cap_config_infoconf;

memset( &conf, 0, sizeof(struct pwm_config_info));

conf.dwMaxFreq = 0;

rc = write(fd, &conf, sizeof(struct cap_config_info));

return rc;

}

调用上述函数:

CAP_Stop( fd);

使用完成后需要关闭设备节点。

close(fd);

e)触发机制(选读):

如下图所示,在每一次上升沿或者下降沿处会触发硬件捕获功能,获得输入脉冲信号的参数并保存,应用程序中在任意时刻调用读操作得到的数据是最近一次上升沿或下降沿处的数据。此图中调用read1一之后调用read2,得到的计数值为2,时间差为(硬件触发2-硬件触发1)的时间差。用户使用时请注意输入信号有效时间段。所得时间不能作为两次读操作之间的时间差使用。如果要将读取的时间值作为两次读操作的时间值需要在前一次读操作后调用CAP_Start或直接用write函数传递相同参数清零硬件保存值。

4、实验测量

由于硬件的限制,测得瞬时频率、周期、占空比精度有限。硬件操作使用的时钟信号为100MHz,即周期、有效脉宽时间只能得到高于10ns的数值。平均频率的测量需要保证整个测量时间段内输入脉冲信号一直有脉冲输入!平均频率的误差整个测量范围内不超过10Hz。实验使用RIGOL DG1022 信号发生器作为外部脉冲信号源,可以调整信号周期占空比,设置一定时间内的脉冲个数。

频率测量(kHz):

输入 200.000 197.000 97.000 1.020
瞬间频率 200.000 196.850 96.993 1.020
平均频率 199.992 196.992 96.998 1.020

测得瞬时数据误差随频率增加而变大,具体数据可根据测量时间最小值10NS进行计算。

在150KHz时测量的不同占空比值如下表:

输入% 90.00 50.00 20.00 10.00
测得% 89.96 50.00 19.97 9.91

在100KHz时测量的不同占空比值如下表:

输入% 90.00 50.00 20.00 10.00
测得% 90.00 50.00 20.00 10.00

在100KHz时连续测量的1S内脉冲个数如下表(信号源输入个数设置模式上限50K个,通过设置信号源取不同输入值):

输入% 39 999 23 338 8 766 432
测得% 39 999 23 338 8 766 432

注:当频率升高时,系统高负荷运转,实际读取时间差变化加大,如果连续读取,读到的计数值要以读到的时间差为准进行数值判断,实际读取个数并无误差。

计数值在允许输入频率内无误差。

如果需要使用此功能或有任何疑问,请和我们联系。

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

    关注

    88

    文章

    11628

    浏览量

    217989
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    新时代的硬核基石:龙芯工控主板助力信产业新基建

    在数字技术重塑产业格局的今天,信产业已成为保障国家信息技术安全的核心战略。作为工业自动化系统的大脑,工控主板的自主可控程度直接决定信创新基建的稳固性。
    的头像 发表于 11-05 13:54 138次阅读

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

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

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

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

    智慧新核心,龙芯主板助力信体系再升级

    信息技术飞速发展的当下,信体系的自主可控与创新升级已成为国家战略层面的关键任务。作为信产业发展的重要基础硬件支撑,国产工控主板正发挥着日益重要的作用。
    的头像 发表于 08-11 09:14 566次阅读

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

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

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

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

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

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

    浪潮澎湃,国产主板迎来黄金时代!

    2025年7月,表示必须在2027年底前完成信100%替代,覆盖基础硬件、基础软件等核心领域。在信息技术应用创新浪潮席卷下,国产主板作为计算机系统的骨架,正从幕后走向台前。政策加持、技术
    的头像 发表于 07-21 14:00 364次阅读

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

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

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

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

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

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

    浪潮下,国产主板有什么新的发展机遇?

    信息技术应用创新浪潮的推动下,国产主板迎来了诸多新的发展机遇。信产业旨在实现信息技术领域的自主可控,这一战略目标为国产
    的头像 发表于 05-09 09:24 567次阅读
    信<b class='flag-5'>创</b>浪潮下,国产<b class='flag-5'>主板</b>有什么新的发展机遇?

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

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