| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 大疆M3508、M2006必备CAN总线知识与配置方法 -> 正文阅读 |
|
[嵌入式]大疆M3508、M2006必备CAN总线知识与配置方法 |
大疆M3508、M2006必备CAN总线知识与配置方法文章目录
0x00 需要 额外的 CAN收发器!!!这件事要放到前面去说,因为已经有几位朋友的经历指出了其必要性。 如果我们有一块STM32开发板,也有电调电机和电源。那么我们的STM32引脚与电调的CAN_H和CAN_L之间是不能直接相连的。 需要购买如下图所示的CAN收发器,作为两者连接的桥梁。一般我用的是TJA1050芯片的模块。 CAN收发器是使用电机的必备硬件条件,一定要先确定自己有这个东西。至于原因,咱们接下来说明。 0x01 硬件层面分析为什么需要CAN收发器通过分析硬件层面我们能知道为什么需要额外的CAN收发器。请看下图: 从图中我们能看出,STM32拥有的外设叫做:CAN控制器,它负责CAN通信的筛选、优先级、仲裁等问题。相当于咱们的邮局,帮忙盖个邮戳,分分类。通过复用GPIO以后,它延伸出两个引脚: 实际上,这两个引脚上传输的数据已经是CAN报文了,该有的格式它都有,STM32的CAN回环模式就相当于直接把 问题是,CAN在设计的时候为了消除共模干扰,特地选用了差分信号(也叫差模信号)传输。咱们的C610、C620电调,接收发送的就是差分信号。这才是CAN收发器的作用: 把来自STM32的信号转换成差分信号让电调听得懂,把来自电调的差分信号转换成STM32听得懂的信号。 请注意:连接 120Ω的终端电阻呢?不知道朋友们有没有注意到C610、C620电调上都有一个开关,C620的在侧面,旁边写着 根据咱们学的《电路理论》这门课,当信号波长小于电路尺寸的时候,我们就不能把电路当成集中电路来分析。对于can总线是一样的,由于电调采用1MHz的通信频率,为了防止一些不必要的干扰,我们需要在CAN总线的两端分别用120Ω电阻跨接起来。比如之前图中的两端可以认为是咱们的CAN收发器是一端,下面的电调是另一端。 对于只有一个电调的情况下,可以打开电调上的电阻,然后直接和CAN收发器连接,这样虽然少了一端的终端电阻,但实际上可以运行。如果同时控制两个及以上的电调,那就可以打开其中两个的终端电阻,构成总线的两端。当然也可以手动组成如下图的总线结构并且关闭电调上的终端电阻,图中还加入了电容进行滤波。 0x02 软件配置简析
两个文件: 如何把通信频率设定为1MHz?以下是文件
注意,大疆的例程是为大疆的开发板所编写,其主控芯片是STM32F429,在这里F4与F1的时钟频率差别会影响到配置的具体参数。 咱们重点来看分频系数的确定以及标出的两行。 STM32F4一般来说主频率会配置到168MHz,经过4分频之后得到了42MHz的APB1时钟,CAN控制器正是从APB1上获取时钟。代码中 所以,传输一位的时间可以看作T=(1+BS1+BS2)*tq,tq(time quantum)。所以在例程里就是1+9+4=14个tq。而tq刚好是CAN时钟频率14MHz的倒数,tq=(1/14MHz),T=14*tq,得T=(1/1MHz),同样f=1/T=1MHz。由此获得了我们需要的频率。 同理,如果是F1,APB1时钟一般是36MHz,那么我们设置分频系数为4,BS1=5,BS2=3,也能得到1MHz。 CAN过滤器配置其实一般来说并不需要注意CAN过滤器得配置,因为官方例程也没怎么配置,大可直接套用。 过滤器是针对接收信息进行筛选得部件,因为CAN总线上得消息往往比较复杂,通过过滤器可以选出想要接受的消息。大致过程是过滤器会对所有收到的报文按照咱们设定的规则进行筛选,如果符合要求就会放入FIFO缓冲区保存下来。而这个规则就是报文的id信息。为了实现复杂的id筛选,引入了id寄存器和id掩码寄存器,其配合过程非常的。。精彩👍。有兴趣可以了解一下。 下面得代码摘自文件
这里我们发现不论是id还是掩码都是0,也就是接收总线上的所有报文。那么在多电机的情况下如何区分消息的发出者呢? 消息的接收与发送我们先看看接收,以下选自
这是CAN的接收中断回调函数,在来到这个函数之前,获得的报文已经被储存在 官方手册中提到在同一个CAN总线上,最多可以接入8个电调,通过电调的自动分配他们分别是地址0x201~0x208。 再看发送:
按照手册,我们能看出,如果要给编号为0x2010x204的电调发信息,要把发送中的`StdId`设置为0x200,若是要给0x2050x208的四个电调发信息,则要设置为0x1FF。 后面依照手册填充数据然后发送,过程比较简单。 0x03 总结又是一篇有关大疆电机的文章,也是结合我自己的经历和上一篇文章的反馈才有了这篇。现在还记得我刚开始接触CAN通信时候的疑惑感,感觉资料都太复杂看不下去。水平确实有限,也就只能力求个浅显易懂,希望能帮助朋友们节约一些时间吧。相关例程可以在公众号上向我索要。 这里放上前一篇文章链接:PID和三环控制-以大疆M3508、M2006为例 https://blog.csdn.net/qq_28039135/article/details/116379392 更多嵌入式,电机控制相关文章请移步公众号,来找我聊聊天吧: 技术新人,水平有限,还请各位朋友多多指教。如果对文章有任何的疑问或者发现错误请一定指出! 演示视频:同时控制M3505、M2006双电机的演示视频在原文底部: 欢迎转载,请注明作者与原文地址: 作者:胡小安 原文链接:https://blog.csdn.net/qq_28039135/article/details/119011372 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 10:15:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |