Zynq移植canopen协议站canfestival+控制电机运动

CAN笔记(23) CanFestival移植 基于stm32F4系列的CanFestival移植 阅读详情
AI摘要

本文介绍在ZYNQ开发板上移植Canfestival并控制电机运动的方法。先介绍硬件和资料,接着说明Canfestival特点与下载途径,然后阐述移植步骤,包括创建vitis工程、复制文件,还详细讲解修改驱动代码的要点,最后提及开发板发送报文及控制电机运动的相关内容。


请添加图片描述


一、 内容介绍

从零开始,在ZYNQ开发板上移植cnafestival,并最终控制电机运动。主要分别五部分

1. Vivado导出硬件XSA文件
2. 创建vitis工程,并移植Canfestival
3. 对象字典工具的安装及使用
4. 开发板通过SDO报文配置电机PDO参数
5. 开发板通过PDO报文控制电机运动


二 硬件介绍

1、支持Canopen协议的电机
2、zynq芯片的开发板
3、can分析仪,用来抓取监听Canopen报文
请添加图片描述


三、资料介绍

主要包括这些文件,里面包括了完整的Vitis工程代码,以及非常有用的Canopen相关的文档使用教程
在这里插入图片描述


四 、Canfestival介绍及下载

CanFestival 是一个开源的 CANopen 协议栈,专为嵌入式系统设计。以下是其核心特点的简要总结:

  1. 功能

    • 支持 CANopen 核心协议(NMT、PDO、SDO、对象字典等)。
    • 适用于工业自动化、机器人、汽车电子等领域。
  2. 优势

    • 开源免费(LGPL 许可证)。
    • 跨平台,支持多种操作系统和微控制器。
    • 提供代码生成工具(如 objdictgen),简化开发。
  3. 应用

    • 适合资源有限的嵌入式系统。
    • 广泛应用于需要 CANopen 通信的场景。
  4. 官网下载源码


五 、移植

1 、根据vivado导出的xsa文件,创建一个vitis工程

请添加图片描述

2 、Canfestival文件夹中复制源码库的src和include文件夹相关文件,到vitis工程中

在这里插入图片描述

移植c文件
在这里插入图片描述
移植H文件
在这里插入图片描述


此外还需要移植一个config.h文件



六 、修改vitis工程中的驱动代码

移植代码,我们编译后,会报错。要进行代码修改

1、start_and_seek_node() 和 start_node(),这两个函数把inline去掉
2、编写实现canSend() getElapsedTime() setTimer()这三个函数
  • canSend() ,作用是发送can数据,最终canfestival库发送数据,都会调用canSend()函数.
  • getElapsedTime(),作用是软件定时器的修正(通过一个硬件定时器,来模拟多个软件定时器).
  • -setTimer(),作用是改变硬件定时器的溢出周期
3、编写代码,配置硬件can口和硬件定时器。注意can口波特率不要配置错误
4、导入对象字典文件Mater.h 和Master.c文件
5、修改static.c文件中_preOperational和_operational函数,切换状态时候,能发送NMT报文
6、根据硬件定时器周期,修改timerscfg.h中的TIMEVAL_MAX 、MS_TO_TIMEVAL、US_TO_TIMEVAL。
#define TIMEVAL_MAX 0X0FFFFFFF
#define MS_TO_TIMEVAL(ms) ms*1000L
#define US_TO_TIMEVAL(us) us*1L

7、修改timers.c中的TimeDispatch函数
8、修改applicfg.h文件中的MSG宏定义,可以输出调试信息
/* Definition of error and warning macros */
/* -------------------------------------- */
#define MSG(...)  xil_printf(__VA_ARGS__)

/* Definition of MSG_ERR */
/* --------------------- */
#define MSG_ERR(num, str, val) \
//MSG("ERR:%s,%d : 0X%x, %s 0X%x \r\n",__FILE__,__LINE__,num,str,val);

/* Definition of MSG_WAR */
/* --------------------- */
#define MSG_WAR(num, str, val) \
//MSG("WAR:%s,%d : 0X%x, %s 0X%x \r\n",__FILE__,__LINE__,num,str,val)

9、修改完后,在main函数中添加代码如下,canfestival能会定时的发送同步报文
int main()
{
    init_platform();

    canfestival_port_Init();//can、硬件定时器,中断初始化

    setState(&Master_Data,Initialisation);

    while(1)
    {
    	sleep(1);  	
    }

    print("Hello World\n\r");
    print("Successfully ran Hello World application");
    cleanup_platform();
    return 0;
}

//master.c 同步报文参数的设置 100ms循环发送 
/* index 0x1005 :   SYNC COB ID. */
                    UNS32 Master_obj1005 = 0x40000080;	/* 1073741952 */
                    ODCallback_t Master_Index1005_callbacks[] = 
                     {
                       NULL,
                     };
                    subindex Master_Index1005[] = 
                     {
                       { RW, uint32, sizeof (UNS32), (void*)&Master_obj1005 }
                     };

/* index 0x1006 :   Communication / Cycle Period. */
                    UNS32 Master_obj1006 = 0x186A0;	/* 100000us */
                    ODCallback_t Master_Index1006_callbacks[] = 
                     {
                       NULL,
                     };
                    subindex Master_Index1006[] = 
                     {
                       { RW, uint32, sizeof (UNS32), (void*)&Master_obj1006 }
                     };

七 、其他介绍

1、开发板发送SDO报文,主要是通过writeNetworkDict这个函数实现

UNS8 writeNetworkDict (CO_Data* d, UNS8 nodeId, UNS16 index,
		UNS8 subIndex, UNS32 count, UNS8 dataType, void *data, UNS8 useBlockMode)
{
	return _writeNetworkDict (d, nodeId, index, subIndex, count, dataType, data, NULL, 1, useBlockMode);
}

2、开发板作为主站,也就是客户端,注意TPDO和RPDO的ID 要设置正确。通过PDO绑定的变量控制电机运动
主要需要电机以下对象索引参数

在这里插入图片描述
最终把代码下载到开发板中,控制电机运动

请添加图片描述

8、完整视频教程 及 全部资料 获取

请添加图片描述

canFestival移植(1) 前序 canFestival是实现了canopen协议,本文分析canFestival架构和移植原理。 canFestival各个文件夹功能 下载canFestival源码包。 canFestival的官网下载地址:https://canfestival.org/apps.html.en 这些老外的官网地址在国内去访问总是很慢,甚至不能打开,此时此刻我们最后另想其他办法,因为这些源码肯定有别人下载过,他们就会传到网上其他的地方,我在github上找了一个下载地址(https://github.com/l 阅读详情

相关推荐

canfestival介绍及对象字典编辑器的环境搭建

canfestival是一套功能完整,完全符合CANopen标准的开源协议栈,canfestival为开发者还提供了许多工具,提高开发的便利性。 Canfestival源码由ANSI-C编写,提供了对于多种硬件平台的驱动,本文主要介绍canfeitival相关基础,以及搭建字典编辑器。供读者参考。

小草xyz的博客 4717

CanFestival官方网站及源码获取

canfestival源码获取整理

tianbisifang的博客 5451

Zynq-7000上跑CanFestival:一个嵌入式工程师的踩坑实录与电机控制实战

本文详细记录了在Zynq-7000平台上移植CanFestival协议栈并实现电机控制的实战经验。从硬件配置陷阱、源码移植技巧到定时器优化和对象字典动态加载,分享了嵌入式工程师在CANopen通信和电机运动控制中的关键解决方案与踩坑实录。

weixin_30329623的博客 548

基于ZYNQ的开源CANopen协议栈CANFestival移植

1 概述 CanFestival是一个免费而且开源的CANopen协议栈,较为适合于对CANopen协议栈功能完备性和工作性能要求不高的应用场合。对于功能和性能要求较高的应用,也有很多第三方的商用CANopen协议栈可供购买使用。目前,CanFestival在嵌入式控制(PLC、单片机、ARM等)领域中使用较多。 本文讲解了CanFestival库的基本架构和原理,针对ZYNQ平台详细介绍了移植的原理和过程。最后通过测试实例,介绍了CanFestival中主要常用功能及相...

MmikerR的专栏 1万+

ZYNQ平台CANFestival协议栈移植实战:从源码解析到功能验证

本文详细介绍了在Xilinx ZYNQ平台上移植开源CANFestival协议栈的完整实战过程。内容涵盖从源码结构解析、定时器与CAN驱动适配,到配置文件修改与对象字典生成,并重点讲解了中断互斥、功能验证等关键步骤与避坑指南,帮助开发者快速实现稳定可靠的CANopen通信功能。

weixin_29159441的博客 101

【信息科学与工程学】【控制科学】第十二篇 微型计算机控制技术01

更精确的经典模型:I1在第5周期WB结束,I2最早可在第6周期进入EX,但I2在ID阶段就需要R1,因此I2的ID需在第6周期,而I1的WB在第5周期,所以I2的ID可以紧接在第6周期,但中间仍有一个stall(因为I1的EX结果要等到MEM之后才能转发给ID?有优先级继承后,Task_L被提升优先级,不会被Task_M抢占,阻塞时间缩短为Task_L剩余执行时间(9ms),仍可能超过10ms,但可通过调整任务周期或使用中断处理缓解。电感L=10μH,输出电容C=100μF,ESR=5mΩ。

weixin_49199313的博客 8636

CANFestival简介

相对于其他常用的国外开源的CANopen协议栈,CanFestival具有许多明显的优势: 1.CanFestival为开发者提供了许多工具,以提高开发的便利性。例如用于生成节点对象字典源代码的对象字典编辑器,以及便于开发者自由配置编译选项的配置脚本。 2.CanFestival能够运行于多种类型的平台。CanFestival源代码由ANSI-C编写,驱动和例程的编译情况仅取决于具体的编译工具

iamplane的博客 2万+

CANfestival:深入理解与实践CANopen协议栈

CANfestival是一个完全开放源代码的CANopen主站协议栈,它为开发者提供了一个易于集成且功能强大的库,允许设备实现与CANopen协议兼容的通信。CANfestival广泛应用于工业自动化领域,支持多种操作系统,并且提供了丰富的API接口,使得开发者能够快速地实现复杂的CANopen网络通信功能。在接下来的章节中,我们将深入探讨CAN总线与CANopen协议,以及CANfestival框架的模块化设计原理。

weixin_36122351的博客 1514

【CANopen】关于STM32的CanFestival移植

CAN和定时器的配置在CubeMX中配置。然后点击文件->建立字典,将字典生成c和h文件,将这两个文件添加进工程。新建一个字典,测试一下CanFestival移植是否成功。另外,需要在定时器中断中清除CAN软件定时器的计数值。使用字典之前需要先安装python和wxpython,完成以上后,既可在接收端收到id为0x700的报文。在CubeMX生成代码路径下创建一个文件夹,将。文件夹到CanFestival源码。进入CanFestival源码。初始化调用下面这三个函数既可。这个文件夹改名后需要修改。

医疗嵌入式技术探索者 | 从硬件驱动到系统集成的全栈实践记录 6378

CanFestival-3.10 2014.06.12最新版本,官网资源分享

拿来主义请看这里了,这是最新版本的CanFestival-3.10 ,官网资源分享呵呵,楼主很厚道的,只要2分就拥有最新版本的CANOPEN协议CANFESTIVAL

适合于单片机的CANopen开源库CANfestival,已根据移植需求进行阉割,可直接使用

适合于单片机的CANopen开源库CANfestival,已根据移植需求进行阉割,可直接使用。已成功移植到了GD32F470,配合本博主的相关博客一起使用。

CANOpen协议详解(一):CANfestival源码分析

CANFestival-3源码详解一:重要结构体 有几点需要说明: 1.使用的是官网下载的canfestival-3源代码,下载的压缩包文件名是:Mongo-canfestival-3-asc-1a25f5151a8d.zip,使用的是源码里面自带的对象字典编辑器来生成对象字典文件; 2.主要解析源码里面与DS 301协议有关的代码,DS 301协议参考文档为301_v04000201.pdf; 3.推荐一个文档叫《CANopen轻松入门》,介绍了CANopen的基础知识,广州致远电子出品,写的非常好。还推

李肖遥的专栏 1万+

CANfestival的各个版本(包括3.0、3.8、3.10)

已经测试过3.8和3.10版本,有理解问题可以问。3.0版本为官网上下载的版本因为没时间仔细阅读协议栈就没测试。

canfestival系列教程之程序移植

步骤一:首先准备一个工程确保这个工程是可以用的,比如用正点原子的can工程 第二步:从官网上下载一个源码程序,解压: 打开之后,有很多文件,我们只取其中的两个文件src文件夹(里面是.c文件)include文件夹(里面是.h文件) 第三步:把  src文件夹  和&

weixin_44161807的博客 2586

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

CanFestival协议栈从站实现和源码简析

(转自我的新浪博客http://blog.sina.com.cn/s/blog_b315f69b0102yhji.html) 一、先谈谈CanFestival 在2018年的一年中,项目接二连三紧紧跟随,刚完成工业级现场总线Profibus-DP通信协议,接着开始Canopen协议通信开发;当然,作为一个刚一涉入嵌入式行业时就兴奋似火的两年多sophomore(辣鸡)来说,能在项目...

sinat_19440229的博客 2万+

WPS占用C盘空间解决方案与优化技巧

办公软件在长期使用过程中会产生大量缓存和历史文件,这些文件往往隐藏在系统目录中,导致磁盘空间被无声占用。以WPS为例,其版本历史备份、云同步缓存和模板库是主要空间占用源。通过分析文件存储机制,可以定位到具体的缓存路径,如AppData目录下的Kingsoft文件夹。针对这一问题,有效的解决方案包括手动清理、自动化脚本和注册表优化。对于需要持续监控的场景,可以结合PowerShell脚本和任务计划实现自动化管理。在实际应用中,这些技术不仅适用于WPS,也可迁移到其他办公软件的空间优化中,是每位IT运维人员和高

weixin_30788239的博客 458

CANopen开源协议栈canfestival移植到树莓派pico开发板-----代码移植

CANopen开源协议栈移植到树莓派pico开发板。

weixin_39253446的博客 2616

如何用ggplot2绘制专业级双侧柱状图展示GO富集结果(附完整代码)

本文详细介绍了如何使用R语言的ggplot2包绘制专业级双侧柱状图展示GO富集结果,包括数据预处理、基础图形构建、高级样式定制和出版级细节调整。通过完整的代码示例和实用技巧,帮助生物信息学研究人员高效可视化高通量数据,提升学术图表的质量和可读性。

weixin_30342209的博客 77

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 330

Canfestival_移植以及修改移植后的各种bug

移植文件 我移植过H7和F7的。我以H7的来说明。H7的CAN有些配置和F7是不一样的。踩过的坑和在这里说一下。 把C文件添加到keil中,把头文件的路径也添加上。 我移植过程中遇到的问题有: 1.注释掉这些文件2我是用keil,但是使用cpp来编译的,所以会有指针不匹配的现象3乱码,这里很发现,虽然报错了,但是找了好久才发现的4。用c++编译的,所以要加上这个,不然会找不到头文件 5.其他问题都是些小问题。网上也能找到。 2个定时器函数编写 这两个定时器函数是被canfestival用来做硬件定时

qq_34985000的博客 3082

Trae AI开发工具:大前端环境配置与避坑指南

大前端开发的第一步往往不是选框架,而是搭建一套可靠的工具链。IDE作为编码、调试与AI能力协同的载体,直接决定后续开发的顺畅度。传统编辑器需要手动拼装插件生态,而新一代AI开发工具将对话、代码生成与项目脚手架能力内置到编辑器底层,降低了环境准备的门槛。Trae基于VS Code内核,兼容其插件体系,同时提供Chat、Builder、内联对话三种AI交互模式,适合从VS Code迁移的开发者,也适合大前端新人快速上手。安装时需认准官方渠道,注意Node.js、Git版本联动,配置自动格式化与手动更新策略,并结

weixin_26833139的博客 281

CanFestival移植到STM32 F4芯片(基于HAL库)

通过简单操作就可以把CanFestival库移植到STM32 F4芯片上

爱就是是恒久忍耐的专栏 5836

Zephyr RTOS线程间通讯实战:消息队列与信号量的5个经典应用场景

本文深入探讨了Zephyr RTOS中线程间通讯的核心机制,通过消息队列与信号量的组合,详细解析了传感器数据处理流水线、命令分发系统、日志记录、资源池管理以及周期性任务协同调度等5个经典应用场景。这些实战模式为构建高效、稳定且可维护的嵌入式多线程系统提供了清晰的设计蓝图和代码范例。

tomato的博客 94

提示词编写:从新手到专家的进阶之路

本文旨在为提示词编写者提供一条从新手到专家的进阶之路。我们将详细探讨提示词编写的背景与意义、基础与进阶技巧、实战应用以及最佳实践。通过逐步深入的分析与实操,读者将掌握提示词编写的核心要点,提高编写效率和作品质量。提示词是用于引导人工智能生成文本的关键词或短语,它包含了作者想要传达的主题、情感和细节。随着人工智能技术的普及,自动化写作工具逐渐应用于各行各业。为了提高写作效率,项目团队决定开发一款基于人工智能的自动化写作工具。成功开发了一款自动化写作工具,生成文本质量较高。

AI天才研究院 1087
上一篇: Codesys 编写程序代码实现+在线禁用设备+使能设备
林磊教育
博客等级 码龄3年 405粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值