新金沙赌博网:

 找回密码
 立即注册

只需一步,快速开始

微信扫一扫,快速登录

搜索
查看: 3783|回复: 45

新金沙赌博网: [综合] 优必选CAN总线舵机改造过程,自制固件、控制器、协议和上位机软件

    太阳城亚洲现金真人荷官
1#
发表于 2021-2-16 11:31:33 | 只看该作者 |倒序浏览 |阅读模式

认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2021.02.17更新:
1、上传全部数据手册和源代码。在文章末尾。
2、固件源代码已经加入惯性修正和PID控制,精度大大提高,小于0.6度。
3、12V电压供电,舵机待机电流30ma,空载全速电流60ma。


以前在淘宝上买了几个国产某型(优*选)CAN总线舵机,做工还是不错的,不过没有协议,无法驱动,理论上等一段时间,网上会放出协议,但是等了好久也没有人做这事,倒是有人破解出协议,不过都要收钱才肯给,有点不够大方啊。那么只能自己动手啦。


第一步:拆机,目的:看看能不能改造。

先发个电路部分的图片



其实电路不复杂,主控是Atmel的ATSAMC21E17,32位的ARM内核MCU,自带CAN接口,电机驱动芯片是Allegro的A4959,角度传感器是MPS的磁感应数字传感器,这个比电位计的好,可以实现连续转动。电源芯片也是MPS的,型号MPM3506,CAN收发器是Microchip的ATA6561。总体来说,用的芯片都不错,成本应该不低。理论上这个可玩性是很高的。初步设想是使用Arduino控制CAN模块与舵机通讯,就可以驱动它了。因为这两个东西我手头上都有。那么开始第二步。


第二步:分析电路。
方法是使用万用表探测各芯片引脚,确定连接走线。这个比较费眼,具体不讲了。这里给我的万用表个照片,表扬一下。因为芯片封装太小,自己做了两个探针。


根据网上的信息(后来发现居然有单独卖舵机的驱动板的),一度以为角度传感器芯片是MA730,后来在编程过程中发现不对,按照对应的数据手册得不到结果,后来专门给MPS公司发了邮件,但是MPS中国官网只是一顿套话,没有具体解答我,倒是美国官网给我了具体型号,还提供了数据手册,在此表示感谢!注:MPS是Monolithic Power Systems的缩写,中文名字芯源系统,这个中文名字起的不错。
最后得出连线图,懒得画电路图了,直接标注在MCU的芯片脚上了。


接下来是接口电路图。这个比较重要。一个是通讯接口,一个是编程下载接口。
通讯接口是5264端子4P的。不过我没有这种端子线,我是用杜邦线改造的,接起来方便。


下载端口,SWD接口。


这样的话,使用ARM仿真器就可以编程了。为了控制舵机,专门买了个Jlink。不要买JlinkOB下载器,没有RESET,用不了,我试过了。
舵机电路板上还有几个测试触点,TP7连接的是A4959的PHASE,TP8连接的A4959的ENABLE,TP9对应的是A4959的AIOUT,其他几个触点是canrx、cantx、24v、5v、3.3v和gnd。


第三步:制作下载器。
不过这个下载接口不好接,间距1.27的,一开始我焊了五根线,但是焊的不结实,动动就掉了,于是又自己做了个探针式接头。这种探针在网上买很便宜的,我买了10根,才花了2块多钱,因为用了券,商家还包邮,返现等。真不知道他们靠啥赚钱。其实这种探针下载器网上也有卖的,但是很贵,还是无法固定,于是还是自己做个专用的。见图:




制作方法:先用在舵机上用亚克力板做出形状,使板的边缘与触点平齐,在触点对应的位置刻出凹槽,探针在亚克力板上是用的哥俩好粘的,再焊上杜邦线,用热熔胶绝缘。

装在舵机上效果如下:


还是不错的。我对这个特别得意。


第四步:读取固件。
将Jlink连好,给舵机供电,经试验,12伏即可运行,不需要24V。
这里介绍下开发工具。我使用的是ATMEL STUDIO 7.0,这个IDE使用的是宇宙第一IDE Visual Studio的壳,用起来很方便。
首先尝试一下能不能读取舵机固件。工具在atmel studio的Tools菜单里的Device Programming里面。


结果当然是读不出来的,因为MCU被设置了安全位,只能擦除才能访问。



第五步:擦除芯片。
读不出是意料之中的事,即使读出来也没用。我又不会反向编译。
第一次使用AtmelStudio的Device Programming工具擦除芯片时,提示:Verifying Flash...Failed! address=0x0000expected=0x00 actual=0xff,失败了。
后来分析了好久,才找到原因:The SAMD21 has a BOOTPROT fuse protecting the flash area of the bootloader.You'll want to clear the BOOTPROT fusebefore flashing the bootloader.同理,SAMC21也一样,都是一家的单片机。需要将保险丝寄存器设置NVMCTRL_BOOTPROT = 0x7(默认值0byte)。同时将NVMCTRL_EEPROM_SIZE=0x7(默认值0byte),得到最大的ROM空间。

图中的这两个地方要改才能够擦除或者刷固件。


第六步:找芯片的数据手册。
大部分都能在网上找到,除了A4959电机驱动芯片,这个官网上没有,后来给官网发了邮件,才提供pdf,不知道为啥不放出来。前面提到过角度传感器芯片的型号,不是MA730,其实是MP9960,这个你在官网上也找不到数据手册,好不容易才搞到pdf。
所有数据手册我会打包放到论坛。
没有数据手册,是没法编程的。


第七步:开始SAMC21编程。
以前没有用过Atmel的MCU开发,虽然Arduino是用的atmel的单片机,直接编程没用过,也算是要从零开始。
首先确定开发环境。IDE使用的atmel studio 7,基于ASF4.0开发。这个ASF4.0是Advanced Software Framework Version 4 的意思,是一个开发框架,必须配合Ateml Start在浏览器中使用,但是比直接操作寄存器要容易多了,图形化操作,效率很高,文档也很详细,推荐使用atmel单片机的同学学习这个,再说,我也没有精力研究ATSAMC21的寄存器了。
首先试试点亮电路板上的led吧,都先使用内部晶振。
。。。。。。(编程过程省略,反正成功了)

依次把要用到的几个功能都试了一遍,CAN通讯成功,电机驱动成功,PWM驱动成功,最后角度传感器(即SPI通讯)也成功。再使用外部24M晶振,也成功。看来可以把这一切都整合到一起了。
其实这里面还是探索了好长时间的,一边对着数据手册一边对着ASF手册,还要熟悉AtmelStart,Atmel Studio,打发了不少休息时光。
但是收获最大的就是成功之后的喜悦。
如果在使用AtmelStart,Atmel Studio方面有问题可以问我,我还是积累了一些经验。


第八步:制作舵机控制器和上位机软件。
这个比较容易,使用现成的CAN模块和Arduino UNO开发板做一个就行了,CAN模块是MCP2515  CAN模块,淘宝上一堆,很便宜,和Arduino UNO使用SPI通讯,网上现成的库也很多,我用的是github上的SeeedStudio的,地址http://www.258ib.com/815/Seeed-Studio/CAN_BUS_Shield.git。CAN波特率设定的是1M。
这个控制器需要使用上位机控制,就是一个转发的作用,Arduino与上位机使用串口通讯。

有图片:


写上位机主要是为了方便调试,使用VisualStudio2019社区版,C#开发,也不复杂。不过随着改造舵机协议,这个上位机软件改写了好多次,最后的样子是这样的。

所有的源代码都会上传到论坛。


第九步:编写通讯协议。
参考这个舵机同门的串口舵机通讯协议和其他型号的,根据自己的编程水平,搞了简单协议出来。
一、查询类
1.读取角度传感器当前的位置值
2.查询舵机 ID
3.查询版本(没啥意义,纯属随大流)
4.查询最大角速度

二、动作类5.设置舵机 ID
6.立即刹车,位置保持
7.按照指定的速度和方向连续转动,即减速电机模式
8.按照指定的速度运转到指定的角度处,即顺序转动模式
9.按照指定的速度从当前位置继续转动指定角度,即增量模式
10.按照指定的速度运转到指定的角度处,即最近转动模式
11.按照指定的速度从当前位置继续转动指定圈数
12.停止一切运行,舵机卸力

三、回令
立即执行完毕的立即回令,如查询类和部分动作。
开始执行后也立即回令。
执行当前动作完毕后,也回令。
执行过程中出错,也要回令。
所有协议具体内容详见源代码,这里就不重复了。


第十步:编写我的固件。
这一步就是把协议和之前学习探索出来的各部分整合到一个程序里。
有了第七步的基础,这个过程就比较简单了。
重点提一下,Ateml Studio确实好用。
在编写固件过程中,atmel studio 改名叫做Microchip Studio了,因为Atmel早就被Microchip收购了,虽然Microchip Studio还没有彻底改完,还有好多Atmel的痕迹。
我的固件没有使用热门的PID控制电机,感觉没啥必要,因为电机是空心杯电机,惯性很小,舵机需要快速反应,意义不大,而且调试也太麻烦。当前不足之处:
1.精度有点差,误差在1.5度左右,惯性小但还是有,刹车后还会冲一点,因为我一直使用12伏电压,所以没有进行惯性修正,如果根据方向提前刹车就好了,但总归是有点误差。下一步计划进行惯性修正。
2.没有用到电机驱动芯片A4959的AIOUT功能,按照数据手册,这个是监测峰值电流的,我测了几次,都没有测出电流值出来,如果有这个电流,进行惯性修正,控制精度会更好。不清楚啥原因测不出来,我的固件中没有利用它。
3.固件编写水平比较烂,使用了大量的全局变量,最好是使用状态机,因为还没学通,就这样吧。4.没有使用CAN ID过滤器,应该只接受上位机发给自己的指令,下一步计划加入。


第十一步:整理一下改造过程,发到数码之家论坛。
过年这段时间没啥事,就干这个吧。
还是看看大家反应在发源代码吧。



附件:
1、文中涉及的芯片数据手册:角度传感器的pdf里MPS加入个人信息,故只提供图片版。ATSAMC21芯片的数据手册太大了,就不传了,可以到官网去下载。

A4958_59.pdf (472.67 KB, 下载次数: 9)

ASF4 API Reference Manual50002633B.pdf (2.15 MB, 下载次数: 3)

ATA6561.pdf (712.74 KB, 下载次数: 2)

Atmel-START-User-Guide-DS50002793B.pdf (5.36 MB, 下载次数: 3)

MPM3506AGQV.pdf (931.19 KB, 下载次数: 3)

YJ33.pdf (381.13 KB, 下载次数: 1)

MP9960.pdf (1.26 MB, 下载次数: 19)

2、舵机控制器固件:
控制器源码.zip (806 Bytes, 下载次数: 9, 售价: 6 M币)

3、上位机源代码:
上位机代码.zip (51.18 KB, 下载次数: 10, 售价: 6 M币)

4、舵机固件源代码:
固件源码.zip (1.68 MB, 下载次数: 10, 售价: 6 M币)


打赏

参与人数 14M币 +301 收起 理由
fantion + 20 優秀文章
xqmnig + 30 優秀文章
lgq_1074 + 20 技术强贴,必须顶上
wang737 + 12 優秀文章
csnyj001 + 18 没有看懂,也要绑顶
EMZ1 + 21 研究专业,技术扎实!
dh1905 + 50 楼主研究的高级
fm007 + 20 原創內容
逃亡的饭粒 + 10 優秀文章
nokia5320 + 20

查看全部打赏

本帖被以下淘专辑推荐:

2#
发表于 2021-2-16 20:34:05 | 只看该作者
这个比较深了
3#
发表于 2021-2-16 21:32:26 来自手机浏览器 | 只看该作者
666,楼主研究的高级
4#
发表于 2021-2-16 21:52:57 | 只看该作者
高、实在是高
5#
发表于 2021-2-17 11:43:04 | 只看该作者
高手,看见编程头都大了
6#
发表于 2021-2-18 07:51:37 | 只看该作者
高手,太复杂了
7#
发表于 2021-2-18 08:18:18 | 只看该作者
舵机是干啥的啊,
8#
发表于 2021-2-18 08:57:09 | 只看该作者
楼主研究精神可嘉
9#
发表于 2021-2-18 09:10:36 | 只看该作者
太高级了,太难了。敬佩。
10#
发表于 2021-2-18 10:20:24 | 只看该作者
不懂,支持一下!
11#
发表于 2021-2-18 10:44:41 | 只看该作者
自己重新写固件的都是高手
12#
发表于 2021-2-18 10:52:48 | 只看该作者
不玩航模,但这种技术贴,一定支持!
13#
发表于 2021-2-18 11:02:01 | 只看该作者
感觉可以利用来做挖掘机!!
14#
发表于 2021-2-18 11:17:32 | 只看该作者
其实MP9960就是MA750,新金沙赌博网:也可以直接参考官网的MA750资料

15#
发表于 2021-2-18 11:40:49 | 只看该作者
高手!                                   
16#
发表于 2021-2-18 12:06:17 | 只看该作者
学习了,原来不知道通讯协议,要自己重新编程才行,不过也太麻烦了。
17#
发表于 2021-2-18 13:44:17 | 只看该作者
楼主好强
向楼主学习
18#
发表于 2021-2-18 13:55:51 来自手机浏览器 | 只看该作者
这个过于高深了,看不懂
19#
发表于 2021-2-18 14:28:51 | 只看该作者
很深奥,长见识了,谢谢分享!
20#
发表于 2021-2-18 16:36:52 | 只看该作者
固件编程小能手。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|关于我们|联系我们|网站条款|数码之家 ( 闽ICP备05031405号 )

GMT+8, 2021-2-26 01:05 , Processed in 0.202801 second(s), 27 queries , Redis On.

Powered by 太阳城亚洲现金真人荷官

© 2001-2019 Comsenz Inc.

www.vni99.com登入 返回顶部 返回列表
申博娱乐棋牌 上申博网登入 七星彩票app下载直营网 澳门溜冰场 澳门现金娱乐网排行登入 葡京IM申博最牛攻略
XTD旗舰馆娱乐网登入 申博开户中心现金网登入 菲律宾申博太阳城游戏站登入 菲律宾申博太阳城官网网址多少 mg老虎机注册送彩金登入
bbin官方网站游戏 菲律宾申博直营网客服登入官网 宝马娱乐手机app官方网 九五至尊mg电子登入 澳门金沙网址网站
新濠娱乐平台直属登入 太阳城申博客户端下载登入 澳门新葡京开户登入 申博太阳城维护时间登入 阿玛尼重庆幸运农场官方网