91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

開發(fā)者分享 | 面向工業(yè)應(yīng)用的 HPM5E00 實(shí)踐:ADC、SDM 與 EtherCAT

先楫半導(dǎo)體HPMicro ? 2026-02-03 17:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概要

1、EUI的簡(jiǎn)單使用

2、16位ADC采樣實(shí)驗(yàn)

3、SDM對(duì)Σ-Δ調(diào)制器輸出數(shù)據(jù)采樣

4、外置SRAM模擬為U盤

5、EtherCat io示例實(shí)踐


一、EUI的簡(jiǎn)單使用


收到HPM5E00開發(fā)板后,由于SDK V1.9版本尚未支持該型號(hào),開發(fā)板只能暫時(shí)存放在包裝盒中,等待新版本發(fā)布。經(jīng)過一段時(shí)間的等待,終于在7月1日收到了SDK V1.10版本發(fā)布的通知。我立即下載了最新版本,打開start_gui工具后,欣喜地發(fā)現(xiàn)界面中已經(jīng)明確顯示支持HPM5E00evk開發(fā)板。這意味著現(xiàn)在可以正式開始基于這款開發(fā)板的探索和開發(fā)工作了。

既然開發(fā)板上最顯眼的就是LED數(shù)碼管,那就從它開始探索吧。

首先,我查閱了開發(fā)板的原理圖,確認(rèn)數(shù)碼管驅(qū)動(dòng)方式。接著在SDK的例程中尋找相關(guān)的驅(qū)動(dòng)代碼,發(fā)現(xiàn)官方文檔中已經(jīng)有了關(guān)于EUI的說明,而且已經(jīng)提供了EUI的示例,這正是控制數(shù)碼管顯示的基礎(chǔ)。

5714b1e2-00df-11f1-96ea-92fbcf53809c.png

我修改了示例代碼,試著讓數(shù)碼管顯示自增數(shù)字,即每500ms數(shù)字加一。

數(shù)碼管雖小,卻是一個(gè)很好的切入點(diǎn)。通過它,可以逐步熟悉這款芯片的EUI庫函數(shù),為更復(fù)雜的開發(fā)打下基礎(chǔ)。


1.1 EUI功能描述

用戶手冊(cè)中有關(guān)于EUI的描述

5730666c-00df-11f1-96ea-92fbcf53809c.png

可以理解EUI是用于嵌入式系統(tǒng)中的矩陣鍵盤或LED顯示控制,至于如何使用,使用好官方提供的庫函數(shù)即可。


1.2 軟件部分

使用start_gui工具從例程中生成工程

574dc55e-00df-11f1-96ea-92fbcf53809c.png

生成后,可以用SEGGER Embedded Studio 8.24打開工程,進(jìn)行修改

在main函數(shù)中,注釋掉原有的函數(shù),調(diào)用一個(gè)自己的函數(shù)

//led_disp_config();
segment_disp();

segment_disp內(nèi)容如下:

voidsegment_disp(void)
{
eui_scan_disp_data_tdisp_data;

disp_data.data_8x8[0]=s_disp_code_8_seg[(count/10000)%10];
disp_data.data_8x8[1]=s_disp_code_8_seg[(count/1000)%10];
disp_data.data_8x8[2]=s_disp_code_8_seg[(count/100)%10];
disp_data.data_8x8[3]=s_disp_code_8_seg[(count/10)%10];
disp_data.data_8x8[4]=s_disp_code_8_seg[count%10];
eui_set_scan_disp_data(BOARD_EUI,0,&disp_data);
count++;
}

就是每次調(diào)用函數(shù),count加一,并在5個(gè)數(shù)碼管上顯示各位數(shù)字

在while(1)中增加

segment_disp();
board_delay_ms(500);

每500ms,增加一次count

eui引腳初始化
init_eui_pins(BOARD_EUI);

其中#define BOARD_EUI HPM_EUI1

voidinit_eui_pins(EUI_Type*ptr)
{
if(ptr==HPM_EUI1){
HPM_IOC->PAD[IOC_PAD_PB26].FUNC_CTL=IOC_PB26_FUNC_CTL_EUI1_CK;
HPM_IOC->PAD[IOC_PAD_PB27].FUNC_CTL=IOC_PB27_FUNC_CTL_EUI1_SH;
HPM_IOC->PAD[IOC_PAD_PB28].FUNC_CTL=IOC_PB28_FUNC_CTL_EUI1_DI;
HPM_IOC->PAD[IOC_PAD_PB29].FUNC_CTL=IOC_PB29_FUNC_CTL_EUI1_DO;
}else{
;
}
}

576915de-00df-11f1-96ea-92fbcf53809c.png


eui初始化函數(shù)

staticvoidinit_eui_config(void)
{
eui_ctrl_config_tctrl_config;

eui_get_default_ctrl_config(BOARD_EUI,&ctrl_config);
ctrl_config.work_mode=eui_work_mode_8x8;
ctrl_config.clko_freq_khz=100;
ctrl_config.key_filter_ms=50;
ctrl_config.disp_data_invert=0xFF;
ctrl_config.scan_invert=0x00;
ctrl_config.dedicate_out_cfg=BOARD_EUI_DEDICATE_OUT_LINES;
ctrl_config.dedicate_in_cfg=0x0000;
eui_config_ctrl(BOARD_EUI,s_eui_clock_freq,&ctrl_config);

printf("clko_tm_us:%d, slot_tm_us:%d, hold_tm_us:%d, disp_tm_us:%d, filter_tm_us:%d\n\n",
eui_get_time_us(BOARD_EUI,s_eui_clock_freq,eui_clko_time),eui_get_time_us(BOARD_EUI,s_eui_clock_freq,eui_slot_time),
eui_get_time_us(BOARD_EUI,s_eui_clock_freq,eui_hold_time),eui_get_time_us(BOARD_EUI,s_eui_clock_freq,eui_disp_time),
eui_get_time_us(BOARD_EUI,s_eui_clock_freq,eui_filter_time));

eui_set_irq_enable(BOARD_EUI,eui_irq_area_mask);
intc_m_enable_irq_with_priority(BOARD_EUI_IRQ,1);

eui_set_enable(BOARD_EUI,true);
}


1.3 運(yùn)行效果

578527d8-00df-11f1-96ea-92fbcf53809c.jpg57a8305c-00df-11f1-96ea-92fbcf53809c.jpg


二、16位ADC采樣實(shí)驗(yàn)


HPM5E00支持高達(dá)16位的ADC采樣。
SDK中提供了ADC采樣示例位于:sdk_env_v1.10.0\hpm_sdk\samples\drivers\adc\adc16

本文對(duì)示例做適當(dāng)修改,將采集數(shù)據(jù)轉(zhuǎn)換為電壓并通過LED數(shù)碼管顯示。


2.1 生成工程

57c5e91c-00df-11f1-96ea-92fbcf53809c.png


2.2 軟件部分

1、初始化oneshot模式

voidinit_oneshot_config(void)
{
adc16_channel_config_tch_cfg;

/* get a default channel config */
adc16_get_channel_default_config(&ch_cfg);

/* initialize an ADC channel */
ch_cfg.ch =BOARD_APP_ADC16_CH_1;
ch_cfg.sample_cycle=APP_ADC16_CH_SAMPLE_CYCLE;

adc16_init_channel(BOARD_APP_ADC16_BASE,&ch_cfg);

adc16_set_nonblocking_read(BOARD_APP_ADC16_BASE);

#ifdefined(ADC_SOC_BUSMODE_ENABLE_CTRL_SUPPORT)&&ADC_SOC_BUSMODE_ENABLE_CTRL_SUPPORT
/* enable oneshot mode */
adc16_enable_oneshot_mode(BOARD_APP_ADC16_BASE);
#endif
}


2、EUI設(shè)備初始化及數(shù)碼管顯示電壓數(shù)值函數(shù)

#include"board.h"
#include"hpm_eui_drv.h"
#include"hpm_interrupt.h"
#include"hpm_clock_drv.h"
#include"common.h"


staticconstuint8_ts_disp_code_8_seg[]=BOARD_EUI_SEG_ENCODE_DATA;
staticuint32_ts_eui_clock_freq;

voidinit_eui_config(void)
{
eui_ctrl_config_tctrl_config;

clock_add_to_group(BOARD_EUI_CLOCK_NAME,0);
s_eui_clock_freq=clock_get_frequency(BOARD_EUI_CLOCK_NAME);

eui_get_default_ctrl_config(BOARD_EUI,&ctrl_config);
ctrl_config.work_mode=eui_work_mode_8x8;
ctrl_config.clko_freq_khz=100;
ctrl_config.key_filter_ms=50;
ctrl_config.disp_data_invert=0xFF;
ctrl_config.scan_invert=0x00;
ctrl_config.dedicate_out_cfg=BOARD_EUI_DEDICATE_OUT_LINES;
ctrl_config.dedicate_in_cfg=0x0000;
eui_config_ctrl(BOARD_EUI,s_eui_clock_freq,&ctrl_config);


/*
printf("clko_tm_us:%d, slot_tm_us:%d, hold_tm_us:%d, disp_tm_us:%d, filter_tm_us:%d\n\n",
eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_clko_time), eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_slot_time),
eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_hold_time), eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_disp_time),
eui_get_time_us(BOARD_EUI, s_eui_clock_freq, eui_filter_time));

eui_set_irq_enable(BOARD_EUI, eui_irq_area_mask);
intc_m_enable_irq_with_priority(BOARD_EUI_IRQ, 1);
*/
eui_set_enable(BOARD_EUI,true);
}


voidadc_led_disp(uint16_tval)
{
floatf_val=val*3.3/65535;
printf("f_val:%f\r\n",f_val);
eui_scan_disp_data_tdisp_data;
disp_data.data_8x8[0]=s_disp_code_8_seg[((uint16_t)f_val)%10]|BOARD_EUI_SEG_DP_BIT_MASK;
disp_data.data_8x8[1]=s_disp_code_8_seg[((uint16_t)(f_val*10))%10];
disp_data.data_8x8[2]=s_disp_code_8_seg[((uint16_t)(f_val*100))%10];
disp_data.data_8x8[3]=s_disp_code_8_seg[((uint16_t)(f_val*10000))%10];
disp_data.data_8x8[4]=s_disp_code_8_seg[((uint16_t)(f_val*100000))%10];
eui_set_scan_disp_data(BOARD_EUI,0,&disp_data);
}


3、oneshot采集處理,增加了調(diào)用adc_led_disp函數(shù)部分

voidoneshot_handler(void)
{
uint16_tresult;


if(adc16_get_oneshot_result(BOARD_APP_ADC16_BASE,BOARD_APP_ADC16_CH_1,&result)==status_success){
if(adc16_is_nonblocking_mode(BOARD_APP_ADC16_BASE)){
adc16_get_oneshot_result(BOARD_APP_ADC16_BASE,BOARD_APP_ADC16_CH_1,&result);
}
printf("Oneshot Mode - %s [channel %02d] - Result: 0x%04x\n",BOARD_APP_ADC16_NAME,BOARD_APP_ADC16_CH_1,result);
adc_led_disp(result);
}
board_delay_ms(500);
}


4、EUI初始化

init_eui_pins(BOARD_EUI);
init_eui_config();


5、采集通道修改

從原理圖上可以看出ADC對(duì)應(yīng)管腳PF18(ADC_IN11)
所以需要將BOARD_APP_ADC16_CH_1修改為11U

57d082fa-00df-11f1-96ea-92fbcf53809c.png57e8ddbe-00df-11f1-96ea-92fbcf53809c.png580311ca-00df-11f1-96ea-92fbcf53809c.png

修改
#defineBOARD_APP_ADC16_CH_1 (11U)


2.3 運(yùn)行效果

串口輸出

582140d2-00df-11f1-96ea-92fbcf53809c.png

在跳冒斷開的情況下,手觸碰jp7,可以改變PF18輸入電壓,可以看到數(shù)碼管顯示電壓隨之改變。

5831de38-00df-11f1-96ea-92fbcf53809c.gif


三、SDM對(duì)Σ-Δ調(diào)制器輸出數(shù)據(jù)采樣


3.1 引言

SDM(Sigma-Delta Modulator)是Σ?信號(hào)接收單元(Σ?Modulator)。
Σ-Δ電流采樣優(yōu)點(diǎn)是容易實(shí)現(xiàn)模擬隔離采樣:主回路的開關(guān)噪聲對(duì)控制電路干擾大,會(huì)影響系統(tǒng)穩(wěn)定性和控制精度,隔離Σ-Δ采樣可以實(shí)現(xiàn)控制與主回路隔離。隔離Σ-Δ轉(zhuǎn)換器是采用脈沖輸出方式傳輸信號(hào),通過數(shù)字隔離芯片的原理實(shí)現(xiàn)隔離,較模擬隔離成本低而且失真小。

HPM5E00提供SDM模塊具有以下特點(diǎn):
信號(hào)輸入接口
- 4組獨(dú)立的CLK和DAT信號(hào)輸入
- 每組CLK/DAT可獨(dú)立配置采樣模式
- 支持多種采樣模式:
- Mode 0: MCLK上升沿采樣
- Mode 1: MCLK上升沿和下降沿采樣
- Mode 2: Manchester編碼模式
- Mode 3: MCLK下降沿采樣
- Mode 4: 每2個(gè)MCLK上升沿采樣
- Mode 5: 每2個(gè)MCLK下降沿采樣

- 數(shù)據(jù)濾波器(PCM_CIC):

- 支持4種濾波器類型:
- Sinc1 (1階)
- Sinc2 (2階)
- Sinc3 (3階)
- SincFast (2階快速)

- 可配置過采樣率(1-256)
- 內(nèi)置16深度32bit寬度FIFO
- 支持同步采樣
- 支持掩碼控制(指定版本)
- 可選時(shí)間戳輸出功能(指定版本)

- 幅值檢測(cè)器(AMP_CIC):

- 同樣支持4種濾波器類型
- 獨(dú)立的幅值監(jiān)測(cè)通道
- 支持高/低門限檢測(cè)
- 支持過零檢測(cè)
- 可配置過采樣率(1-32)
- 實(shí)時(shí)幅值輸出

- 中斷支持:

- FIFO閾值中斷
- 數(shù)據(jù)溢出中斷
- 數(shù)據(jù)飽和中斷
- 幅值超限中斷

- 同步功能:

- 支持TRGMUX觸發(fā)輸入
- 支持TRGMUX觸發(fā)輸出


3.2 數(shù)據(jù)寄存器

開發(fā)板上已經(jīng)集成了NSI1306。NSI1306是一款高性能Σ-Δ調(diào)制器,基于NOVOSENSE電容隔離技術(shù),其輸出與輸入分離。該器件的線性差分輸入信號(hào)范圍為±50mV(滿量程±64mV)或±250mV范圍(滿量程±320mV)。差分輸入非常適合需要隔離的高壓應(yīng)用中基于分流電阻電流檢測(cè)。模擬輸入經(jīng)過放大,并由二階Σ-Δ調(diào)制器連續(xù)采樣,然后轉(zhuǎn)換為高速,單比特?cái)?shù)據(jù)流。輸出數(shù)據(jù)與外部時(shí)鐘同步,時(shí)鐘上升沿有效,頻率范圍為5MHz至21MHz。通過使用適當(dāng)?shù)臄?shù)字濾波器(例如sinc3濾波器)來抽取比特流,該器件可以在78.125KPS的條件下以20MHz的主時(shí)鐘實(shí)現(xiàn)16位分辨率和86dB/82.5dB信噪比(SNR)。故障安全功能包括輸入共模過壓檢測(cè)和VDD1缺失檢測(cè),簡(jiǎn)化了系統(tǒng)設(shè)計(jì)和診斷。

NSI1306管腳圖

5865d5ee-00df-11f1-96ea-92fbcf53809c.png

在CLKIN上升沿時(shí)通過DOUT采集數(shù)據(jù)

587cb304-00df-11f1-96ea-92fbcf53809c.png

開發(fā)板原理圖SDM連接圖

588f9118-00df-11f1-96ea-92fbcf53809c.png

SDM使用了PF16、PF17管腳

57e8ddbe-00df-11f1-96ea-92fbcf53809c.png

為了進(jìn)行實(shí)驗(yàn),外部接入如下分壓電路,用于測(cè)量電池分壓后的結(jié)果

58b6d02a-00df-11f1-96ea-92fbcf53809c.png

3.3 軟件部分

SDK示例中提供了四種工作模式演示:1. 輪詢模式采樣;2. 幅值檢測(cè)模式;3. 中斷模式采樣;4. 同步信號(hào)采樣模式
下面主要解讀輪詢模式采樣模式。

(1) SDM 模塊初始化

sdm_get_default_module_control(TEST_SDM,&control);
sdm_init_module(TEST_SDM,&control);

初始化 SDM 模塊,配置時(shí)鐘同步、數(shù)據(jù)同步。
(2) 通道配置

ch_config.sampling_mode=sdm_sampling_rising_clk_edge;
ch_config.enable_err_interrupt=false;
ch_config.enable_data_ready_interrupt=false;
sdm_config_channel_common_setting(TEST_SDM,TEST_SDM_CHANNEL,&ch_config);

采樣模式:在時(shí)鐘上升沿采樣(與 NSI1306 的 Σ-Δ 輸出同步)。
中斷配置:禁用錯(cuò)誤中斷和數(shù)據(jù)就緒中斷(使用輪詢模式)。

(3) 數(shù)字濾波器配置

filter_config.filter_type=sdm_filter_sinc3;
filter_config.oversampling_rate=256;
filter_config.ignore_invalid_samples=2;
sdm_config_channel_filter(TEST_SDM,TEST_SDM_CHANNEL,&filter_config);

濾波器類型:Sinc3 濾波器(適合 Σ-Δ 調(diào)制器,抑制高頻噪聲)。
過采樣率 (OSR):256(提高分辨率,但降低帶寬)。
無效樣本忽略:跳過前 2 個(gè)樣本(避免初始不穩(wěn)定數(shù)據(jù))。

(4) 數(shù)據(jù)采集與轉(zhuǎn)換

do{
stat=sdm_receive_filter_data(TEST_SDM,TEST_SDM_CHANNEL,true,(int8_t*)filter_result,TEST_DATA_COUNT,4U);
}while(stat!=status_success);

doublevoltage=sdm_data_value_to_voltage(&filter_config,filter_result[i]);

輪詢數(shù)據(jù):從 FIFO 讀取 32 位濾波后的數(shù)據(jù)(filter_result 為緩沖區(qū))。
電壓轉(zhuǎn)換:將原始數(shù)據(jù)轉(zhuǎn)換為實(shí)際電壓值。


3.4運(yùn)行效果

串口輸出采集結(jié)果:

58d9da66-00df-11f1-96ea-92fbcf53809c.png

采集結(jié)果約為14.74mV
根據(jù)分壓可以算出電池電壓:1010*14.74/10=1488.74mV≈1.49V


四、外置SRAM模擬為U盤


SDK中有PPI接口驅(qū)動(dòng)外置SRAM和TinyUSB模擬2個(gè)MSC大容量設(shè)備的例子。將2者結(jié)合可以將外置SRAM(256KB容量)虛擬為U盤。
原示例位于:
sdk_env_v1.10.0\hpm_sdk\samples\tinyusb\device\msc_dual_lun


4.1 軟件部分

1、main函數(shù)增加

clock_add_to_group(clock_ppi0,0);
init_ppi_pins();
init_sram_config();
init_pmp_for_ppi();
init_disk(0xF8000000);

init_ppi_pins為板級(jí)函數(shù),初始化PPI引腳以驅(qū)動(dòng)外置SRAM
init_sram_config、init_pmp_for_ppi函數(shù)均可在

sdk_env_v1.10.0\hpm_sdk\samples\drivers\ppi\async_sram示例中找到

init_disk為將msc_disk1指向外置SRAM區(qū)域,用來虛擬U盤空間,這個(gè)函數(shù)需要在外置SRAM就位后調(diào)用。
msc_disk1為指向數(shù)組的指針。
uint8_t (*msc_disk1)[DISK_BLOCK_SIZE];

init_disk函數(shù),diskinfo中有3個(gè)BLOCK(512字節(jié)*3)為FAT文件結(jié)構(gòu),需要拷貝到msc_disk1中,msc_disk1的其他部分需清零

voidinit_disk(uint32_tstart){

// Cast the start address to our disk pointer type
msc_disk1=(uint8_t(*)[DISK_BLOCK_SIZE])start;

// Copy the disk info to the disk memory
memcpy(msc_disk1,diskinfo,3*DISK_BLOCK_SIZE);
memset(msc_disk1+3,0,(512-3)*DISK_BLOCK_SIZE);
}


2、TinyUSB模擬MSC設(shè)備部分(msc_disk_dual.c)

diskinfo為FAT文件系統(tǒng)定義,對(duì)原示例進(jìn)行了修改。
diskinfo位于flash區(qū)域,非內(nèi)存,需要在外置SRAM就位后,copy到msc_disk1中
block2、block3相同為FAT12表

staticconstuint8_tdiskinfo[4][DISK_BLOCK_SIZE]=
{
{
0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,0x00,0x02,0x01,0x01,0x00,
0x02,0x10,0x00,0x00,0x02,0xF8,0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x29,0x78,0x56,0x00,0x00,'T','i','n','y','U',
'S','B',' ','1',' ',' ',0x46,0x41,0x54,0x31,0x32,0x20,0x20,0x20,0x00,0x00,

/* Zero up to 2 last bytes of FAT magic code */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA
},

/*------------- Block1: FAT12 Table -------------*/
{
0xF8,0xFF,0xFF,0xFF,0x0F,0x00,0x00// // first 2 entries must be F8FF, third entry is cluster end of readme file
},
/*------------- Block2: FAT12 Table -------------*/
{
0xF8,0xFF,0xFF,0xFF,0x0F,0x00,0x00// // first 2 entries must be F8FF, third entry is cluster end of readme file
},
}

tud_msc_capacity_cb函數(shù)
主要對(duì)lun進(jìn)行判斷,當(dāng)0時(shí)第一U盤,返回DISK_BLOCK_NUM*DISK_BLOCK_SIZE(32*512=16kb),當(dāng)1時(shí)第二U盤,返回512*512=256kb

voidtud_msc_capacity_cb(uint8_tlun,uint32_t*block_count,uint16_t*block_size)
{
(void)lun;
if(lun==0)
{
*block_count=DISK_BLOCK_NUM;
*block_size =DISK_BLOCK_SIZE;
}elseif(lun==1)
{
*block_count=512;
*block_size =DISK_BLOCK_SIZE;
}
printf("tud_msc_capacity_cb:%d\r\n",lun);
}

其他主要TingUSB接口函數(shù)未做修改
tud_msc_read10_cb
tud_msc_write10_cb
tud_msc_scsi_cb


4.2 運(yùn)行效果

1、插上外置板卡

SRAM位于外置板卡上

58e8b0f4-00df-11f1-96ea-92fbcf53809c.jpg


2、斷開JP6

根據(jù)SDK說明,為了使PPI工作,斷開JP6

58ffe1de-00df-11f1-96ea-92fbcf53809c.jpg


3、Type-C連接開發(fā)板J1(USB)和PC機(jī)

可以看到新識(shí)別了2個(gè)U盤,其中E盤為原示例中第一個(gè)U盤位做修改,第二U盤為外置SRAM模擬的U盤,容量大概256KB

59234f2a-00df-11f1-96ea-92fbcf53809c.png

E:的內(nèi)容,F(xiàn):是空的

59355648-00df-11f1-96ea-92fbcf53809c.png

設(shè)備管理中也可以看到這2個(gè)U盤

59463a30-00df-11f1-96ea-92fbcf53809c.png


五、EtherCat io示例實(shí)踐


對(duì)于一個(gè)陌生的技術(shù),按照示例按部就班地實(shí)現(xiàn)無疑是一個(gè)很多好的學(xué)習(xí)方法。

在完成本次實(shí)驗(yàn)前,筆者沒有接觸過EtherCat,所有行文中有錯(cuò)誤和不當(dāng)之處在所難免。

本文記錄EtherCat io示例運(yùn)行環(huán)境搭建及演示。

例程位于

sdk_env_v1.10.0\hpm_sdk\samples\ethercat\ecat_io


5.1 環(huán)境準(zhǔn)備

1、SSC ToolV5.13

因?yàn)镾DK中的配置采用的是V51.3,所以一定不要用其他版本。
因?yàn)锽eckhoff官網(wǎng)只給企業(yè)用戶提供下載用戶,因此花了一些時(shí)間找到一個(gè)下載地址:
https://gitcode.com/open-source-toolkit/a3990/?utm_source=tools_gitcode&index=top&type=href&
SSC Tool主要的作用是生成EtherCAT從站協(xié)議棧代碼。


2、TwinCAT 3

可以從倍福(中國(guó))官方下載,需要注冊(cè)
地址:

https://www.beckhoff.com.cn/zh-cn/support/download-finder/search-result/?c-1=26782567
下載中心中查找:TwinCAT 3 download | eXtended Automation Engineering (XAE) 1.4G
下載后文件為TC31-FULL-Setup.3.1.4024.67.exe,注意安裝時(shí)要以管理員身份運(yùn)行。

5957dbd2-00df-11f1-96ea-92fbcf53809c.png

TwinCAT在本例中主要起到EEPROM更新,控制EtherCAT從站的作用。


3、patch

示例中SSC協(xié)議棧代碼修改用到了patch工具,所以需要安裝patch,然后將patch路徑加到系統(tǒng)路徑中
patch下載地址:

https://gnuwin32.sourceforge.net/packages/patch.htm


5.2 示例構(gòu)建


1、用start_gui工具生成工程

596a6a72-00df-11f1-96ea-92fbcf53809c.png


2、SSC tool生成EtherCAT從站協(xié)議棧代碼

new->import->HPM_ECAT_IO_Config.xml

import后,SSC tool可以支持HPM代碼的生成

59830fa0-00df-11f1-96ea-92fbcf53809c.png

tool->import->Application->digital_io.xlsx

599b27f2-00df-11f1-96ea-92fbcf53809c.png

Project->Create new Slave ***生成從站協(xié)議棧代碼

59b1fff4-00df-11f1-96ea-92fbcf53809c.png


3、SSC協(xié)議棧代碼修改

sdk_env_v1.10.0\hpm_sdk\samples\ethercat\ecat_io下
運(yùn)行patch -d Src < ssc_pdi_mask.patch


4、用SEGGER Embedded Studio 8.24打開工程,編譯下載到開發(fā)板


5、TwinCAT工程設(shè)置

下面只列出一些主要工作,詳見gitee的官方SDK說明:https://gitee.com/hpmicro/hpm_sdk/tree/main/samples/ethercat/ecat_io

1)將ESI文件

(sdk_env_v1.10.0\hpm_sdk\samples\ethercat\ecat_io\SSC\ESIECAT-IO.xml )復(fù)制到TwinCAT的安裝目錄下(如: C:/TwinCAT/3.1/Config/Io/EtherCAT )。

2)運(yùn)行TwinCAT XAE Shell,打開TwinCAT軟件,選擇 File->New->project,新建工程

3)首次使用更新網(wǎng)卡驅(qū)動(dòng)

4)時(shí)鐘設(shè)置

管理員身份運(yùn)行

C:\TwinCAT\3.1\System\win8settick.bat

5)掃描設(shè)備

掃描設(shè)備前,開發(fā)板應(yīng)和PC機(jī)通過雙絞線連接

6)更新EEPROM

7) IO操作


5.3 軟件方面

59c7ea26-00df-11f1-96ea-92fbcf53809c.png59e4134a-00df-11f1-96ea-92fbcf53809c.png

APPL_Application函數(shù)被EtherCat中斷調(diào)用,執(zhí)行g(shù)pio輸入判斷和LED點(diǎn)亮操作

voidAPPL_Application(void)
{
InputCounter0x6000=APPL_GetDipSw();
APPL_SetLed((UINT32)OutputCounter0x7010);
}

LED點(diǎn)亮函數(shù)

voidAPPL_SetLed(UINT32 value)
{
UINT8 led0=((value&1)? BOARD_ECAT_OUT_ON_LEVEL:!BOARD_ECAT_OUT_ON_LEVEL);
UINT8 led1=((value&2)? BOARD_ECAT_OUT_ON_LEVEL:!BOARD_ECAT_OUT_ON_LEVEL);

gpio_write_pin(BOARD_ECAT_OUT1_GPIO,BOARD_ECAT_OUT1_GPIO_PORT_INDEX,BOARD_ECAT_OUT1_GPIO_PIN_INDEX,led0);
gpio_write_pin(BOARD_ECAT_OUT2_GPIO,BOARD_ECAT_OUT2_GPIO_PORT_INDEX,BOARD_ECAT_OUT2_GPIO_PIN_INDEX,led1);
}

gpio輸入判斷函數(shù)

UINT32APPL_GetDipSw(void)
{
UINT8 pin0_level=gpio_read_pin(BOARD_ECAT_IN1_GPIO,BOARD_ECAT_IN1_GPIO_PORT_INDEX,BOARD_ECAT_IN1_GPIO_PIN_INDEX);
UINT8 pin1_level=gpio_read_pin(BOARD_ECAT_IN2_GPIO,BOARD_ECAT_IN2_GPIO_PORT_INDEX,BOARD_ECAT_IN2_GPIO_PIN_INDEX);

UINT32 val=pin0_level<<0|pin1_level<<1;

returnval;
}


5.4 運(yùn)行

1、雙絞線連接PC機(jī)

59f998fa-00df-11f1-96ea-92fbcf53809c.jpg


2、ECAT交互區(qū)

5a0e7fea-00df-11f1-96ea-92fbcf53809c.jpg

示例運(yùn)行演示視頻:

https://www.bilibili.com/video/BV1YJGgzYEA6/?share_source=copy_web&vd_source=7258d8aa5251054c1d4c51d8c4cc2a02


文章來源:EEFocus

開發(fā)者ID:eefocus_3941691

原文鏈接:

https://www.eefocus.com/forum/home.php?mod=space&uid=378371&do=thread&view=me&from=space


/

/


以上內(nèi)容來自先楫開發(fā)者的原創(chuàng)分享。

我們始終相信開發(fā)者共創(chuàng)的力量。先楫社區(qū)堅(jiān)持開源共享、互惠互利,貼近每一個(gè)開發(fā)者,一步一個(gè)腳印,一點(diǎn)一滴積累,為成為更好的我們而不斷努力。


心之所向,銳意進(jìn)取,星辰大海,恣意成長(zhǎng)。


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

    關(guān)注

    100

    文章

    7511

    瀏覽量

    555868
  • 工業(yè)
    +關(guān)注

    關(guān)注

    3

    文章

    2356

    瀏覽量

    49188
  • SDM
    SDM
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    8063
  • ethercat
    +關(guān)注

    關(guān)注

    19

    文章

    1506

    瀏覽量

    45140
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    開發(fā)者分享 | 一次完整的 HPM EtherCAT 實(shí)戰(zhàn):環(huán)境、通信與極限測(cè)試

    概要1、vscode開發(fā)環(huán)境搭建2、EtherCAT與RK3562通訊測(cè)試3、編程IGH主站+HPM極限通訊測(cè)試4、ADC+EUI顯示測(cè)試5
    的頭像 發(fā)表于 02-09 16:32 ?1.8w次閱讀
    <b class='flag-5'>開發(fā)者</b>分享 | 一次完整的 <b class='flag-5'>HPM</b> <b class='flag-5'>EtherCAT</b> 實(shí)戰(zhàn):環(huán)境、通信與極限測(cè)試

    【強(qiáng)勢(shì)上新】HPM5E00EtherCAT運(yùn)動(dòng)控制MCU,先楫半導(dǎo)體再拓工業(yè)總線產(chǎn)品新版圖

    。該系列是繼HPM6E00后的又一重磅布局,標(biāo)志著先楫在EtherCAT工業(yè)通信領(lǐng)域的持續(xù)發(fā)力與技術(shù)深化。 HPM5E00系列 在延續(xù)HPM6E0
    發(fā)表于 05-07 14:07 ?1120次閱讀
    【強(qiáng)勢(shì)上新】<b class='flag-5'>HPM5E00</b>:<b class='flag-5'>EtherCAT</b>運(yùn)動(dòng)控制MCU,先楫半導(dǎo)體再拓<b class='flag-5'>工業(yè)</b>總線產(chǎn)品新版圖

    有獎(jiǎng)提問!先楫半導(dǎo)體HPM6E00系列新品發(fā)布會(huì)??!

    ,推出了集高性能運(yùn)動(dòng)控制和高實(shí)時(shí)性網(wǎng)絡(luò)互聯(lián)于一體的HPM6E00系列微控制器產(chǎn)品,同時(shí)分享使用這一系列芯片開發(fā)的運(yùn)動(dòng)控制器、驅(qū)動(dòng)器和傳感器等方案,滿足業(yè)界對(duì)拓展工業(yè)自動(dòng)化和各類型機(jī)器人平臺(tái)的需求,打造
    發(fā)表于 06-20 11:45

    先楫HPM6E00技術(shù)日 | 百人研討共話工業(yè)應(yīng)用創(chuàng)新及發(fā)展趨勢(shì)

    不僅讓與會(huì)對(duì)HPM6E00系列有了更深入的了解,也讓大家看到了先楫半導(dǎo)體在工業(yè)技術(shù)創(chuàng)新方面的巨大潛力。 先楫的合作伙伴深圳顯控科技有限公司、深圳市泰奇科智能技術(shù)有限公司、上海睿賽德電子科技
    發(fā)表于 09-02 10:14

    先輯半導(dǎo)體HPM6E00系列產(chǎn)品能用來做EtherCAT的主站嗎

    雖然明確說明了先輯半導(dǎo)體HPM6E00系列產(chǎn)品能用來做EtherCAT的從站,但它可以用來做主站嗎,還是說必須用其他芯片做主站呢
    發(fā)表于 03-16 10:16

    HPM5E00EVK,ecat_io例程,卡在DisableSyncManChannel函數(shù)

    向大家請(qǐng)教一個(gè)問題。如題, 硬件:HPM5E00EVK 開發(fā)環(huán)境:win10, embedded studio 軟件:sdk_env_v1.10.0,ethercat/ecat_io 硬件連接
    發(fā)表于 09-25 15:06

    HPM6E00EVKRevC開發(fā)板32位RISC-V架構(gòu)

    HPM6E00EVKRevC是先楫半導(dǎo)體(HPMicro)推出的基于HPM6E00系列RISC-V雙核MCU的開發(fā)板,主頻高達(dá) 600 MHz,片上集成 2MB RAM,適合用于工業(yè)
    發(fā)表于 10-29 09:41

    上新?|?HPM6E80高壓伺服EtherCAT驅(qū)動(dòng)器方案

    求遠(yuǎn)電子基于先楫半導(dǎo)體HPM6E80推出的HPM6E00_EtherCAT_MDR高壓伺服EtherCAT從站驅(qū)動(dòng)器方案,提供完善的軟硬件參考,可極大的降低產(chǎn)品開發(fā)難度,縮短產(chǎn)品上市時(shí)
    的頭像 發(fā)表于 02-08 13:38 ?1389次閱讀
    上新?|?<b class='flag-5'>HPM6E</b>80高壓伺服<b class='flag-5'>EtherCAT</b>驅(qū)動(dòng)器方案

    【強(qiáng)勢(shì)上新】HPM5E00EtherCAT運(yùn)動(dòng)控制MCU,先楫半導(dǎo)體再拓工業(yè)總線產(chǎn)品新版圖

    HPM6E00后的又一重磅布局,標(biāo)志著先楫在EtherCAT工業(yè)通信領(lǐng)域的持續(xù)發(fā)力與技術(shù)深化。HPM5E00系列在延續(xù)HPM6E00高算力基
    的頭像 發(fā)表于 05-06 11:09 ?1323次閱讀
    【強(qiáng)勢(shì)上新】<b class='flag-5'>HPM5E00</b>:<b class='flag-5'>EtherCAT</b>運(yùn)動(dòng)控制MCU,先楫半導(dǎo)體再拓<b class='flag-5'>工業(yè)</b>總線產(chǎn)品新版圖

    支持HPM6P00/HPM5E00系列!HPMicro Manufacturing Tool v0.6.0發(fā)布

    HPM6P00、HPM5E00系列SoC的燒寫及其它操作,新增HPM6E00、HPM5E00固件;新增verify-checksum及query-rtecomman
    的頭像 發(fā)表于 06-04 08:28 ?2018次閱讀
    支持<b class='flag-5'>HPM6P00</b>/<b class='flag-5'>HPM5E00</b>系列!HPMicro Manufacturing Tool v0.6.0發(fā)布

    重磅更新 | HPM_SDK v1.10.0 發(fā)布

    版本更新概況[New]增加HPM5E00系列MCU以及HPM5E00EVK支持增加flash_xip_hybrid構(gòu)建,在該模式下AXI_SRAM被用作FLASH前256KB的緩存,位于FLASH前256KB的代碼擁有RAM級(jí)別的訪問性能。1、新增/更新的中間件(Midd
    的頭像 發(fā)表于 07-02 15:07 ?1398次閱讀
    重磅更新 | <b class='flag-5'>HPM</b>_SDK v1.10.0 發(fā)布

    開發(fā)者分享 | 基于HPM5E31的LuckyCAT工業(yè)嵌入式開發(fā)

    、FOC等。前言我最初了解先楫是HPM6E00系列剛發(fā)布的時(shí)候,那時(shí)剛好在學(xué)習(xí)FOC,并了解到EtherCAT是主流的電機(jī)通信協(xié)議之一,HPM6E00在具有高性能
    的頭像 發(fā)表于 07-22 08:32 ?2021次閱讀
    <b class='flag-5'>開發(fā)者</b>分享 | 基于<b class='flag-5'>HPM5E</b>31的LuckyCAT<b class='flag-5'>工業(yè)</b>嵌入式<b class='flag-5'>開發(fā)</b>板

    開發(fā)者分享 | HPM5E-EC-DEV:基于HPM5E00EtherCAT開發(fā)板分享

    硬件相關(guān)的小項(xiàng)目,既能學(xué)習(xí)新東西,也能保持對(duì)技術(shù)的好奇心。前言今年五月,先楫半導(dǎo)體發(fā)布了新一代高性能EtherCAT運(yùn)動(dòng)控制MCU——HPM5E00。HPM5E00
    的頭像 發(fā)表于 10-29 10:15 ?1458次閱讀
    <b class='flag-5'>開發(fā)者</b>分享 | <b class='flag-5'>HPM5E</b>-EC-DEV:基于<b class='flag-5'>HPM5E00</b>的<b class='flag-5'>EtherCAT</b><b class='flag-5'>開發(fā)</b>板分享

    先楫解決方案 | 變頻器EtherCAT通訊卡+遠(yuǎn)程IO方案

    先楫半導(dǎo)體推出的基于HPM5E00系列的工業(yè)級(jí)變頻器EtherCAT通訊卡及遠(yuǎn)程IO解決方案,致力于幫助開發(fā)者在以HPM微控制器作為設(shè)備從站
    的頭像 發(fā)表于 12-12 10:35 ?390次閱讀
    先楫解決方案 | 變頻器<b class='flag-5'>EtherCAT</b>通訊卡+遠(yuǎn)程IO方案

    開發(fā)者分享 | 構(gòu)建完整控制系統(tǒng):HPM5E00 外設(shè)綜合應(yīng)用

    概要1、I2C傳感器驅(qū)動(dòng)2、UART自定義波形3、ADC采集模擬量4、modbus數(shù)據(jù)采集和設(shè)備控制5、motor電機(jī)步進(jìn)控制1、I2C傳感器驅(qū)動(dòng)1.1介紹眾所周知,在自動(dòng)化系統(tǒng)中,傳感器是一個(gè)
    的頭像 發(fā)表于 02-12 12:02 ?1208次閱讀
    <b class='flag-5'>開發(fā)者</b>分享 | 構(gòu)建完整控制系統(tǒng):<b class='flag-5'>HPM5E00</b> 外設(shè)綜合應(yīng)用