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

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

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

使用ES32實(shí)現(xiàn)CANopen從機(jī)

東軟載波微電子 ? 來源:東軟載波微電子 ? 作者:東軟載波微電子 ? 2022-10-21 11:49 ? 次閱讀

工程師筆記 | 使用ES32實(shí)現(xiàn)CANopen從機(jī)

CANopen 是一種基于CAN的通信協(xié)議,已在工業(yè)領(lǐng)域得到了廣泛應(yīng)用。

CAN提供可靠的底層數(shù)據(jù)傳輸,CANopen提供標(biāo)準(zhǔn)化的應(yīng)用層協(xié)議。在CANopen協(xié)議中,每個(gè)CANopen設(shè)備都有一個(gè)對象字典。CANopen設(shè)備模型如下圖。對象字典描述了CANopen設(shè)備的所有行為和參數(shù)

d64766fa-50f0-11ed-a3b6-dac502259ad0.png

CanFestival是一套開源免費(fèi)的CANopen協(xié)議棧。它功能強(qiáng)大,且提供圖像化的對象字典編輯工具。RT-Thread已經(jīng)將CanFestival制作成軟件包。所以只需完善對應(yīng)驅(qū)動就能實(shí)現(xiàn)CANopen。

本文將要介紹:在 ES32 平臺上,基于 RT-Thread bsp 實(shí)現(xiàn) CANopen 從機(jī)的方法。

開啟本實(shí)驗(yàn)前,讀者需要首先了解:

?本實(shí)驗(yàn)基于RT-Thread 4.0.4版本,用戶可以從GitHub或Gitee獲?。?/p>

☆從GitHub下載RT-Thread 4.0.4:https://github.com/RT-Thread/rt-thread/tree/v4.0.4

☆從Gitee下載RT-Thread 4.0.4:https://gitee.com/rtthread/rt-thread/tree/v4.0.4

? 基礎(chǔ)的軟硬件環(huán)境配置和ES-CodeMaker使用方法。詳細(xì)請查看(點(diǎn)擊直接打開):工程師筆記 | ES-CodeMaker for RT-Thread (一)快速上手

? ES-CodeMaker for RT-Thread軟件的獲取方法,在文本的最后給出。

1. 硬件配置

本實(shí)驗(yàn)使用ZLG的USBCAN-E-P做為主站,ES-PDS-ES32F3696LX開發(fā)板和ES-PDS-CAN模塊作為從機(jī)。

▲CANopen主站卡

d682a6ca-50f0-11ed-a3b6-dac502259ad0.png

將ES-PDS-CAN模塊插入開發(fā)板CAN接口上。CAN模塊與開發(fā)板的連接:

ES-PDS-CAN模塊接口 ES-PDS-ES32F3696LX開發(fā)板管腳功能
VCC 電源VDD
GND 電源地GND
RX CAN0_RX(PB8)
TX CAN0_TX(PB9)

USBCAN-E-P CANopen主站卡與ES-PDS-CAN模塊的連接:

CANopen主站卡接口 ES-PDS-CAN模塊接口
CAN_H CAN_H
CAN_L CAN_L

ES-PDS-ES32F3696LX開發(fā)板上的跳線接口:

1 . 閉合JP4:使開發(fā)板為芯片供電。

2 . 閉合JP2、JP3:通過板載調(diào)試器將UART2轉(zhuǎn)為串口,方便調(diào)試程序。

2. 驅(qū)動配置

通過ES-CodeMaker可實(shí)現(xiàn)可視化的管腳功能配置

新建工程

選擇芯片ES32F3696LX,填寫工程名稱和路徑,選擇模板 pkg-example-canopen:

d76a318e-50f0-11ed-a3b6-dac502259ad0.png

開啟 UART2 功能和對應(yīng)的管腳作為RT-Thread的控制臺功能。

開啟 CAN0 的管腳: PB8,PB9 ,并選擇相應(yīng)的CAN功能,可以設(shè)置can設(shè)備的名稱。設(shè)備配置為:波特率1000000,使能失敗自動重發(fā),再同步跳轉(zhuǎn)寬度為4個(gè)時(shí)間片。

開啟 AD16C4T0 作為 HWTIMER ,并選擇相應(yīng)的功能,可以設(shè)置hwtimer設(shè)備的名稱。設(shè)備配置為:遞增計(jì)數(shù)模式。

d7861304-50f0-11ed-a3b6-dac502259ad0.png

3. RT-Thread配置

使用RT-Thread env工具配置RT-Thread的內(nèi)核、組件、軟件包和驅(qū)動。

1 . 在路徑rt-thread-v4.0.4spessemies32f369x中,打開ENV工具

2 . 輸入menuconfig配置工程

rt-thread 內(nèi)核配置

RT-Thread Kernal -> Kernel Device Object 進(jìn)行內(nèi)核設(shè)備對象設(shè)置。將控制臺的設(shè)備名改為“uart2”。

d7eba3c2-50f0-11ed-a3b6-dac502259ad0.png

rt-thread 軟件包 CanFestival 配置

RT-Thread online packages → miscellaneous packages開啟CanFestival 軟件包,選擇版本:v1.0.0。CanFestival是一個(gè)開源免費(fèi)的 CANopen 協(xié)議棧。

d80a5e02-50f0-11ed-a3b6-dac502259ad0.png

RT-Thread online packages → miscellaneous packages → CanFestival: A free software CANopen framework 打開配置界面。選擇can和hwtimer的設(shè)備名,及線程的優(yōu)先級。

d83cbd52-50f0-11ed-a3b6-dac502259ad0.png

UART 配置

Hardware Drivers Config -> On-chip Peripheral Drivers -> UART Drivers 開啟uart2,與RT-Thread控制臺通信。

d8811c54-50f0-11ed-a3b6-dac502259ad0.png

CAN 配置

Hardware Drivers Config -> On-chip Peripheral Drivers -> CAN Drivers 開啟can0,為CanFestival提供CAN驅(qū)動。

d8a9b254-50f0-11ed-a3b6-dac502259ad0.png

TIMER 配置

Hardware Drivers Config -> On-chip Peripheral Drivers -> HWTIMER Drivers 開啟timer0,為CanFestival提供timer驅(qū)動。

d8e76e82-50f0-11ed-a3b6-dac502259ad0.png

開啟CANopen用例

Hardware Drivers Config -> Pkgs Support Example -> Canopen -> USBCAN_E_P_EXAMPLE_SLAVE開啟CANopen從機(jī)例程。

d90aee3e-50f0-11ed-a3b6-dac502259ad0.png

配置好之后保存退出。

3 . 輸入pkgs --update命令更新軟件包。然后根據(jù) 6. 軟件包程序修改說明 優(yōu)化軟件包的部分接口。

4 . 輸入scons --target=mdk5命令生成keil5工程。(使用IAR等其他平臺指定--target=xxx即可)

5 . 使用Keil5打開工程,編譯并下載。

4. 實(shí)驗(yàn)說明

1 . 安裝CANopen對象字典編輯工具

CANopen協(xié)議的核心是對象字典。由于CANopen的對象字典較為復(fù)雜,不建議手寫對象字典。CANopen對象字典編輯工具安裝方法如下:

? 首先獲取資源:

☆從官方獲取python2.7:

https://www.python.org/downloads/release/python-2715/

☆從官方獲取wxPython2.8:

https://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/

☆2種獲取CANopen源碼的方式:

a . 從官方獲取CANopen源碼:

https://bitbucket.org/Mongo/canfestival-3-asc

b . 從百度網(wǎng)盤獲取CANopen源碼:

https://pan.baidu.com/s/1b9K0vIzu_EVWK1BLURJEPQ 提取碼為:j2w2

資源獲取成功后:

a . 安裝python2.7。

b . 安裝wxPython2.8。

c . 解壓CANopen源碼,獲得Mongo-canfestival-3-asc-1a25f5151a8d文件夾。

d . 解壓Mongo-canfestival-3-asc-1a25f5151a8dobjdictgenGnosis_Utils-current.tar.gz,獲得Gnosis_Utils-1.2.2.tar。

解壓Gnosis_Utils-1.2.2.tar后,獲得Gnosis_Utils-1.2.2文件夾。

e . 將 Gnosis_Utils-1.2.2gnosis文件夾,復(fù)制到 Mongo-canfestival-3-asc-1a25f5151a8dobjdictgen路徑下。如下圖所示:

d95e85bc-50f0-11ed-a3b6-dac502259ad0.png

f . 雙擊 Mongo-canfestival-...objdictgenobjdictedit.py。

如果安裝正常,則會出現(xiàn)以下的界面:

d9851db2-50f0-11ed-a3b6-dac502259ad0.png

2 . CANopen對象字典編輯工具的使用方法如下:

a . 點(diǎn)擊左上角的按鈕“文件”,可新建或打開對象字典。

d99da7ec-50f0-11ed-a3b6-dac502259ad0.png

打開bsp中的對象字典。

d9b70692-50f0-11ed-a3b6-dac502259ad0.png

打開對象字典成功后,如下圖所示:

d9dec97a-50f0-11ed-a3b6-dac502259ad0.png

b . 點(diǎn)擊選項(xiàng)后,可編輯字典,如下圖所示:

d9f645d2-50f0-11ed-a3b6-dac502259ad0.png

CANopen對象字典各索引范圍的描述如下圖。

da18038e-50f0-11ed-a3b6-dac502259ad0.png

對象字典索引0x2000~0x5FFF的制造商特定自協(xié)議區(qū),常被用于存放應(yīng)用數(shù)據(jù)。

如下圖所示:可以直接通過編輯工具修改對象字典索引0x2100的數(shù)據(jù)。

da656d72-50f0-11ed-a3b6-dac502259ad0.png

c . 將CANopen對象字典輸出的方法如下:

da831ab6-50f0-11ed-a3b6-dac502259ad0.png

點(diǎn)擊【建立字典】后,會生成.c和.h對象字典文件。如果當(dāng)前打開的是工程內(nèi)的.od文件,則會更新工程中的對象字典。

點(diǎn)擊【導(dǎo)出成EDS文件】后,會生成eds文件。CANopen主機(jī)需要用eds文件解析從機(jī)。

4 . CANopen從機(jī)程序流程。

在CANopen中,PDO為過程數(shù)據(jù)對象協(xié)議,可用于在多節(jié)點(diǎn)之間交換即時(shí)數(shù)據(jù)。PDO被分為RPDO和TPDO。RPDO為從機(jī)接收數(shù)據(jù)。TPDO為從機(jī)發(fā)送數(shù)據(jù)。

在用例從機(jī)對象字典中,有4個(gè)RPDO,4個(gè)TPDO。在下圖中N的取值為1~4。

daa5d3b2-50f0-11ed-a3b6-dac502259ad0.png

如上圖所示,應(yīng)用層CANopen從機(jī)程序流程為:

a . 初始化底層驅(qū)動。初始化CANopen,并導(dǎo)入對象字典。

b . 從機(jī)進(jìn)入預(yù)操作狀態(tài)后,不斷讀寫對象字典。

注意:因?yàn)殡p方的時(shí)鐘相互獨(dú)立,存在誤差。所以加速了當(dāng)前使用的硬件定時(shí)器,使從機(jī)能及時(shí)響應(yīng)主機(jī)。

5 . CANopen主站卡環(huán)境安裝。

本實(shí)驗(yàn)用 USBCAN-E-P CANopen主站卡作為CANopen主機(jī),開發(fā)板作為CANopen從機(jī)。

? 從官網(wǎng)獲取 USBCAN-E-P 資料

☆ 獲取USBCAN-E-P 的PC端上位機(jī)軟件安裝包:

https://www.zlg.cn/data/upload/software/Can/CANopen_Setup.rar

☆ 獲取USBCAN-E-P用戶手冊:

https://www.zlg.cn/data/upload/software/Can/USBCAN_E_P_CANOpen_um.pdf

☆獲取USBCAN-E-P驅(qū)動:

https://www.zlg.cn/data/upload/software/Can/USBCAN_E_P_drive.zip

PC端上位機(jī)軟件安裝完成后,獲得軟件 CANManager for CANopen :

dac17afe-50f0-11ed-a3b6-dac502259ad0.png

然后根據(jù)用戶手冊,安裝USBCAN-E-P驅(qū)動。

5. 實(shí)驗(yàn)現(xiàn)象

1 .將CANopen從機(jī)程序下載后,RT-Thead控制臺輸出如下信息

dadbde12-50f0-11ed-a3b6-dac502259ad0.png

2 . 然后打開CANManager for CANopen。

daf22d66-50f0-11ed-a3b6-dac502259ad0.png

導(dǎo)入CANopen從機(jī)的eds。

db114afc-50f0-11ed-a3b6-dac502259ad0.png

選擇從機(jī)用例的eds文件。文件路徑為:driverspkg_support_examplecanopenUSBCAN-E-P-example-slaveapp_od.eds

db384a3a-50f0-11ed-a3b6-dac502259ad0.png

點(diǎn)擊搜索,開始搜索從機(jī),如下圖所示:

db4b82ee-50f0-11ed-a3b6-dac502259ad0.png

搜索到從機(jī)后,點(diǎn)擊右下角的關(guān)閉按鈕后,如下圖所示:

db657258-50f0-11ed-a3b6-dac502259ad0.png

3 . 點(diǎn)擊左上角的啟動后,設(shè)置如圖:

db8197ee-50f0-11ed-a3b6-dac502259ad0.png

啟動后,可觀察到現(xiàn)象:主機(jī)收到從機(jī)的TPDO中,紅色框中的數(shù)據(jù)在不斷循環(huán)。藍(lán)色框中的數(shù)據(jù)不變,為字典中的初始值。與程序流程圖邏輯一致。

dba111aa-50f0-11ed-a3b6-dac502259ad0.png

點(diǎn)擊RPDO1的手動發(fā)送后。TPDO1的后4字節(jié)數(shù)據(jù)與RPDO1的后4字節(jié)數(shù)據(jù)一致。

dbf1ef3a-50f0-11ed-a3b6-dac502259ad0.png

修改RPDO2后4字節(jié)數(shù)據(jù)后,點(diǎn)擊RPDO2的手動發(fā)送后。TPDO2的后4字節(jié)數(shù)據(jù)與RPDO2的后4字節(jié)數(shù)據(jù)一致。

dc638a00-50f0-11ed-a3b6-dac502259ad0.png

4 . 實(shí)驗(yàn)完成后,RT-Thread控制臺輸出如下信息:

dcc2dc26-50f0-11ed-a3b6-dac502259ad0.png

如果主機(jī)和從機(jī)幾乎同時(shí)往CAN總線發(fā)送數(shù)據(jù),就會有 CAN通訊超載 的緊急報(bào)文。

receivedEMCYmessage.Node:08ErrorCode:8110ErrorRegister:11

CANopen緊急報(bào)文錯(cuò)誤代碼說明如下:

dcd42bac-50f0-11ed-a3b6-dac502259ad0.png

6. 軟件包程序修改說明

1 . CanFestival 軟件包修改(版本:v1.0.0)

該軟件包有3處需要修改:

軟件包第1處修改

修改原因:can過濾器控制塊配置不正確。

a . 宏RT_CAN_FILTER_ITEM_INIT,會將過濾表號設(shè)置為-1。如果過濾表號為-1,則表示:不指定過濾表號,該過濾器控制塊不會被初始化。這會導(dǎo)致回調(diào)函數(shù)無效。所以需要修改過濾表號:將過濾表號修改為 0。

b . 適配rt-thread的驅(qū)動框架。將過濾表模式修改為0。

具體修改如下:(修改前的代碼 + 修改后的代碼)

將 packagesCanFestival-v1.0.0srccan_rtthread.c 進(jìn)行更改。can_rtthread.c的部分內(nèi)容如下:

修改前:

structrt_can_filter_itemfilter1item[1]=
{
RT_CAN_FILTER_ITEM_INIT(0x180,0,0,1,0,can1ind,&can_data.event)
};

修改后:

structrt_can_filter_itemfilter1item[1]=
{
{
.id=0x180,
.ide=0,
.rtr=0,
.mode=0,/*過濾表模式*/
.mask=0,
.hdr=0,/*過濾表號*/
.ind=can1ind,
.args=&can_data.event
}
};

軟件包第2處修改

修改原因:部分符號定義沖突。在ES32底層庫中,TRUE 和 FALSE會被定義為枚舉。在軟件包中,TRUE 和 FALSE會被定義為宏。

具體修改如下:

在 packagesCanFestival-v1.0.0incdef.h 的#define __def_h__的下方加入頭文件:

#include"type.h"

軟件包第3處修改

修改原因:刪除非必要的文件。

具體修改如下:

packagesCanFestival-v1.0.0src imer_rtthread.c

#include

7. 如何獲取 ES-CodeMaker for RT-Thread?

審核編輯:湯梓紅

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

    關(guān)注

    28

    文章

    882

    瀏覽量

    40306
  • CANopen
    +關(guān)注

    關(guān)注

    8

    文章

    253

    瀏覽量

    43586
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5050

    瀏覽量

    97455

原文標(biāo)題:工程師筆記 | 使用ES32實(shí)現(xiàn)CANopen從機(jī)

文章出處:【微信號:東軟載波微電子,微信公眾號:東軟載波微電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    工程師筆記 | ES32 SDK 支持的 RTOS

    東軟載波微電子 ES32 系列產(chǎn)品的 SDK 已經(jīng)支持 FreeRTOS、RT-Thread-nano和 Huawei LiteOS 三款 RTOS,并提供了豐富的內(nèi)核用例。
    發(fā)表于 11-03 10:15 ?2335次閱讀
    工程師筆記 | <b class='flag-5'>ES32</b> SDK 支持的 RTOS

    ES-LinkII 可以用于多款MCU開發(fā)的工具

    ES-LinkII 調(diào)試燒錄器家族支持東軟載波微電子 ES7P、ES8P、ES8H、ES32 系列 MCU 產(chǎn)品的調(diào)試和燒錄。其支持多種 I
    發(fā)表于 09-23 08:46

    基于STM32的CANopen通訊協(xié)議的實(shí)現(xiàn)

    1_【基于STM32的CANopen通訊協(xié)議的實(shí)現(xiàn)CANopen分為三部分: 1、通信部分:PDO協(xié)議,SDO協(xié)議,NMT協(xié)議,特殊功能對象 2、對象字典:數(shù)據(jù)類型、通信對象、應(yīng)用對象 3
    發(fā)表于 08-20 08:12

    如何使用STM32單片機(jī)開發(fā)一款CANopen產(chǎn)品

    一、前言我寫CANopen系列博文的初衷是分享如何使用STM32單片機(jī)開發(fā)一款CANopen產(chǎn)品,所謂實(shí)戰(zhàn)為主,理論為輔。光看CANopen協(xié)議的理論是很枯燥的,而且無論看多少遍都無法
    發(fā)表于 02-15 07:45

    基于STM32F103單片機(jī)CANopen實(shí)現(xiàn)

    基于STM32F103系列單片機(jī)CANopen主從機(jī)PDO&SDO例程這是一個(gè)CANopen協(xié)議通信例程,硬件平臺為STM32F103單片機(jī)
    發(fā)表于 03-01 06:07

    工業(yè)通訊中CANOPEN轉(zhuǎn)EtherCAT的轉(zhuǎn)換

    呈現(xiàn)給EtherCAT主PLC/控制器,這使得CANOPEN到EtherCAT的轉(zhuǎn)換變得更加容易和便捷。同時(shí),該網(wǎng)關(guān)還具有易于配置和使用的界面,使得用戶可以更加輕松地實(shí)現(xiàn)網(wǎng)絡(luò)之間的數(shù)據(jù)交互。 然而
    發(fā)表于 12-12 11:31

    CANopen協(xié)議講座(4)之CANopen站設(shè)備及其應(yīng)用

    CANopen協(xié)議講座(4)之CANopen站設(shè)備及其應(yīng)用 由于可靠性、實(shí)時(shí)性、低成本、抗干擾性、兼容能力等多個(gè)方面的優(yōu)勢,CAN-bus與其高層協(xié)議CANopen已成為了車輛數(shù)據(jù)
    發(fā)表于 03-26 17:36 ?87次下載

    CANopen協(xié)議講座(5)之CANopen站模塊(XGa

    CANopen協(xié)議講座(5)之CANopen站模塊(XGate-COP10) CANopen協(xié)議是在20世紀(jì)90年代末,由CiA組織(CAN-in-Automation)在CAL(
    發(fā)表于 03-26 17:38 ?82次下載

    CANopen協(xié)議講座(6)之CANopen站模塊(Tin

    CANopen協(xié)議講座(6)之CANopen站模塊(TinyARM) 隨著國內(nèi)電力事業(yè)前所未有的發(fā)展,電力資源的需求也迅速增長。為保證電網(wǎng)的安全運(yùn)行和了解電網(wǎng)運(yùn)行的狀況
    發(fā)表于 03-26 17:40 ?106次下載

    基于CANopen協(xié)議站設(shè)備快速實(shí)現(xiàn)方法

    基于CANopen協(xié)議站設(shè)備快速實(shí)現(xiàn)方法 CANopen協(xié)議作為CAN總線的應(yīng)用層協(xié)議,擁有復(fù)雜的網(wǎng)絡(luò)管理、實(shí)時(shí)過程數(shù)據(jù)對象、服務(wù)數(shù)據(jù)對象、預(yù)定義連接和特殊功能對象等基
    發(fā)表于 05-23 12:03 ?1622次閱讀
    基于<b class='flag-5'>CANopen</b>協(xié)議<b class='flag-5'>從</b>站設(shè)備快速<b class='flag-5'>實(shí)現(xiàn)</b>方法

    ES32 USB協(xié)議棧用戶指南

    電子發(fā)燒友網(wǎng)站提供《ES32 USB協(xié)議棧用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-22 09:45 ?0次下載
    <b class='flag-5'>ES32</b> USB協(xié)議棧用戶指南

    ES32 USB協(xié)議棧例程用戶手冊

    電子發(fā)燒友網(wǎng)站提供《ES32 USB協(xié)議棧例程用戶手冊.pdf》資料免費(fèi)下載
    發(fā)表于 09-22 09:43 ?0次下載
    <b class='flag-5'>ES32</b> USB協(xié)議棧例程用戶手冊

    CANopen IO耦合器功能的實(shí)現(xiàn)

    canopen分布式io是集成有CANBUS接口的IO耦合器,它可以通過CANopen總線與支持CANopen通訊的PLC相連,充當(dāng)PLC的站工具。
    的頭像 發(fā)表于 10-26 16:50 ?1187次閱讀

    哪些設(shè)備屬于canopen 站范疇?

    有哪些設(shè)備屬于canopen 站的范疇呢?我們簡單的舉幾個(gè): 1、CANopen通訊的IO耦合器,有組合式結(jié)構(gòu)的也有一體式結(jié)構(gòu)的,它們集成有CANBUS接口和若干個(gè)IO接口,可以通過CANo
    的頭像 發(fā)表于 03-10 23:35 ?662次閱讀

    CANopen系列】CANopen站為什么總不上傳PDO報(bào)文?

    CANopen網(wǎng)絡(luò)中無法獲取站的TPDO數(shù)據(jù)?本文將為您解析可能的原因及解決方案。通過檢查TPDO的通信參數(shù)和傳輸類型,確保主站與站的數(shù)據(jù)同步,快速定位問題所在。如果你的CANopen
    的頭像 發(fā)表于 09-19 08:05 ?334次閱讀
    【<b class='flag-5'>CANopen</b>系列】<b class='flag-5'>CANopen</b><b class='flag-5'>從</b>站為什么總不上傳PDO報(bào)文?