发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
[资料干货]

如何通过CAN总线控制VESC驱动直流无刷电机?

[复制链接]
702|1
手机看帖
扫描二维码
随时随地手机跟帖
woai32lala|  楼主 | 2022-9-12 12:17 | 显示全部楼层 |阅读模式
本帖最后由 woai32lala 于 2022-9-12 12:31 编辑

#申请原创# #有奖活动# #技术资源#@21小跑堂
如何通过CAN总线控制VESC驱动直流无刷电机?
       这几天一个学弟问我VESC怎么通过can通信控制,这个东西我也没搞过,然后学习了一下资料,
中间也遇到了一些挫折,但然后成功通信了。
1、首先介绍什么是VESC(本杰明控制器)
     VESC是一个开源的ESC(电动速度控制器),它是按照创建者Benjamin Vedder的名字Vedder来命名。
它发布于2016年。Vedder在他的电动滑板上测试了它,因为该款控制器具有很强的兼容性和编程特性,它
很快在电动滑板玩家群里流行起来。
     现在VESC已经到了版本6,以下是他的优势:
1、具有很强大的功能,有多种控制模式。BLDC、FOC等,且损耗比较低
2、三相分流流设计(意味着ESC可以测量每个电机电缆的工作电流,ESC可以更精确地工作,具有更好的工作性能) 。
3、它允许大量的定制参数,比如电池、电机种类、加速度和制动曲线等等。


这它自带的上位机软件
10172631e9ecb8d91f.png
此设置页面,您可以选择不同类型的电机
96973631e9db59e722.png   设置电池的规格
45016631e9dd7c7b60.png
以及电池的工作电压范围等等
66840631e9f181b28d.png
还可以设置最大输出电流,所以您不需要担心最大峰值电流可能会伤害控制板中的电子元件。
98647631e9fcba39ce.png 以上是它的基本配置。

2、如何通过can通信来控制VESC6
     VESC6是采用can通信对外交互的,他的主芯片是F407,CAN通信波特率为500KHz。
     我们控制器也用的F407,设置CAN通信波特率为500KHz,波特率匹配才能正常通信。
  设置思路是CAN主动发送数据,然后通过CAN中断接收必要的回传数据,比如转速、电流等。
      VESC6通信格式
      VESC6 设置转速有多重方法:
    1、 设置占空比来调整转速
    2、直接设置转速
    3、设置电流控制转速
    这里只讲一种。通过设置占空比来调整转速。

设置占比空的通信格式如下
18270631ea6aba68ff.png
VESC6使用的是扩展帧通信
扩展帧有29ID,高11位ID 18 - 26位都为0,
低18位ID中16- 17位0,bit 8 - 15位设置控制模式
我们用的占空比模式,这几个位为0,
bit 0-7是ID,根据驱动板ID设置即可,学弟那边是08
数据位有四位
1373631ea8b9e0d63.png
发送的数据要 x 100000
比如发送占空比为50%
则需要发送数据
50 *100000 = 5000000,转为16进制为:
88169631ea93b4f5c3.png

占空比可以设置为负
加入正占空比为正转,则负占空比为反转。
数据存储在低四位,我们要对数据进行处理
90678631ea9e452b9b.png
这样对一个32位的数据进行一个字节一个字节的获取。

   下面是CAN通信波特率配置
    38293631ea21374c8a.png
    53883631ea28e9cee6.png
   69926631ea2b15f953.png
CAN发送函数                      TxMessage.StdId = 0x00; 标准帧位置设置为0x00
TxMessage.ExtId = packet_id<<8|id;扩展帧位置设置为模式控制和电机的ID
TxMessage.IDE = CAN_ID_EXT 设置为扩展帧

93784631ea346ab722.png
CAN接收中断函数
19869631ea3e0309b7.png

给VESC6发送占空比函数
10601631eac9428902.png

CAN通信返回数据解析
91712631eadf685061.png

与VESC6通信的相关函数编写完毕,我以为这就可以正常通信了
然而把程序发给学弟之后,测试没反应,就感觉很丢人
写的程序咋能不好使呢?

学弟那边用CAN洗衣发送测试数据,可以使电机转,程序却不可以。
我在线调是之后,发现确实我们的F407没有CAN通信数据发送出去,也没有在CAN接收
中断中得到数据,不得不说,can分析仪真的很好用,我们那时候咋么有这么好的东西呢
啥时候我也能拥有一个。

接着找问题
发现同样都是F407,我这边的是F407ZGT6,,而学弟那边是IGT6
两种控制芯片的引脚数量和CAN对应引脚都不一样

修改完毕后再次调试,依然不行,继续找问题
然后发现是两种单片机的晶振不一样
我这边测试用的是25M的晶振
而学弟那边采用是8M晶振,改了晶振之后,还需要改PLL_M 值,将25改为8


再次调试,可以发送数据了,能够正常控制电机转速,完美
57207631eb33c02732.png
再一次夸一下CAN分析仪,真的嘎嘎好用,好像拥有一个。

以上就是就VESC6通过CAN通信的操作。




了解更多私有5G网络技术 提升系统性能和可靠性

VESC6_CAN_CommandsTelemetry.pdf

271.44 KB

VSEC6.zip

7.64 MB

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2022-09-19
理由:恭喜通过原创文章审核!请多多加油哦!

评论
21小跑堂 2022-9-19 15:35 回复TA
CAN通讯在电机控制中比较常见,作者借助优秀的工具完成了简单的电机控制并处理了遇到的问题。但是文章写的过于简略,其实展开写写可以获得更高打赏。 

相关帖子

发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则