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

    文章

    6084

    浏览量

    35164
收藏 人收藏

    评论

    相关推荐

    任意波形发生器的基本架构

    任意波形发生器(Arbitrary Waveform Generator,AWG)是从信号发生器演进过来的一款信号源,其架构的设计旨在提供高精度、高稳定性和灵活可编程的波形信号输出。
    的头像 发表于 10-18 16:29 172次阅读

    是德任意波形发生器应用领域

    在现代电子设计与测试领域,任意波形发生器(AWG)作为一种强大的信号源,扮演着不可或缺的角色。它能够生成各种复杂的模拟波形,满足从基础研究到复杂系统开发的广泛应用需求。是德科技作为全球领先的电子
    的头像 发表于 10-18 16:25 129次阅读
    是德<b class='flag-5'>任意</b>波形<b class='flag-5'>发生器</b>应用领域

    多通道任意发生器多路输出测试中的应用

    通道输出的灵活控制。 如何解决 : 方案:匹配一台多通道任意发生器。 测试方案搭配: 方案:四通道任意发生器 测试仪器准备:测试仪器准备: 四通道
    的头像 发表于 07-10 17:06 214次阅读
    多通道<b class='flag-5'>任意</b>波<b class='flag-5'>发生器</b><b class='flag-5'>多路</b>输出测试中的应用

    任意波形发生器和矢量信号发生器有什么区别

    在电子测试与测量领域,任意波形发生器(Arbitrary Waveform Generator,简称AWG)和矢量信号发生器是两种常见的信号源设备。它们各自具有独特的功能和应用场景,对于工程师
    的头像 发表于 05-30 16:02 2309次阅读

    什么是任意波形发生器

    , AWG)作为波形发生器的一种高级形式,以其高度的灵活性和精确度,为用户提供了前所未有的波形生成能力。本文将详细探讨任意波形发生器的定义、原理、关键技术、应用领域以及未来展望。
    的头像 发表于 05-30 15:53 845次阅读

    什么是任意波形发生器任意波形发生器是干什么用的?

    任意波形发生器是一种高度灵活的电子测试设备,它能够生成几乎任何类型的电信号波形。
    的头像 发表于 05-28 16:19 719次阅读

    任意波形发生器的使用方法

    任意波形发生器(Arbitrary Waveform Generator,简称AWG)是现代电子测试与测量领域中不可或缺的重要工具。它能够产生复杂、非周期性的波形信号,为电子系统的研发、测试和生产
    的头像 发表于 05-21 17:26 1130次阅读

    任意波形发生器的定义、特点及应用

    任意波形发生器(Arbitrary Waveform Generator,简称AWG)是电子测试与测量领域中的一种重要设备。随着电子技术的飞速发展,对信号源的需求也日益复杂和多样化。传统的信号源设备
    的头像 发表于 05-21 17:19 1093次阅读

    任意波形发生器如何输出电压

    任意波形发生器(Arbitrary Waveform Generator,简称AWG)是一种电子测试设备,它能够产生各种形状、频率和振幅的电压信号,以满足电子电路、自动控制以及教学实验等领域的多种
    的头像 发表于 05-15 15:38 669次阅读

    任意波形发生器与示波器怎么连接

    在电子测试领域中,任意波形发生器和示波器是两种非常重要的测试设备。任意波形发生器能够产生多种波形信号,用于模拟各种实际环境中的信号;而示波器则用于观测和分析这些信号的特征。本文将详细介
    的头像 发表于 05-15 15:38 840次阅读

    任意波形发生器的主要原理和关键技术

    任意波形发生器是现代电子测试与测量领域中不可或缺的一种仪器。它能够生成几乎任何用户自定义的波形,为科学研究、产品开发、教学实验等提供了极大的便利。本文将深入探讨任意波形发生器的主要原理
    的头像 发表于 05-15 14:50 1435次阅读

    函数发生器与示波器的调节方法一样吗

    函数发生器的核心部分是任意波形发生器,方波和脉冲的产生是在任意波形发生器的基础上增加一些外围电路
    发表于 02-08 07:30 580次阅读
    函数<b class='flag-5'>发生器</b>与示波器的调节方法一样吗

    浅谈任意波形发生器及通道合并功能

    、锯齿波等。同时,任意波形发生器还具备通道合并功能,可以将多个通道的波形合并输出。本文将从任意波形发生器的原理、应用场景和通道合并功能三个方面进行详细探讨。
    的头像 发表于 01-19 15:54 577次阅读

    任意发生器如何输出波形、带调制的信号?

    输出波形和带调制的信号,并详细介绍其工作原理和应用。 首先,任意发生器的基本工作原理是通过数字信号处理技术生成波形。它使用数字转换将输入的数字信号转换为模拟信号,然后通过滤波
    的头像 发表于 01-19 15:54 671次阅读

    信号发生器如何发出双脉冲

    信号发生器如何发出双脉冲? 信号发生器是一种用于产生各种信号波形的仪器。双脉冲信号是一种特殊的信号波形,由两个脉冲组成,通常用于测试和测量系
    的头像 发表于 12-21 15:03 1950次阅读