0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【开源获奖案例】四轴机械臂控制系统

迪文智能屏 2023-12-23 08:13 次阅读

——来自迪文开发者论坛
本期为大家推送迪文开发者论坛获奖开源案例——四轴机械控制系统工程师采用T5L智能屏,基于DGUS软件“旋转指示”控件实现机械臂的实时位置显示,并通过串口控制机械臂的运动过程。不同以往只展示机械臂的角度数值,该方案可以实现在屏幕上实时显示机械臂的旋转状态。除此之外,工程师还增加了机械臂自动运动功能。


UI素材展示 UI素材可根据实际的应用进行多样化的设计,工程师设计了一套富有科技感的界面。

130ef98a-a128-11ee-9788-92fbcf53809c.png

1319f4a2-a128-11ee-9788-92fbcf53809c.png

UI开发示例 1324131a-a128-11ee-9788-92fbcf53809c.png C51代码设计

(1)获取机械臂当前控制的角度:

//获取机械臂状态
void get_arm_config_status(){ u8 i = 0; for(i = 0;i < 4;i++)    {        arm_angle_value[i] = Read_Dgus(0x1100 + i * 2);        //Write_Dgus(0x1110 + i * 2, Va[i]);    }}

(2)机械臂的运动过程设计:使机械臂根据设置的角度,缓慢移动到指定位置。

//设置机械臂角度
void set_arm_angle(){ int i = 0; for(i = 0;i < 4;i++)  

{ if(arm_angle_value[i] != arm_angle_value_last[i])

{ if(arm_angle_value[i] < arm_angle_value_last[i])          

{ arm_angle_value_last[i]--; }

else

{ arm_angle_value_last[i]++; }

Write_Dgus(0x1110 + i * 2, arm_angle_value_last[i]); if(i == 1) //第二轴运动

{ u16 armiii_pos_x = 0; u16 armiii_pos_y = 0; u16 armiv_pos_x = 0; u16 armiv_pos_y = 0; armiii_pos_x = sin((float)(225 - arm_angle_value_last[i]) * TRIGONOMETRIC) * 80 + armii_start_pos[0]; armiii_pos_y = cos((float)(225 - arm_angle_value_last[i]) * TRIGONOMETRIC) * 80 + armii_start_pos[1]; armiv_pos_x = sin((float)(180 - arm_angle_value_last[i+1]) * TRIGONOMETRIC) * 83 + armiii_pos_x; armiv_pos_y = cos((float)(180 - arm_angle_value_last[i+1]) * TRIGONOMETRIC) * 83 + armiii_pos_y; armiii_current_pos[0] = armiii_pos_x; armiii_current_pos[1] = armiii_pos_y; OneSendData4(armiii_pos_x/256); OneSendData4(armiii_pos_x%256); OneSendData4(armiii_pos_y/256); OneSendData4(armiii_pos_y%256); Write_Dgus(0x2100 + 4, armiii_pos_x); //第三轴的位置 Write_Dgus(0x2100 + 5, armiii_pos_y); Write_Dgus(0x2200 + 4, armiv_pos_x); //第三轴的位置 Write_Dgus(0x2200 + 5, armiv_pos_y); }

else if(i == 2)

{ u16 armiv_pos_x = sin((float)(180 - arm_angle_value_last[i]) * TRIGONOMETRIC) * 83 + armiii_current_pos[0]; u16 armiv_pos_y = cos((float)(180 - arm_angle_value_last[i]) * TRIGONOMETRIC) * 83 + armiii_current_pos[1]; Write_Dgus(0x2200 + 4, armiv_pos_x); //第三轴的位置 Write_Dgus(0x2200 + 5, armiv_pos_y);

} break;

} }}(3)按键设计:开发者设计了复位、添加、删除、开始、停止按键功能//获取按键状态
void get_key_status(u16 addr){ u16 Va=Read_Dgus(addr); //u16 V1=Read_Dgus(0x0f01); if(Va != 0x0000)

{ if(Va == 0x0001) //复位

{ Write_Dgus(0x1100 + 0, 0); Write_Dgus(0x1100 + 2, 0); Write_Dgus(0x1100 + 4, 0); Write_Dgus(0x1100 + 6, 90); }

else if(Va == 0x0002) //添加

{ if(arm_auto_cnt < 5)            {                u8 i = 0;                u8 send_str[30] = {0};                for(i = 0;i < 4;i++)                {                    arm_auto_list[arm_auto_cnt][i] = arm_angle_value[i];                }                sprintf(send_str, "I:%d II:%d III:%d IV:%d", arm_auto_list[arm_auto_cnt][0], arm_auto_list[arm_auto_cnt][1], arm_auto_list[arm_auto_cnt][2], arm_auto_list[arm_auto_cnt][3]);                write_dgus_vp(0x1500 + 0x20 * arm_auto_cnt, send_str, 16);                arm_auto_cnt++;            }        } 

else if(Va == 0x0003) //开始 { auto_start_flag = 1; auto_start_cnt = 0; }

else if(Va == 0x0004) //停止 { auto_start_flag = 0; Write_Dgus(0x1100 + 0, arm_angle_value_last[0]); Write_Dgus(0x1100 + 2, arm_angle_value_last[1]); Write_Dgus(0x1100 + 4, arm_angle_value_last[2]); Write_Dgus(0x1100 + 6, arm_angle_value_last[3]); }

else if(Va >= 0x0010 && Va <= 0x0014) //删除内容    

{ u16 delete_select = Va - 0x0010; if(arm_auto_cnt > delete_select) //有删除的内容

{ u8 i = 0; u8 send_str[30] = {0}; for(i = delete_select;i < arm_auto_cnt - 1;i++)                {                    memcpy(arm_auto_list[i], arm_auto_list[i + 1], 8);                }        

memset(arm_auto_list[i], 0, 8); for(i = delete_select;i < arm_auto_cnt - 1;i++)              

{ sprintf(send_str, "I:%d II:%d III:%d IV:%d\0", arm_auto_list[i][0], arm_auto_list[i][1], arm_auto_list[i][2], arm_auto_list[i][3]); write_dgus_vp(0x1500 + 0x20 * i, send_str, 16); } memset(send_str, 0, 30); write_dgus_vp(0x1500 + 0x20 * i, send_str, 16); arm_auto_cnt--; } } Write_Dgus(addr, 0); }}(4)机械臂自动运动功能//自动运动
void auto_run(){ if(auto_start_flag == 1 && arm_auto_cnt >= 2) //动作必须两个及以上 { if(memcmp(arm_angle_value, arm_auto_list[auto_start_cnt], 8) != 0) //不等于

{ Write_Dgus(0x1100 + 0, arm_auto_list[auto_start_cnt][0]); Write_Dgus(0x1100 + 2, arm_auto_list[auto_start_cnt][1]); Write_Dgus(0x1100 + 4, arm_auto_list[auto_start_cnt][2]); Write_Dgus(0x1100 + 6, arm_auto_list[auto_start_cnt][3]); }

else if(memcmp(arm_angle_value_last, arm_auto_list[auto_start_cnt], 8) == 0) //当前运动等于目标

{ auto_start_cnt++; if(auto_start_cnt >= arm_auto_cnt)

{ auto_start_cnt = 0; } } }}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制系统
    +关注

    关注

    41

    文章

    6523

    浏览量

    110409
  • 冗余机械臂
    +关注

    关注

    0

    文章

    2

    浏览量

    1074
  • 智能屏幕
    +关注

    关注

    0

    文章

    64

    浏览量

    3304
收藏 人收藏

    评论

    相关推荐

    嵌入式系统和CAN总线的检修机械控制系统

    的特殊性,所以对机械整个控制系统的可靠性提出了更高的要求,这就需要良好的硬件电路设计、功能更强大的微处理器和更好的软件实现方法。本文以蒸汽发生器六自由度检修机械
    发表于 09-29 17:02

    嵌入式系统和CAN总线的检修机械控制系统

    工具,即可根据需要对蒸汽发生器实施不同程度的维护。  由于该机械的工作环境的特殊性,所以对机械整个控制系统的可靠性提出了更高的要求,这就
    发表于 09-29 17:07

    基于LabVIEW的自由度机械运动控制系统设计

    实行位置伺服和编码器反馈,对直流电机利用线性电位器反馈电压的方式实现了角度的反馈控制。借助LabVIEW8.2 的强大功能,我们得以在短时间内完成了控制系统的开发,同时保证了机械的运
    发表于 02-12 16:10

    开源工业机械开发套件

    `一、产品介绍: 小型码垛工业机器人是由一款桌面级开源迷你机器组成,配合本
    发表于 10-23 11:26

    开源工业增强型机械

    `一、产品介绍: 码垛机器人是一套开源化的码垛机器人,其设计特点为:速度快,成本低,超长的运行时间,便携化的图形化编程
    发表于 10-23 11:29

    【NanoPi M2申请】六机械控制开发

    系统控制机械控制开发系统,这样可实现由物联网对机械
    发表于 04-27 16:16

    采用LabVIEW实现自由度机械运动控制系统设计

    LabVIEW8.2的强大功能,我们得以在短时间内完成了控制系统的开发,同时保证了机械的运动精度与负载能力。自由度机械
    发表于 05-06 09:26

    众为兴SCARA机械编程概述

    众为兴SCARA机械编程(一)概述方案原理功能实现通讯功能机械编程整体结构参考代码要点概
    发表于 07-20 07:45

    工业机械的相关资料推荐

    本章小结第三章机械控制系统介绍3.1 基于Arduino控制伺服电机系统3.1.1 机械
    发表于 11-29 07:19

    基于单片机的三机械控制怎么实现

    文章目录三机械控制原理三机械接线三
    发表于 12-13 07:14

    基于最小二乘法的起重机机械关节控制系统

    基于最小二乘法的起重机机械关节控制系统
    发表于 06-19 16:29 12次下载

    基于FuzzyP的多臂机器人机械控制系统

    基于FuzzyP的多臂机器人机械控制系统
    发表于 06-22 15:07 13次下载

    由MPU 6050控制的简单2伺服机械

    电子发烧友网站提供《由MPU 6050控制的简单2伺服机械.zip》资料免费下载
    发表于 11-23 10:37 0次下载
    由MPU 6050<b class='flag-5'>控制</b>的简单2<b class='flag-5'>轴</b>伺服<b class='flag-5'>机械</b><b class='flag-5'>臂</b>

    控制机械开源

    电子发烧友网站提供《人控制机械开源.zip》资料免费下载
    发表于 01-31 14:43 4次下载
    人<b class='flag-5'>臂</b><b class='flag-5'>控制</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>开源</b>

    Python控制机械开源分享

    电子发烧友网站提供《Python控制机械开源分享.zip》资料免费下载
    发表于 02-03 10:06 3次下载
    Python<b class='flag-5'>控制</b>的<b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>开源</b>分享