0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)EM9380多路任意脈沖發(fā)生器及應(yīng)用

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-01-16 10:12 ? 次閱讀

EM9380是面向?qū)崟r控制應(yīng)用的一款工控主板,這里所說的實時控制是指那些控制周期可能短至幾十微妙的控制應(yīng)用。EM9380通過板上獨立運(yùn)行的硬件協(xié)處理器(Cortex-M3),可很好的滿足這類應(yīng)用的需求。多路任意脈沖發(fā)生器,就是按照用戶預(yù)設(shè)的流程,按設(shè)定的時間間隔(最短25us),同時更新多路(最多8路)數(shù)字輸出的電平狀態(tài),從而構(gòu)成多路任意周期的脈沖信號輸出。多路任意脈沖發(fā)生器功能,可用于步進(jìn)電機(jī)的控制,在紡織、印刷設(shè)備中有廣泛的應(yīng)用。本文后續(xù)部分將主要介紹在應(yīng)用程序中實現(xiàn)任意脈沖發(fā)生器功能的流程。

接口硬件說明

EM9380中的GPIO0–GPIO15是由其硬件協(xié)處理器直接控制的,它們均可作為任意脈沖發(fā)生器的輸出,輸出的總數(shù)不超過8路。對選定作為意脈沖輸出的GPIO,首先需要設(shè)置成輸出模式。因為在EM9380上電或復(fù)位啟動后,GPIO0 – GPIO15均處于輸出狀態(tài)的,由于內(nèi)部100KΩ上拉,其電平均為高電平(管腳懸空時)。在實際應(yīng)用中,若需要脈沖輸出的初始電平為低電平,可在其管腳接10KΩ的下拉電阻至地。

接口軟件說明

為了操作GPIO0–GPIO15這組GPIO,首先需要打開硬件寫處理器的驅(qū)動程序,其設(shè)備文件名為”MCU2:”(注意是MCU2,而不是MCU1):
#include // 數(shù)據(jù)類型定義
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)

驅(qū)動程序MCU2通過DeviceIoControl,支持以下GPIO命令:
MCU_GENERIC_GPIO_OE // 輸出使能
MCU_GENERIC_GPIO_OD // 輸出禁止,作為數(shù)字輸入
MCU_GENERIC_GPIO_SET // 輸出高電平
MCU_GENERIC_GPIO_CLR // 輸出低電平
MCU_GENERIC_GPIO_PIN // 讀取輸入管腳電平狀態(tài)
MCU_GENERIC_GPIO_OF // 實時控制輸出流

其中前5個命令通過以下的數(shù)據(jù)結(jié)構(gòu)來設(shè)置相關(guān)參數(shù),從而實現(xiàn)GPIO的命令:
typedef struct
{
BYTE ucSize; // 本數(shù)據(jù)結(jié)構(gòu)大小 = 17字節(jié)
BYTE ucCmd; // GPIO命令碼:MCU_GENERIC_GPIO_XXX
DWORD dwPins; // 操作的管腳位
DWORD dwStatus; // 返回的管腳電平狀態(tài)
DWORD dwPeriod; // 實時控制周期,單位us;= 0: 常規(guī)功能
bool bFlashed; // 保存本配置作為啟動缺省功能
BYTE ucChkSum; // 校驗和
} MCU_GPIO_INFO, *PMCU_GPIO_INFO; // struct for GPIO

對于本應(yīng)用來說,首先需要把所選擇的GPIO設(shè)置為輸出模式,具體代碼如下:
MCU_GPIO_INFO Info; //定義結(jié)構(gòu)對象
memset(&Info, 0, sizeof(MCU_GPIO_INFO));//清零
//填寫所需的參數(shù)
Info.ucSize = sizeof(MCU_GPIO_INFO);
Info.ucCmd = MCU_GENERIC_GPIO_OE; //設(shè)置為輸出模式
Info.dwPins = GPIO3 | GPIO2 | GPIO1 | GPIO0; //設(shè)置4路脈沖輸出
// 生成chksum字節(jié)
Info.ucChkSum = ChkSum(&Info, sizeof(MCU_GPIO_INFO)-1);
// 調(diào)用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;
}

其次是設(shè)置脈沖的初始電平及脈沖的更新周期,其主要代碼如下:
memset(&Info, 0, sizeof(MCU_GPIO_INFO));//清零
//填寫所需的參數(shù)
Info.ucSize = sizeof(MCU_GPIO_INFO);
Info.ucCmd = MCU_GENERIC_GPIO_SET; //輸出的初始電平為高電平
//Info.ucCmd = MCU_GENERIC_GPIO_CLR; //輸出的初始電平為低電平
Info.dwPins = GPIO3 | GPIO2 | GPIO1 | GPIO0; //設(shè)置4路脈沖輸出
Info.dwPeriod = 25; //設(shè)置更新周期為25us

接著的生成ChkSum字節(jié)和調(diào)用DeviceIoControl操作和上一步是一樣的,不再贅述。

設(shè)置了更新周期后,硬件協(xié)處理器已處于脈沖輸出狀態(tài),只等驅(qū)動程序MCU2下傳相應(yīng)的數(shù)據(jù)流了。下傳的數(shù)據(jù)流將按以下數(shù)據(jù)結(jié)構(gòu)分包逐一下傳:
typedef struct
{
BYTE ucSize; //本數(shù)據(jù)結(jié)構(gòu)大小 = 64字節(jié)
BYTE ucCmd; // = MCU_GENERIC_GPIO_OF
BYTE ucRawDat[60]; // 更新數(shù)據(jù)字節(jié)
BYTE ucChkSum; //
} MCU_GPIO_FLOW, *PMCU_GPIO_FLOW; // struct for GPIO

每一個更新數(shù)據(jù)字節(jié)對應(yīng)著一次更新,所以一包數(shù)據(jù)可供60個更新周期使用。數(shù)據(jù)字節(jié)的格式是按GPIO的編號右對齊的,即設(shè)置的GPIO中,編號最小的那一路,其更新的bit為更新數(shù)據(jù)字節(jié)的LSB(D0),其他數(shù)據(jù)按編號遞增,向左排列至MSB(D7)。

下傳數(shù)據(jù)流,同樣需要做ChkSum,再調(diào)用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;
}

數(shù)據(jù)更新流程說明

對任意脈沖發(fā)生器功能,EM9380硬件協(xié)處理器內(nèi)部設(shè)置有一對256字節(jié)的乒乓Buffer。這樣驅(qū)動程序MCU2在下傳數(shù)據(jù)包時,每次可發(fā)送4個數(shù)據(jù)包(第一次下傳1個包即可),這樣可進(jìn)一步提高主CPU的工作效率。對25us更新周期來說,就表示驅(qū)動程序下傳數(shù)據(jù)的間隔為6ms。一旦第一包數(shù)據(jù)下傳至硬件協(xié)處理器,實質(zhì)性啟動任意脈沖波形輸出后,當(dāng)有空閑的乒乓Buffer時,硬件協(xié)處理器會立即通知驅(qū)動程序MCU2。應(yīng)用程序可設(shè)置專門線程獲取數(shù)據(jù)請求事件,從而啟動數(shù)據(jù)下傳。其基本的流程如下:

DWORD dwReturn = 0; // 返回狀態(tài),= 1:數(shù)據(jù)請求,= 0:超時
DWORD dwTimeout = 12; // 12ms,2倍正常下傳間隔
// 初始下傳一個數(shù)據(jù)包,然后進(jìn)入主循環(huán)。
// ......
// 主循環(huán):等待下傳數(shù)據(jù)請求
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)
{
// 下傳數(shù)據(jù)包(4包)......
dwReturn = 0; // 清標(biāo)志
}
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6083

    瀏覽量

    35115
收藏 人收藏

    評論

    相關(guān)推薦

    任意波形發(fā)生器的基本架構(gòu)

    任意波形發(fā)生器(Arbitrary Waveform Generator,AWG)是從信號發(fā)生器演進(jìn)過來的一款信號源,其架構(gòu)的設(shè)計旨在提供高精度、高穩(wěn)定性和靈活可編程的波形信號輸出。
    的頭像 發(fā)表于 10-18 16:29 ?117次閱讀

    是德任意波形發(fā)生器應(yīng)用領(lǐng)域

    在現(xiàn)代電子設(shè)計與測試領(lǐng)域,任意波形發(fā)生器(AWG)作為一種強(qiáng)大的信號源,扮演著不可或缺的角色。它能夠生成各種復(fù)雜的模擬波形,滿足從基礎(chǔ)研究到復(fù)雜系統(tǒng)開發(fā)的廣泛應(yīng)用需求。是德科技作為全球領(lǐng)先的電子
    的頭像 發(fā)表于 10-18 16:25 ?77次閱讀
    是德<b class='flag-5'>任意</b>波形<b class='flag-5'>發(fā)生器</b>應(yīng)用領(lǐng)域

    多通道任意發(fā)生器多路輸出測試中的應(yīng)用

    通道輸出的靈活控制。 如何解決 : 方案:匹配一臺多通道任意發(fā)生器。 測試方案搭配: 方案:四通道任意發(fā)生器 測試儀器準(zhǔn)備:測試儀器準(zhǔn)備: 四通道
    的頭像 發(fā)表于 07-10 17:06 ?196次閱讀
    多通道<b class='flag-5'>任意</b>波<b class='flag-5'>發(fā)生器</b><b class='flag-5'>多路</b>輸出測試中的應(yīng)用

    任意波形發(fā)生器和矢量信號發(fā)生器有什么區(qū)別

    在電子測試與測量領(lǐng)域,任意波形發(fā)生器(Arbitrary Waveform Generator,簡稱AWG)和矢量信號發(fā)生器是兩種常見的信號源設(shè)備。它們各自具有獨特的功能和應(yīng)用場景,對于工程師
    的頭像 發(fā)表于 05-30 16:02 ?1998次閱讀

    什么是任意波形發(fā)生器

    , AWG)作為波形發(fā)生器的一種高級形式,以其高度的靈活性和精確度,為用戶提供了前所未有的波形生成能力。本文將詳細(xì)探討任意波形發(fā)生器的定義、原理、關(guān)鍵技術(shù)、應(yīng)用領(lǐng)域以及未來展望。
    的頭像 發(fā)表于 05-30 15:53 ?747次閱讀

    什么是任意波形發(fā)生器任意波形發(fā)生器是干什么用的?

    任意波形發(fā)生器是一種高度靈活的電子測試設(shè)備,它能夠生成幾乎任何類型的電信號波形。
    的頭像 發(fā)表于 05-28 16:19 ?650次閱讀

    任意波形發(fā)生器的使用方法

    任意波形發(fā)生器(Arbitrary Waveform Generator,簡稱AWG)是現(xiàn)代電子測試與測量領(lǐng)域中不可或缺的重要工具。它能夠產(chǎn)生復(fù)雜、非周期性的波形信號,為電子系統(tǒng)的研發(fā)、測試和生產(chǎn)
    的頭像 發(fā)表于 05-21 17:26 ?952次閱讀

    任意波形發(fā)生器的定義、特點及應(yīng)用

    任意波形發(fā)生器(Arbitrary Waveform Generator,簡稱AWG)是電子測試與測量領(lǐng)域中的一種重要設(shè)備。隨著電子技術(shù)的飛速發(fā)展,對信號源的需求也日益復(fù)雜和多樣化。傳統(tǒng)的信號源設(shè)備
    的頭像 發(fā)表于 05-21 17:19 ?1037次閱讀

    任意波形發(fā)生器如何輸出電壓

    任意波形發(fā)生器(Arbitrary Waveform Generator,簡稱AWG)是一種電子測試設(shè)備,它能夠產(chǎn)生各種形狀、頻率和振幅的電壓信號,以滿足電子電路、自動控制以及教學(xué)實驗等領(lǐng)域的多種
    的頭像 發(fā)表于 05-15 15:38 ?615次閱讀

    任意波形發(fā)生器與示波器怎么連接

    在電子測試領(lǐng)域中,任意波形發(fā)生器和示波器是兩種非常重要的測試設(shè)備。任意波形發(fā)生器能夠產(chǎn)生多種波形信號,用于模擬各種實際環(huán)境中的信號;而示波器則用于觀測和分析這些信號的特征。本文將詳細(xì)介
    的頭像 發(fā)表于 05-15 15:38 ?732次閱讀

    任意波形發(fā)生器的主要原理和關(guān)鍵技術(shù)

    任意波形發(fā)生器是現(xiàn)代電子測試與測量領(lǐng)域中不可或缺的一種儀器。它能夠生成幾乎任何用戶自定義的波形,為科學(xué)研究、產(chǎn)品開發(fā)、教學(xué)實驗等提供了極大的便利。本文將深入探討任意波形發(fā)生器的主要原理
    的頭像 發(fā)表于 05-15 14:50 ?1367次閱讀

    函數(shù)發(fā)生器與示波器的調(diào)節(jié)方法一樣嗎

    函數(shù)發(fā)生器的核心部分是任意波形發(fā)生器,方波和脈沖的產(chǎn)生是在任意波形發(fā)生器的基礎(chǔ)上增加一些外圍電路
    發(fā)表于 02-08 07:30 ?540次閱讀
    函數(shù)<b class='flag-5'>發(fā)生器</b>與示波器的調(diào)節(jié)方法一樣嗎

    淺談任意波形發(fā)生器及通道合并功能

    、鋸齒波等。同時,任意波形發(fā)生器還具備通道合并功能,可以將多個通道的波形合并輸出。本文將從任意波形發(fā)生器的原理、應(yīng)用場景和通道合并功能三個方面進(jìn)行詳細(xì)探討。
    的頭像 發(fā)表于 01-19 15:54 ?534次閱讀

    任意發(fā)生器如何輸出波形、帶調(diào)制的信號?

    輸出波形和帶調(diào)制的信號,并詳細(xì)介紹其工作原理和應(yīng)用。 首先,任意發(fā)生器的基本工作原理是通過數(shù)字信號處理技術(shù)生成波形。它使用數(shù)字轉(zhuǎn)換將輸入的數(shù)字信號轉(zhuǎn)換為模擬信號,然后通過濾波
    的頭像 發(fā)表于 01-19 15:54 ?628次閱讀

    信號發(fā)生器如何發(fā)出雙脈沖

    信號發(fā)生器如何發(fā)出雙脈沖? 信號發(fā)生器是一種用于產(chǎn)生各種信號波形的儀器。雙脈沖信號是一種特殊的信號波形,由兩個脈沖組成,通常用于測試和測量系
    的頭像 發(fā)表于 12-21 15:03 ?1818次閱讀