




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
某宝白菜价白牌总线舵机研究记在某宝上淘换了两个白牌的单总线舵机(拆机件,店主介绍说是某必选机器人上面的关节舵机),巨便宜,11块5。如果你到某宝上查看下配套齐全的总线舵机是什么价,就知道这个白牌舵机是不是白菜价了。但白菜价有白菜价的道理,这款舵机没资料,没协议。于是拆解并研究之,最终目标是搞明白通信协议,使用arduino驱动它。至于购买链接嘛,由于店主木有给赞助,所以不贴了,大家想买的话去某宝上找找。这篇文档是关于此舵机的全部研究记录,循序渐进。声明:本项目只是因为个人兴趣而建立的,所有内容仅供研究实验所用,hack他人代码直接用于商业目的是一种不道德的行为,由此导致的商业纠纷一概和本人无关,请支持技术原创。正文1. 外观1. 拆解2. 驱动板电路细节测量分析测量电路主要是为了后面分析程序,所以只关注关键细节即可,具体到边边角角的电阻电容则不去关心,下面是驱动板基本的电路图3. 使用avrdude读取主控芯片从上文的拆解图中有关驱动板正面的部分,可以看到有一个6PIN的排针焊孔,当时猜测可能是ISP烧写程序的接口,使用万用表测了一下,果然是!从电路上说,可以烧写程序,则当然可以读出程序,但是必须要有一个前提: 舵机的固件作者没有修改熔丝位锁死ISP功能于是乎,抱着试试看的态度,祭出了我的神器usbasp,有了下面的连接图:然后使用下面的这条命令尝试读取mega8的flash:avrdude -cusbasp -pm8 -U flash:r:mega8_servo.hex:i事实证明,固件的作者很厚道,极其厚道!读出的HEX文件我已经放到项目中了,文件名: mega8_servo.hex4. 反汇编好了,现在hex文件拿到了,下一步就是反汇编之,得到汇编代码,命令如下:avr-objdump -D -m avr mega8_servo.hex mega8_servo.s这份汇编代码文件我也放到项目中了,顺便提一句,你现在在项目中看到的mega8_servo.s不是反汇编得到的初始文件,我加了很多注释。5. 汇编代码概览有个小插曲:当时刚开始分析代码的时候,无意中在电子发某某网站上搞到了一份某必选舵机协议(协议PDF也在本项目中,自取,doc目录 UBTECH_servo_manual.pdf),刚拿到的时候心里一阵窃喜,以为用不着分析代码了,但仔细看了一下,顿时兴致大减,截图为证:这份协议说明最大的问题在于,仅仅说明了协议帧格式,而对于各种参数的细节含糊不清,注意红框标出的地方。以0x01命令为例: 目标位置 : 数值单位是什么? 取值范围是多少? 支不支持负数? 运动时间 : 这个时间是什么含义? 单位? 取值范围? (这个参数是我最后才彻底搞明白的,其他参数程序分析到一半的时候就清楚了) 运动完成时间 : 和上面的问题一样, 具体含义/单位量纲/取值范围 无一不是含糊不清所以,想彻底搞懂协议,最终还是要去分析汇编,这份协议列出的帧格式相当于关键线索,可以给分析代码中的协议细节带来很大的帮助。断断续续花了二十天的业余时间,整份反汇编代码除了bootloader的部分没看,其它几乎都分析完了,收获超过预期: 协议的所有细节; 程序的整体结构; 发现了隐藏的彩蛋; 发现了几处BUG(无伤大雅)。老实说,这份程序写的很糙,甚至可以说非常糙: 代码不精练,大量重复代码; 流程控制没有状态机,全局变量满天飞; 相当多没有意义的全局变量定义和操作; 几乎所有关键函数都是无形参,函数间全部是通过修改全局变量完成数据交换; 定时功能有BUG,定时不准。粗列一下此固件的内部情况(如果想亲自分析下反汇编,这些信息很有用): 99%的可能性,源代码【不是】使用avr-gcc编译的 mega8总共8Kb flash,高地址处1Kb给bootloader使用,固件使用剩余7Kb mega8上电或复位后直接运行固件,只能通过一个隐藏的协议命令使mega8跳转到bootloader处运行 串口波特率等参数和前文提到的协议文档中的描述一致 串口RX启用了 Rx Complete 中断,在ISR中完成命令帧的接收 串口TX使用轮询方式向主机发送ACK帧 PWM输出使用Timer1,工作模式 fast PWM,PWM频率15KHz 内部定时使用Timer0,时基100uS(ISR中手动重装初值,定时不准),定时触发ADC采样,在T0_OVF_ISR中通过几个计数器分频得到300uS(疑似BUG,可能本意是200uS)、1100uS(确定BUG,计数器边界检查有误,本意1ms,实际1.1ms),各种定时信号通过修改各自全局BOOL变量的形式通知其他ISR或主循环 角度ADC采样在对应ISR中完成,100uS一次,结果放入全局变量,并绑定一个全局BOOL变量 采样值使用前有简易滤波,8次历史采样值求平均值,滤波在主循环中完成 电机控制算法仅使用了比例控制器,无微分也无积分,只不过根据角度误差的大小查表选取不同的比例控制系数,误差越大,系数越大,对误差进行了过饱和控制6. 舵机协议详解待补充。7. 自制单总线通信板除了协议格式不同,市面上几乎所有的3线接口串口总线舵机通信方式都一样:信号线实际上就是一根TTL电平线,TX和RX分时复用这根线,主机和所有的舵机都挂在这根线上,一主多从;同一时刻只能有一个节点向外发送数据,所有节点同时监听信号线这根线;舵机控制的步骤: 任何一次通信过程都必须由主机主动发起; 主机发送数据,数据附带目标舵机地址,所有舵机同时接收数据; 发送完毕,主机转入监听状态,等待目标舵机的回应; 舵机识别出是目标是自己,解析执行主机命令;若目标不是自己,忽略这条命令; 目标舵机命令执行完毕后,在信号线上发送回应数据,其余舵机自动忽略此数据; 主机接收到数据,控制过程结束。明白了工作过程,通信板的作用就比较好理解了。直接将主机端TX、RX短接在一起连上信号线是不行的,这样TX发出去的数据会直接从RX上传回来,要使用某种电路将主机端的TX RX隔离开,TX发送时不让RX检测到数据,TX空闲时RX接收其他节点的数据不受影响。某宝上可以很容易的买到这种功能的转接板,20多块,其实比较贵。在这里我提供一种自制通信板的方法,电路是我自己琢磨出来的,绝对原创。一个CH340 US
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版商场设施更新换代合同范本
- 2025电子商务合同法指导下的网络直播带货合作协议
- 2025年度高端茶叶原产地直供购销合同模板
- 2025灯具批发零售合同示范文本
- 2025版服装生产设备租赁与维修服务合同
- 2025年男方出轨离婚协议:财产分割、子女抚养及离婚赔偿
- 2025年度保险理赔法律援助服务合同样本
- 2025 高密市PPP项目PPP项目合同
- 2025新版中介房屋租赁合同范本
- 语言文字知识培训方案课件
- 物业客服管理知识培训课件
- 2025海南省老干部服务管理中心招聘事业编制人员6人(第1号)考试备考题库及答案解析
- 居民体重管理核心知识课件
- 2025-2026学年湘教版(2024)初中数学八年级上册教学计划及进度表
- 2025至2030中国公安行业发展趋势分析与未来投资战略咨询研究报告
- 口腔医疗风险管理实施方案
- 2025互联网营销师三级理论考核试题及答案
- 新生儿持续性肺动脉高压个案护理
- bbc国际音标教学课件
- GB/T 45763-2025精细陶瓷陶瓷薄板室温弯曲强度试验方法三点弯曲或四点弯曲法
- 贵州省贵阳市2024-2025学年八年级下学期期末道德与法治试卷(含答案)
评论
0/150
提交评论