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

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

3天内不再提示

英创信息技术EM9380多路任意脉冲发生器及应用

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

扫码添加小助手

加入工程师交流群

EM9380是面向实时控制应用的一款工控主板,这里所说的实时控制是指那些控制周期可能短至几十微妙的控制应用。EM9380通过板上独立运行的硬件协处理器(Cortex-M3),可很好的满足这类应用的需求。多路任意脉冲发生器,就是按照用户预设的流程,按设定的时间间隔(最短25us),同时更新多路(最多8路)数字输出的电平状态,从而构成多路任意周期的脉冲信号输出。多路任意脉冲发生器功能,可用于步进电机的控制,在纺织、印刷设备中有广泛的应用。本文后续部分将主要介绍在应用程序中实现任意脉冲发生器功能的流程。

接口硬件说明

EM9380中的GPIO0–GPIO15是由其硬件协处理器直接控制的,它们均可作为任意脉冲发生器的输出,输出的总数不超过8路。对选定作为意脉冲输出的GPIO,首先需要设置成输出模式。因为在EM9380上电或复位启动后,GPIO0 – GPIO15均处于输出状态的,由于内部100KΩ上拉,其电平均为高电平(管脚悬空时)。在实际应用中,若需要脉冲输出的初始电平为低电平,可在其管脚接10KΩ的下拉电阻至地。

接口软件说明

为了操作GPIO0–GPIO15这组GPIO,首先需要打开硬件写处理器的驱动程序,其设备文件名为”MCU2:”(注意是MCU2,而不是MCU1):
#include // 数据类型定义
HANDLE hMCU2;
hMCU2 = CreateFile(_T(“MCU2:”), // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
NULL, // security attributes (ignored)
OPEN_EXISTING, // creation disposition
FILE_FLAG_RANDOM_ACCESS, // flags/attributes
NULL); // template file (ignored)

驱动程序MCU2通过DeviceIoControl,支持以下GPIO命令:
MCU_GENERIC_GPIO_OE // 输出使能
MCU_GENERIC_GPIO_OD // 输出禁止,作为数字输入
MCU_GENERIC_GPIO_SET // 输出高电平
MCU_GENERIC_GPIO_CLR // 输出低电平
MCU_GENERIC_GPIO_PIN // 读取输入管脚电平状态
MCU_GENERIC_GPIO_OF // 实时控制输出流

其中前5个命令通过以下的数据结构来设置相关参数,从而实现GPIO的命令:
typedef struct
{
BYTE ucSize; // 本数据结构大小 = 17字节
BYTE ucCmd; // GPIO命令码:MCU_GENERIC_GPIO_XXX
DWORD dwPins; // 操作的管脚位
DWORD dwStatus; // 返回的管脚电平状态
DWORD dwPeriod; // 实时控制周期,单位us;= 0: 常规功能
bool bFlashed; // 保存本配置作为启动缺省功能
BYTE ucChkSum; // 校验和
} MCU_GPIO_INFO, *PMCU_GPIO_INFO; // struct for GPIO

对于本应用来说,首先需要把所选择的GPIO设置为输出模式,具体代码如下:
MCU_GPIO_INFO Info; //定义结构对象
memset(&Info, 0, sizeof(MCU_GPIO_INFO));//清零
//填写所需的参数
Info.ucSize = sizeof(MCU_GPIO_INFO);
Info.ucCmd = MCU_GENERIC_GPIO_OE; //设置为输出模式
Info.dwPins = GPIO3 | GPIO2 | GPIO1 | GPIO0; //设置4路脉冲输出
// 生成chksum字节
Info.ucChkSum = ChkSum(&Info, sizeof(MCU_GPIO_INFO)-1);
// 调用DeviceIoControl
if (!DeviceIoControl(hMCU2, // File handle to the driver
MCU_IOCTL_ACCESS, // I/O control code
&Info, // input buffer
sizeof(MCU_GPIO_INFO), // in buffer size
NULL, // out buffer
0, // out buffer size
NULL, // pointer to number of bytes returned
NULL)) // ignored (=NULL)
{
// 出错处理......
return FALSE;
}

其次是设置脉冲的初始电平及脉冲的更新周期,其主要代码如下:
memset(&Info, 0, sizeof(MCU_GPIO_INFO));//清零
//填写所需的参数
Info.ucSize = sizeof(MCU_GPIO_INFO);
Info.ucCmd = MCU_GENERIC_GPIO_SET; //输出的初始电平为高电平
//Info.ucCmd = MCU_GENERIC_GPIO_CLR; //输出的初始电平为低电平
Info.dwPins = GPIO3 | GPIO2 | GPIO1 | GPIO0; //设置4路脉冲输出
Info.dwPeriod = 25; //设置更新周期为25us

接着的生成ChkSum字节和调用DeviceIoControl操作和上一步是一样的,不再赘述。

设置了更新周期后,硬件协处理器已处于脉冲输出状态,只等驱动程序MCU2下传相应的数据流了。下传的数据流将按以下数据结构分包逐一下传:
typedef struct
{
BYTE ucSize; //本数据结构大小 = 64字节
BYTE ucCmd; // = MCU_GENERIC_GPIO_OF
BYTE ucRawDat[60]; // 更新数据字节
BYTE ucChkSum; //
} MCU_GPIO_FLOW, *PMCU_GPIO_FLOW; // struct for GPIO

每一个更新数据字节对应着一次更新,所以一包数据可供60个更新周期使用。数据字节的格式是按GPIO的编号右对齐的,即设置的GPIO中,编号最小的那一路,其更新的bit为更新数据字节的LSB(D0),其他数据按编号递增,向左排列至MSB(D7)。

下传数据流,同样需要做ChkSum,再调用DeviceIoControl:
if (!DeviceIoControl(hMCU2, //File handle to the driver
MCU_IOCTL_ACCESS, // I/O control code
&Flow, // input buffer
sizeof(MCU_GPIO_FLOW), // in buffer size
NULL, // out buffer
0, // out buffer size
NULL, // pointer to number of bytes returned
NULL)) // ignored (=NULL)
{
// 出错处理......
return FALSE;
}

数据更新流程说明

对任意脉冲发生器功能,EM9380硬件协处理器内部设置有一对256字节的乒乓Buffer。这样驱动程序MCU2在下传数据包时,每次可发送4个数据包(第一次下传1个包即可),这样可进一步提高主CPU的工作效率。对25us更新周期来说,就表示驱动程序下传数据的间隔为6ms。一旦第一包数据下传至硬件协处理器,实质性启动任意脉冲波形输出后,当有空闲的乒乓Buffer时,硬件协处理器会立即通知驱动程序MCU2。应用程序可设置专门线程获取数据请求事件,从而启动数据下传。其基本的流程如下:

DWORD dwReturn = 0; // 返回状态,= 1:数据请求,= 0:超时
DWORD dwTimeout = 12; // 12ms,2倍正常下传间隔
// 初始下传一个数据包,然后进入主循环。
// ......
// 主循环:等待下传数据请求
for(; ;)
{
if (!DeviceIoControl(hMCU2, // File handle to the driver
MCU_IOCTL_WAIT_FOR_DATA, // I/O control code
&dwTimeout, // input buffer
sizeof(DWORD), // in buffer size
NULL, // out buffer
0, // out buffer size
&dwReturn, // pointer to number of bytes returned
NULL)) // ignored (=NULL)
{
// 出错处理......
}
if(dwReturn)
{
// 下传数据包(4包)......
dwReturn = 0; // 清标志
}
}

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

    关注

    7

    文章

    6107

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    脉冲信号发生器

    发生器
    西安同步电子科技有限公司
    发布于 :2025年11月04日 17:24:04

    数字脉冲发生器介绍

    gps信号发生器
    西安同步电子科技有限公司
    发布于 :2025年10月28日 10:33:34

    标准脉冲发生器介绍

    gps信号发生器
    西安同步电子科技有限公司
    发布于 :2025年10月28日 10:32:04

    标杆之作:Agilent 33250A函数/任意波形发生器综览

    时间里风靡全球的经典机型。 一、Agilent 33250A:定义一代标准的全能信号源 Agilent 33250A是一款集函数发生器任意波形发生器脉冲
    的头像 发表于 10-13 15:08 340次阅读
    标杆之作:Agilent 33250A函数/<b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>综览

    信号发生器选型指南:函数、射频与任意波形的差异与适用场景

    在现代电子测试与测量领域,信号发生器是不可或缺的工具。面对市场上函数发生器、射频信号发生器任意波形发生器(AWG)三大类别,如何选择成为关
    的头像 发表于 09-23 18:01 675次阅读
    信号<b class='flag-5'>发生器</b>选型指南:函数、射频与<b class='flag-5'>任意</b>波形的差异与适用场景

    延迟脉冲信号发生器在激光触发领域的应用​

    在激光技术飞速发展的当下,高速延迟脉冲信号发生器作为激光系统中的关键部件,其重要性愈发凸显。SYN5610型脉冲信号发生器凭借出色性能,在激
    的头像 发表于 09-22 17:53 507次阅读

    安捷伦agilent 33250a 函数发生器任意波形发生器

    任意波形比以前更加容易 新agilent 33250a的性能几乎比同等价格的任何其它发生器高一倍。其80mhz带宽能适应各种各样的应用要求,它具有各种内置信号、自定义的任意波形和脉冲
    的头像 发表于 08-13 16:56 651次阅读
    安捷伦agilent  33250a 函数<b class='flag-5'>发生器</b><b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>

    轻科普——任意波形发生器(AWG)架构及指标解析

    引言任意波形发生器(ArbitraryWaveformGenerator,简称AWG)是由信号发生器发展而来的信号源设备。1988年,是德科技(KeysightTechnologies的前身)推出
    的头像 发表于 06-03 09:32 2908次阅读
    轻科普——<b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>(AWG)架构及指标解析

    Spectrum仪器推出通过以太网控制生成宽带信号的任意波形发生器

    波形发生器(AWG),其输出速率高达10 GS/s,分辨率为16位。新产品采用以太网连接技术,可通过电脑、笔记本电脑以及企业网络直接控制。此次发布的新产品主要服务于自动化和远程测试领域,尤其适用于直流至2.5GHz宽带的信号生成。 产品视频链接 新款
    的头像 发表于 05-14 14:29 488次阅读
    Spectrum仪器推出通过以太网控制生成宽带信号的<b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>

    任意波形发生器在电光调制、量子光学和脉冲激光二极管中的应用

    摘要现在,光学、光子学和激光技术应用越来越流行。最新一代的科学家们正在汽车、医疗、航空航天、国防、量子和激光传感等领域开辟新天地。这些领域的应用挑战不断增加。昊量光电的任意波形和函数发生器
    的头像 发表于 05-14 11:13 872次阅读
    <b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>在电光调制<b class='flag-5'>器</b>、量子光学和<b class='flag-5'>脉冲</b>激光二极管中的应用

    任意波形发生器在电光调制、量子光学和脉冲激光二极管中的应用

    现在,光学、光子学和激光技术应用越来越流行。新一代的科学家们正在汽车、医疗、航空航天、国防、量子和激光传感等领域开辟新天地。这些领域的应用挑战不断增加。昊量电光的任意波形和函数发生器
    的头像 发表于 04-09 16:59 790次阅读
    <b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>在电光调制<b class='flag-5'>器</b>、量子光学和<b class='flag-5'>脉冲</b>激光二极管中的应用

    是德33220A 函数任意波形发生器

    *任意波形发生器符合 LXI C 类标准 波形生成 *20 MHz 正弦波和方波 *斜波、三角波、噪声、带有可变边沿的脉冲生成、直流波形 *14 位、50 MSa/s、64 K 点的任意
    的头像 发表于 02-07 15:55 662次阅读

    泰克Tektronix AFG3021B 任意波形/函数发生器 函数信号源

    波形和脉冲发生器成为业内最实用的仪器。 杰出的性能和多功能性 用户可以选择12 种不同的标准波形。可以以高采样速率生成长度达128K的任意波形。在脉冲波形上,可以独立设置上升沿和下降沿
    的头像 发表于 12-26 09:18 711次阅读