查看: 6892|回复: 6

[作品提交] TARM机械臂下位机控制卡

[复制链接]
  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
    发表于 2020-1-15 21:19:12 | 显示全部楼层 |阅读模式
    本帖最后由 day_day 于 2020-3-11 22:09 编辑

    (一)作品介绍

    该参赛作品为针对液体搬运环境优化的机械臂下位机运动控制卡。针对日常生活中一个常见的场景——搬运液体(俗称“端水”),设计一项高效平稳的控制算法,配合自主开发的控制器驱动板卡,驱动自制的机械臂到达目标位置,使该算法达到高效平稳搬运液体的目的。

    机械臂外观:

    机械臂机械结构.png

    控制卡驱动板:

    控制卡驱动板.png

    以下是新的驱动板:
    驱动板 新.jpg
    该驱动板修复了上一块驱动板的一些布线问题和布局问题。


    (二)
    电气介绍
    1、
    电机驱动模块选型。电机驱动模块采用DRV8825、A4988混合驱动。
    A4988是一款常见的步进电机驱动芯片,其模块广泛用于3D打印机的步进电机驱动,适合42步步进电机在负载不大的情况下驱动运行,因此可用于回转轴驱动
    最重要的是,在两块DRV8825模块同时驱动的情况下,剩余功率不足以提供第三块DRV8825动作,经实测两块DRV8825与一块A4988能够正常运行。DRV8825是德州仪器的集成电机芯片,其模块设计兼容A4988,但稳定性更好,能够提供高达1.5A的电流,适合驱动负载稍大的步进电机,因此可用于驱动主轴和副轴。


    2、位姿反馈方案设计。采用MPU6050六轴运动传感器,包含陀螺仪和倾角传感器,能够通过I2C与上位机通讯。在每次运动起始和完成阶段进行一次位姿矫正,防止运动误差累积。


    3、
    旋转舵机选型及驱动方案设计。舵机采用MG996R型号的180°舵机,该舵机工作在4.8-7.2V之间,能够提供9.4kg/cm以上的拉力。为了满足驱动舵机的功率以及防止舵机运行时的电流涌浪,舵机采用额外的5V供电,驱动端口采用光耦IC隔离。光耦IC型号选择为PC817
    夹持舵机选型。夹持舵机采用mg90,以减少机械臂末端承重。

    4、
    供电体系设计。系统由12V直流电源供电,经过一块MP1584模块降压为5V直流电源,供给传感器与主控板卡。另外12V直流电源还通过另一块MP1584模块降压为5V向舵机供电。

    5、
    上下位机通讯方案设计。由于受各种较大功率的设备影响,系统存在一定的电源涌浪,CH340G芯片以及主控板卡板载的DAP仿真器无法正常工作在这个电源体系下,因此需要采用更稳定的工业串口通讯方案——232通讯或者不受涌浪影响的透传蓝牙模块HC-06。


    (三)程序组件介绍

    communication组件
    负责对上下位机通讯。
    外设启动了两个串口:FL0控制台串口、FL2设备串口。控制台串口位于板卡上;设备串口通过arduino型接口与驱动板连接,驱动板上可以通过跳帽选择使用RS232或者无线蓝牙模块作为传输介质。支持打断控制。
    指令为自定义命令集,格式如下:
    _&<命令><参数>;<命令><参数>;<命令><参数>
    参数支持包括:

    COMMAND-1.png


    timer组件
    定时器定时实现。timebase为第一套算法提供时基,该算法仅支持一般恒速运动,可以调节一次运动的速度;可以实现三轴联动;使用的时钟是CTIMER0。timepv使用时钟CTIMER1为第二套算法提供时基,该算法仅支持主轴、副轴联动;对运动过程有变速控制,为针对液体平稳搬运环境的优化算法。
    SYSTICK时钟提供延时

    CTIMER2提供速度仿真计时器时基,功能用于开发工程中评估算法消耗时间。

    limit组件
    限位器组件
    协助机械臂进行初始化定位。
    限制机械臂运动行程。通过外部中断实现。触碰到限位器时,返回设定的零点。

    IO组件
    对脉冲输出端口、方向控制端口配置、初始化。控制主轴、副轴、绕Z旋转轴的三个步进电机。。


    Closeloop组件
    反馈控制。通过硬件IIC总线访问MPU6050,校准运动误差,使运动误差不积累。在外部因素影响导致IIC硬接线断开时,能自动转化为开环模式。

    pwm组件
    通过输出PWM控制夹持末端回转轴、夹持轴的舵机。

    (四)程序结构
    程序结构.png
    middleware为驱动层,hardware为接口层,application为与硬件完全屏蔽的运动框架层
    组件的分类大体是按照hardware层来分
    使用的资源可以从middleware看到

    (五)单核工程使用资源介绍
    1-ctimer定时器
    程序的核心就是通过定时器控制脉冲周期,不同的轴、不同的运行方式需要不同的ctimer,此外速度仿真也需要计时器提供时基。该项目中一共使用了三个ctimer定时器。
    相关程序在middleware的tarm_ctimer源文件内。

    2-iic
    iic与角度传感器通讯,反馈位姿信息
    相关程序在middleware的tarm_iic源文件内。

    3-uart
    下位机通过uart与上位机通讯。通讯形式为自定义指令,上面有定义
    上位机界面.png
    相关程序在middleware的tarm_uart源文件内。

    4-powerquadpowerquad运算对运动速度精度的提升尤为明显,该框架下的运动,运算时间都是额外算进去的,运算时间越长,运动失真越厉害,特别是高速运动时达不到指令预设速度。powerquad加速令该情况大为改善,相关分析见二楼。
    相关程序在middleware的tarm_math源文件内。


    5-PIN中断
    当角度传感器无效时,运动自动变为完全开环状态,这时候需要限位装置初始化机械臂的定位。
    触碰到限位时,需要触发PIN中断,保证行程不过限制。
    相关程序在middleware的tarm_exit源文件内。

    (六)双核工程使用资源介绍


    除单核所使用的五个外设外,双核工程的从核心额外添加音频播放功能,单独使用一个核心进行音频处理可以有效避免资源抢夺,运动完成一次后,通过MAILBOX向从核心发送信号,从核心播放音乐。因为指令发送可能是频繁的,因此播音的过程可能再启动一个运动。采用另一个核心处理音频,即保证音频信号的连续传输,也不会影响可能正在进行中的运动计算。



    双核工程的额外功能:

    1-SDIO+FATFS

    通过SDIO驱动TF卡,通过FATFS读取所需的音频文件


    2-DMA+IIS+IIC,驱动WM8904进行音频播放

    FL4外设作为IIC,FL7外设作为IIS,驱动WM8904板载WAV解码IC播放音乐,通过耳机或者外部功放播放,每当运动完成时进行音频提醒


    3-MAILBOX

    使用MAILBOX进行主从核心之间通讯当主核心运动完成后,告知从核心,从核心播放音乐提醒。




    (七)工程与演示
    项目更新托管地址
    单核工程码云:
    http://gitee.com/tinnu/TARM_SLAVE.git
    双核工程附件:

    workspace7-lpc55s69-H3_TARM+TF+WM8904.zip (2.12 MB, 下载次数: 7)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
     楼主| 发表于 2020-1-15 22:23:26 | 显示全部楼层
    很奇怪,论坛写着写着文字格式就变了,还打不出字

    (四)平稳端水的液体搬运算法
    本设计关键在于算法的时效性。算法越快,运动速度控制越精准。
    这个算法基于一个三角函数的传递函数:
    在考虑速度、加速度、急动度的情况下,三角函数的运动特性最为优良,因此传递结构采用三角函数。变速的传递函数与不变速的传递函数如下图对比所示。
    传递函数示意图.png

    纵轴表示速度,因此积分后表示路程,由于阴影部分的面积互补,容易得到变速与不变速算法在单位时间内走过的路程是相等的。
    若χ取值范围为(0,1),对应三角函数相位为(0,2π),则周期为2π,构建数学模型

    传递函数-1.png

    ω——周期,这里取值2π
    vt——待求的实时速率
    st——待求的实时速率因素,根据速率因素可以求出本次延时需要的时间

    经过待定,A、B的数值如下式所示。
    传递函数参数整定-1.png

    sr——系统预设的速率因素参数,启动/停止阶段都以这个速度开始/截至,这里设定为1000ms/cm。


    (五)控制效果
    步进电机的控制是通过脉冲和方向实现的,控制速度是脉冲的功能,因此这里重点分析脉冲。

    本设在控制程序中嵌入了一个speed debug单元,这个单元可以输出运行过程信息和定时时间等信息,用于观察算法耗时与准确度。

    首先这里需要点明,该算法的控制脉冲从控制逻辑上是等占空的,但运算过程都在低电平时期,因此低电平时期会包含算法解算所需要的时间。

    通过逻辑分析仪,可以发现,脉冲最终产生脉冲高低电平间时差在1.2ms左右。

    未加速的逻辑采集.png

    而speed debug单元显示大概在1.4ms左右,就是每次脉冲回调都会因为CPU响应时间和逻辑判断消耗100-200us左右的时间,这个时间理论上是可以通过让定时器匹配完成后复位继续计时,而不是停止计时等待下次中断再启用来实现消去,但目前为了观察算法,不这么干。



    通过powerquad加速算法

    对LPC5500来说,最亮眼的无疑是比传统DSP核更快的PWERQUAD单元,能够实现三角函数运算和开放运算的加速。
    在对代码优化加速后,比如:



    1. void angle_to_xy(double prime_angle,double vice_angle,double *x,double *y)
    2. {
    3.         double pri_ang_c,vic_ang_c,pri_ang_s,vic_ang_s;

    4. //        pri_ang_c = cos(prime_angle/180*3.14)*prime_length;
    5. //        vic_ang_c = cos(vice_angle/180*3.14)*vice_length;
    6. //
    7. //        pri_ang_s = sin(prime_angle/180*3.14)*prime_length;
    8. //        vic_ang_s = sin(vice_angle/180*3.14)*vice_length;

    9.         pri_ang_c = tarm_cos(prime_angle/180*3.14)*prime_length;
    10.         vic_ang_c = tarm_cos(vice_angle/180*3.14)*vice_length;

    11.         pri_ang_s = tarm_sin(prime_angle/180*3.14)*prime_length;
    12.         vic_ang_s = tarm_sin(vice_angle/180*3.14)*vice_length;

    13.         *x = pri_ang_c + vic_ang_c;
    14.         *y = pri_ang_s - vic_ang_s;
    15. }
    复制代码



    同样的运动,通过逻辑分析仪可以看到,高低电平之间大概有500ms的时间差,缩小了超过一半。

    powerquad加速后的逻辑采集.png

    不要小瞧仅仅只是一半,这里面还有一个没有经过优化的asin和acos函数,虽然没有测过其速度,但绝对是耗时大户,这个500ms里面有不少是这两货折腾的。







    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
     楼主| 发表于 2020-1-15 22:30:49 | 显示全部楼层
    补充一个实物图,有图有真相。
    由于缺少机械臂实物,因此工作环境在开环控制,没有mpu6500提供反馈。
    逻辑分析.jpg
    程序、驱动板件BOM之类的后面补上
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
     楼主| 发表于 2020-1-17 23:58:56 | 显示全部楼层
    本帖最后由 day_day 于 2020-2-8 12:01 编辑

    晚上赶回家赶紧把新到的材料组了机械臂,结果发现我出图纸又出错了尺寸,只能用回旧的材料,折腾了一个晚上,只能勉强弄出点像样的动作。后面有时间再补上剩下的吧,先放个GIF
    驱动演示.gif

    终于搞好了夹头了,机械结构一直出问题,简直炸了: 水杯搬运演示.gif

    补充优酷端的视频:
    演示
    演示2

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
     楼主| 发表于 2020-1-18 00:06:53 | 显示全部楼层
    本帖最后由 day_day 于 2020-2-8 12:04 编辑

    V1.1工程: LPC55S69_Project.zip (715.22 KB, 下载次数: 10)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-11 11:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    5

    主题

    68

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    286
    最后登录
    2020-12-17
    发表于 2020-6-30 22:11:18 来自手机 | 显示全部楼层
    我这有六轴,希望能给楼主提供支持
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-7-11 01:29
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    0

    主题

    35

    帖子

    0

    注册会员

    Rank: 2

    积分
    69
    最后登录
    2020-11-14
    发表于 2020-7-7 21:51:04 | 显示全部楼层
    这个可以结合一个单独的遥控器来控制
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 14:26 , Processed in 0.136321 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表