本帖最后由 day_day 于 2018-6-9 21:59 编辑
感谢万利电子和nxp社区提供的板卡,感谢网友大道至简和论坛在开发过程中给予的帮助。
(一)项目名称
桌面级(端水)机械臂
支持安卓上位机和串口通讯控制
(二)项目概述
1、整体设计
一开始拟定开发带有语音功能和半闭环控制的桌面级机械臂,演示功能指定在端水上面。但由于开发过程的种种问题,目前语音功能和半闭环都还没能实现。目前可以实现基于顺解和逆解的定位定速控制。
四月份整个月都把时间耗在了lpcopen库上面,结果哪个库死活无法生成双核代码,无奈在五月份换了SDK2.3,也因为这个原因,拖慢了开发的进度。此外,机械结构的建模和搭建也消耗了相当多的时间,以至于最终没能很好地实现预期功能。值得一提的是,网友在我换SDK的时候给我提供了建议以及SDK文档和DEMO例程,这里再次感谢。
2、硬件设计
机械臂的结构、驱动设计拟定为采用步进电机驱动的三轴机械臂。
步进电机驱动方案采用CNC SHIELD驱动板+A4988模块。
步进电机采用42BYGH40,额定电流达到1.7A,转矩420Nm。
限位采用常开的三线式限位。
无线模块采用esp8266。
半闭环传感器拟定采用ADXL345倾角传感器。
夹持轴舵机采用MG996R。
水位控制采用5V水泵。
通讯形式可选安卓apk上位机和串口通讯
3、已实现功能与未实现功能说明
42BYGH40这款步进电机的额定电流高达1.7A,调节电压需要调节到1.94V
但实际上最高只能调节到1.2V,扭矩无法达到最高值。而且之前更是没有严格计算过扭矩,所以目前的情况是末端装上夹头之后连安装舵机都会超过定力矩,就更别说夹持水杯了。(演示里面有翻车视频)
另外,半闭环所选用的ADXL345倾角传感器的测量的突变点(水平位置、垂直位置)的值给逻辑判断带来了极大的麻烦,目前未能成功地将半闭环引入控制算法,因此算法仍是开环控制。
(三)实现方案
本项目主要在于控制逻辑的实现:
1、程序设计
1) 全局变量设计Ø步进电机驱动轴:主轴、副轴、回旋轴 Ø系统空间坐标设计采用柱坐标:x、y、r Ø系统实时记录的坐标点位: 限位值:碰到限位时候的数值 原点值:人工设置的原点,碰到限位后回归,与限位值不同 目前值 目标值 2) 程序框架设计现阶段首先设计开环控制程序。为了准确确定速度,采用定时器准确发出控制脉冲,并且在主循环阶段开启限位引脚的外部中断,保证运动的安全性。 3) 主程序初始化:外设初始化——主轴副轴回退——碰到限位,将目前坐标设置为限位值——转到原点值——进入主循环 主循环:接收信息——确定指令——传送到执行核心——运动逆解——栅格化——计算分频系数——启动定时器 4) 定时器中断启动后,每单位时间中断一次。(单位时间设定为100us,通过分频系数与匹配寄存器设置)。 清除所有步进驱动引脚的高电平状态——清除中断标志——拉高电平——修改目前主轴、副轴角度值——更新对应x、y坐标值——判断等待每个轴低电平等待时间是否结束——未结束跳出中断——如果结束则判断是否到达——未到达则使能电平拉高定时器 5) 外部限位的引脚中断某一轴碰到限位——进入中断,清除标志位——把对应轴的目前值和目标值都设为零点值——计算对应的x、y坐标值——除能对应中断——回原点——使能中断
2、双核运用上位机与lpc54110的通讯部分在m0+核心执行,其后指令传送到m4核心进行空间逆解运算和控制。相对而言可以避免发射和接收时间带来的延时误差。
3、运动逆解
3、中断间隔时间计算
(四)实物图
水泵和舵机(由于电机选型和机械臂结构设计的原因导致扭矩不足目前没能用上):
全家福:
三轴电机细节:
CNC SHIELD V4
没有使用的口通过长脚排座引出:
运行情况:
(五)演示视频
运行演示:
夹持演示:
安卓apk上位机控制演示:
(六)项目代码
单核版本:
单核版.rar
(5.26 MB, 下载次数: 6)
|