资讯专栏INFORMATION COLUMN

DIY桌面机械臂__FOC电机驱动

hosition / 884人阅读

摘要:一硬件框架与模型设计机械臂最核心的部分应该就是关节部分的伺服电机了,针对与文稿中的设计思路,每个伺服电机都为一独立的控制系统,并通过总线的形式获取数据并控制。

### DIY桌面机械臂__FOC电机驱动器(#002)


前言

​ 之前写了个设计桌面机械臂的文稿,本来按照流程要先对做一些基础的仿真和测试、可行性分析,但是后来觉得可以在实作过程中边研究边制作;而且看了一下高级的伺服电机机器人节点咱也买不起,就想从零开始学习并设计机器人模组,本人不是机械工程出生,但对控制类的系统有浓厚兴趣,便开始执行并在博客中分享该项目的过程,并希望能和大家一起讨论。

一、硬件框架与模型

​ 设计机械臂最核心的部分应该就是关节部分的伺服电机了,针对与DIY文稿中的设计思路,每个伺服电机都为一独立的控制系统,并通过CAN总线的形式获取数据并控制。

​ 测试电机选择2804云台电机,是个7个极对数的无刷电机,至于为什么选这个,淘宝上几元就能买到。初步考虑,硬件驱动的pcb部分与电机安装一体。

1. 硬件原理图

​ 三相MOS驱动器用的是L6234P,最大电压52V,瞬时最大电流5A,让这个小电机转起来应该是绰绰有余。单片机还是选用比较常用的STM32F103C8T6,但是最近价格涨的厉害,就换成了GD32同类型,传感器采用磁感应器件AS5600,角度分辨率是12位,电压采用12V供电,通过MT2492 DCDC降压到5V。

​ 这里给出无刷电机驱动器的硬件原理图PCB图

底层 顶层

2. 模型与安装

​ 为了方便设计与安装,这里把电机和驱动板绘制成3D模型,具体如下

至于为什么设计的电路板比电机大一圈,看起来不紧凑,是因为为了安装孔的位置以及较多的元器件,实在无法缩小板子的体积,但是对后面的设计与测试影响不是很大。

二、电路制作与测试

1. 电路制作与修改

​ 拿到板子和器件后,立马进行焊接与测试,下图是单面焊接完成的情况。

​ 直到编写软件才发现在原理图中根本就没有AS5600的接口,往往检查好pcb的规则后就应该是设计投板的最后一步了,这样的错误确实足够愚蠢的。

后来,直接通过跳线到PB11,PB10的两个引出来的焊盘上,才通过程序测试。

​ 关于中间那部分支撑是根据电路板的结构去设计,但是感觉这样设计的问题在于每修改一次电路后,与之接触的部分模块都要重新设计。!

2. 程序设计与pid角度控制

  • 首先要做的就是把单个模块都调通,再进行下一步的操作

  • 其次再进行pid的参数调节,达到比较合适的状态

    2.1 AS5600的传感器

    首先进行AS5600的传感器参数读取,并通过串口打印出来观察,一开始对于I2C协议,想到的是STM32的硬件I2Cmaster,因为相较于模拟IO,响应会快一些,并且不会占用cpu资源,但是后来测试发现系统的中断对快速读取的I2C程序部分有影响,会直接卡死,所以后来还是选择了模拟IO的方式。

2.2 SVPWM控制开环

这里采用了simple foc的设计,并实现了电机的开环运行。

2.3 闭环pid控制

​ 给出控制电机的核心代码,由于没有加积分,所以存在的静态误差让人很难以接受,后续再进行改进

void my_close_p_con(void){      float a_er=0;      float s_a=0;      float an_p_cofe=15;    //角度的比例参数      float vq_p_cofe=30;    //力矩的比例参数      float vq_d_cofe=450;	 //力矩的微分参数      static float a_er_l=0;      float an_pid_o=0;    //角度pid输出      float vq_pid_o=0;	   //力矩pid输出      float an_pid_max=0.3;  //最大牵引角度(我也不知道为啥我要这么命名)      float d_dat=0;		//微分量	  float ang_shift=0;    //绝对的角度控制参数      s_a=FilterDeal(getAngle());  //滤波后的电机角度值      a_er=target_angle-s_a;   		//误差值            an_pid_o=a_er*an_p_cofe;   //角度只有比例控制           if(an_pid_o>an_pid_max)//限幅      {          an_pid_o=an_pid_max;      }      else if(an_pid_o<-an_pid_max)//限幅      {        an_pid_o=-an_pid_max;      }       d_dat=a_er-a_er_l;   //微分量的输出等于这次的误差减去上一次误差      vq_pid_o=fabs(a_er*vq_p_cofe+d_dat*vq_d_cofe);     //力矩的参数控制,比例加微分(因为震荡严重,所以加了d)      if(vq_pid_o>max_p) //力矩限幅      {        vq_pid_o=max_p;      }         ang_shift=init_ang_bias+s_a+an_pid_o;  //绝对角度等于静态校准偏差加上跟踪的角度值加上pid的偏移量实现角度控制	  S_Uq=vq_pid_o;        move(ang_shift);   //运行      a_er_l=a_er;  //保存误差

更新时间:2021 - 9 - 6

持续更新,一起交流!!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119499.html

相关文章

  • 电机控制及调参

    摘要:有刷电机结构简单开发久技术成熟响应速度快,起动扭矩大运行平稳,起制动效果好控制精度高使用成本低,维修方便而无刷电机由于无电刷,具有低干扰噪音低运转顺畅寿命长低维护成本等优点。电机控制方式力矩控制指定电机提供设置大小的力矩。 ...

    不知名网友 评论0 收藏0
  • U8g2图形库使用技巧记录(1)

    摘要:支持显示控制器,,,,,,,,,,,,,,,,,,,,,,等。和的功能包括包括所有图形程序线框圆画。支持很丰富的字体库。仅文本输出字符设备。仅允许使用每个字符固定大小像素的字体。直接写到显示屏上,无需微控制器中的缓冲需要消耗较少的空间资源。         ~~呆萌的瓦力平衡机器人~~的显示...

    李昌杰 评论0 收藏0
  • SimpleFOC移植STM32(四)—— 闭环控制

    摘要:力矩控制模式电机在运行过程的电流,始终等于给定的值。设定电流为零,弹簧不被拉伸。比如机械臂从点运动到点,并限制挥舞过程中的最大速度和最大力矩。 目录 说明一、电机...

    stefanieliang 评论0 收藏0
  • 四足机器狗——12自由度舵机狗DIY(一)

    摘要:四足仿生机器人具有高机动性,负载能力和适应能力强,可运用于物资运输抢险救援等方面,具有广阔前景。由于制作电机狗需要高昂的成本。自主设计制造一款舵机狗来学习研究四足机器狗的步态算法是一件性价比极高且很有意义的一件事。 文章目录 前言 一、初步了解四足结构 1.1.2串联机构 1.2 ...

    不知名网友 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<