|
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块多钱,因为用了券,商家还包邮,返现等。真不知道他们靠啥赚钱。其实这种探针下载器网上也有卖的,但是很贵,还是无法固定,于是还是自己做个专用的。见图:
制作方法:先用在舵机上用亚克力板做出形状,使板的边缘与触点平齐,在触点对应的位置刻出凹槽,探针在亚克力板上是用的哥俩好粘的,再焊上杜邦线,用热熔胶绝缘。
装在舵机上效果如下:
还是不错的。:lol:我对这个特别得意。
第四步:读取固件。
将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的,地址https://github.com/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芯片的数据手册太大了,就不传了,可以到官网去下载。
2、舵机控制器固件:
3、上位机源代码:
4、舵机固件源代码:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|