吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用ES32實現CANopen從機

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

工程師筆記 | 使用ES32實現CANopen從機

CANopen 是一種基于CAN的通信協議,已在工業領域得到了廣泛應用。

CAN提供可靠的底層數據傳輸,CANopen提供標準化的應用層協議。在CANopen協議中,每個CANopen設備都有一個對象字典。CANopen設備模型如下圖。對象字典描述了CANopen設備的所有行為和參數。

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

CanFestival是一套開源免費的CANopen協議棧。它功能強大,且提供圖像化的對象字典編輯工具。RT-Thread已經將CanFestival制作成軟件包。所以只需完善對應驅動就能實現CANopen。

本文將要介紹:在 ES32 平臺上,基于 RT-Thread bsp 實現 CANopen 從機的方法。

開啟本實驗前,讀者需要首先了解:

?本實驗基于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

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

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

1. 硬件配置

本實驗使用ZLG的USBCAN-E-P做為主站,ES-PDS-ES32F3696LX開發板和ES-PDS-CAN模塊作為從機。

▲CANopen主站卡

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

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

ES-PDS-CAN模塊接口 ES-PDS-ES32F3696LX開發板管腳功能
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開發板上的跳線接口:

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

2 . 閉合JP2、JP3:通過板載調試器將UART2轉為串口,方便調試程序。

2. 驅動配置

通過ES-CodeMaker可實現可視化的管腳功能配置

新建工程

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

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

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

開啟 CAN0 的管腳: PB8,PB9 ,并選擇相應的CAN功能,可以設置can設備的名稱。設備配置為:波特率1000000,使能失敗自動重發,再同步跳轉寬度為4個時間片。

開啟 AD16C4T0 作為 HWTIMER ,并選擇相應的功能,可以設置hwtimer設備的名稱。設備配置為:遞增計數模式。

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

3. RT-Thread配置

使用RT-Thread env工具配置RT-Thread的內核、組件、軟件包和驅動。

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

2 . 輸入menuconfig配置工程

rt-thread 內核配置

RT-Thread Kernal -> Kernel Device Object 進行內核設備對象設置。將控制臺的設備名改為“uart2”。

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

rt-thread 軟件包 CanFestival 配置

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

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

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

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驅動。

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

TIMER 配置

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

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

開啟CANopen用例

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

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

配置好之后保存退出。

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

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

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

4. 實驗說明

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

CANopen協議的核心是對象字典。由于CANopen的對象字典較為復雜,不建議手寫對象字典。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 . 從百度網盤獲取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文件夾,復制到 Mongo-canfestival-3-asc-1a25f5151a8dobjdictgen路徑下。如下圖所示:

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

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

如果安裝正常,則會出現以下的界面:

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

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

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

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

打開bsp中的對象字典。

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

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

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

b . 點擊選項后,可編輯字典,如下圖所示:

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

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

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

對象字典索引0x2000~0x5FFF的制造商特定自協議區,常被用于存放應用數據。

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

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

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

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

點擊【建立字典】后,會生成.c和.h對象字典文件。如果當前打開的是工程內的.od文件,則會更新工程中的對象字典。

點擊【導出成EDS文件】后,會生成eds文件。CANopen主機需要用eds文件解析從機。

4 . CANopen從機程序流程。

在CANopen中,PDO為過程數據對象協議,可用于在多節點之間交換即時數據。PDO被分為RPDO和TPDO。RPDO為從機接收數據。TPDO為從機發送數據。

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

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

如上圖所示,應用層CANopen從機程序流程為:

a . 初始化底層驅動。初始化CANopen,并導入對象字典。

b . 從機進入預操作狀態后,不斷讀寫對象字典。

注意:因為雙方的時鐘相互獨立,存在誤差。所以加速了當前使用的硬件定時器,使從機能及時響應主機。

5 . CANopen主站卡環境安裝。

本實驗用 USBCAN-E-P CANopen主站卡作為CANopen主機,開發板作為CANopen從機。

? 從官網獲取 USBCAN-E-P 資料

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

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驅動:

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

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

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

然后根據用戶手冊,安裝USBCAN-E-P驅動。

5. 實驗現象

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

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

2 . 然后打開CANManager for CANopen。

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

導入CANopen從機的eds。

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

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

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

點擊搜索,開始搜索從機,如下圖所示:

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

搜索到從機后,點擊右下角的關閉按鈕后,如下圖所示:

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

3 . 點擊左上角的啟動后,設置如圖:

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

啟動后,可觀察到現象:主機收到從機的TPDO中,紅色框中的數據在不斷循環。藍色框中的數據不變,為字典中的初始值。與程序流程圖邏輯一致。

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

點擊RPDO1的手動發送后。TPDO1的后4字節數據與RPDO1的后4字節數據一致。

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

修改RPDO2后4字節數據后,點擊RPDO2的手動發送后。TPDO2的后4字節數據與RPDO2的后4字節數據一致。

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

4 . 實驗完成后,RT-Thread控制臺輸出如下信息:

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

如果主機和從機幾乎同時往CAN總線發送數據,就會有 CAN通訊超載 的緊急報文。

receivedEMCYmessage.Node:08ErrorCode:8110ErrorRegister:11

CANopen緊急報文錯誤代碼說明如下:

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

6. 軟件包程序修改說明

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

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

軟件包第1處修改

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

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

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

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

將 packagesCanFestival-v1.0.0srccan_rtthread.c 進行更改。can_rtthread.c的部分內容如下:

修改前:

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?

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    915

    瀏覽量

    40440
  • CANopen
    +關注

    關注

    8

    文章

    270

    瀏覽量

    43750
  • 開發板
    +關注

    關注

    25

    文章

    5121

    瀏覽量

    98195

原文標題:工程師筆記 | 使用ES32實現CANopen從機

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

收藏 人收藏

    評論

    相關推薦

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

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

    ES-LinkII 可以用于多款MCU開發的工具

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

    基于STM32的CANopen通訊協議的實現

    1_【基于STM32的CANopen通訊協議的實現CANopen分為三部分: 1、通信部分:PDO協議,SDO協議,NMT協議,特殊功能對象 2、對象字典:數據類型、通信對象、應用對象 3
    發表于 08-20 08:12

    如何使用STM32單片開發一款CANopen產品

    一、前言我寫CANopen系列博文的初衷是分享如何使用STM32單片開發一款CANopen產品,所謂實戰為主,理論為輔。光看CANopen協議的理論是很枯燥的,而且無論看多少遍都無法
    發表于 02-15 07:45

    基于STM32F103單片CANopen實現

    基于STM32F103系列單片CANopen主從PDO&SDO例程這是一個CANopen協議通信例程,硬件平臺為STM32F103單片
    發表于 03-01 06:07

    工業通訊中CANOPEN轉EtherCAT的轉換

    呈現給EtherCAT主PLC/控制器,這使得CANOPEN到EtherCAT的轉換變得更加容易和便捷。同時,該網關還具有易于配置和使用的界面,使得用戶可以更加輕松地實現網絡之間的數據交互。 然而
    發表于 12-12 11:31

    CANopen協議講座(4)之CANopen站設備及其應用

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

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

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

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

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

    基于CANopen協議站設備快速實現方法

    基于CANopen協議站設備快速實現方法 CANopen協議作為CAN總線的應用層協議,擁有復雜的網絡管理、實時過程數據對象、服務數據對象、預定義連接和特殊功能對象等基
    發表于 05-23 12:03 ?1649次閱讀
    基于<b class='flag-5'>CANopen</b>協議<b class='flag-5'>從</b>站設備快速<b class='flag-5'>實現</b>方法

    ES32 USB協議棧用戶指南

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

    ES32 USB協議棧例程用戶手冊

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

    CANopen IO耦合器功能的實現

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

    哪些設備屬于canopen 站范疇?

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

    CANopen系列】CANopen站為什么總不上傳PDO報文?

    CANopen網絡中無法獲取站的TPDO數據?本文將為您解析可能的原因及解決方案。通過檢查TPDO的通信參數和傳輸類型,確保主站與站的數據同步,快速定位問題所在。如果你的CANopen
    的頭像 發表于 09-19 08:05 ?418次閱讀
    【<b class='flag-5'>CANopen</b>系列】<b class='flag-5'>CANopen</b><b class='flag-5'>從</b>站為什么總不上傳PDO報文?
    百家乐一柱擎天| 大发888提款之后多久到账| 蓝盾国际娱乐| 网上百家乐官网真坑人| 百家乐赌场代理合作| 云博娱乐城| 百家乐官网挂机软件| 百家乐赌场讨论群| 百家乐翻天下载| 至尊百家乐官网年代| 在线百家乐大家赢| 大发888官网注册| 百家乐官网平台开户哪里优惠多 | 赌博娱乐场| 8运24山风水图解| 威尼斯人娱乐场的微博| 百家乐官网保单破解方法| 缅甸百家乐娱乐| 巨鹿县| 百家乐官网乐百家娱乐场| 大发888娱乐城下载平台| 大发888游戏平台103| 百家乐官网软件辅助器| 水果机遥控器价格| 百家乐官网赌博信息| 威尼斯人娱乐城注册送彩金| 皇冠百家乐官网代理网址| 百家乐娱乐礼金| 有破解百家乐官网仪器| 大世界百家乐赌场娱乐网规则| 菲律百家乐官网太阳城| 利都百家乐国际娱乐平台| 赌场风云下载| 澳门百家乐路单怎么看| 网上真钱娱乐平台| 百家乐平投注法| 网上百家乐官网网址| 菲律宾百家乐娱乐场| 百家乐官网视频赌博| 深圳太阳城酒店| 新西兰百家乐官网的玩法技巧和规则|