经过之前几天的快速学习,今日尝试组装一款基于MPU6050陀螺仪控制的二自由度机械臂,本文对其使用器材以及基本原理进行介绍~
组装效果图:
主要元器件如下:
器件 | 个数 |
15 KG以上 舵机 | 3 |
适合舵机的金属夹爪 | 1 |
18650电池电源12V | 1 |
云台支架 | 2 |
云台底座 | 1 |
zigbee DL_20无线模块 | 2 |
LM2596S 直流稳压模块 | 1 |
STM32 F103 C8T6最小系统板 | 2 |
杜邦线 | 若干 |
螺丝 | 若干 |
原理介绍:
原理我只讲框架了,因为具体内容在之前的STM32F103C8T6 相关的文章都有讲过
所用知识主要有:
1.舵机旋转角度的控制:
单片机定时器三个通道输出PWM控制舵机旋转,PWM频率固定,通过改变占空比来调整角度
2.俩片单片机通过无线模块进行通信:
单片机A搭载了MPU6050六轴加速度角度传感器,负责解算人手握其的姿态角,并传数据给单片机B,单片机B负责获取数据控制机械臂旋转角度,俩者串口上都连接有Zigbee DH_20无线通信模块,本质也就是串口通信。
3.MPU6050六轴加速度角度传感器:
为消除错误,提升测量数据可置信度,使用一阶互补滤波,短时角加速度数据置信度高,长时角度数据置信度高,俩组数据互补,相辅相成。
遇到的困难:
1.串口通信:
串口通信是最大的困难,串口能正常配通是极其不容易的事情,会受各种干扰因素影响,相关文章也有所提及:STM32 F103C8T6学习笔记7:双机无线串口通信_
STM32 F103C8T6学习笔记7:双机无线串口通信_NULL指向我的博客-CSDN博客
2.MPU6050姿态角的解算:
难点在数据抖动,数据置信度提升,读懂IIC通信地址,移植IIC软件模拟时序代码,这都十分耗费时间:STM32 F103C8T6学习笔记6:IIC通信__驱动MPU6050 6轴运动处理组件—一阶互补滤波_
STM32 F103C8T6学习笔记6:IIC通信__驱动MPU6050 6轴运动处理组件—一阶互补滤波_NULL指向我的博客-CSDN博客
3.PWM配置:
主要是理解频率与占空比,定时器时钟树配置,定时器选择时钟源,定时器分频重载值的选定,计算定时器定时溢出频率:
STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度_NULL指向我的博客-CSDN博客
STM32 F103C8T6学习笔记4:时钟树、滴答计时器、定时器定时中断_NULL指向我的博客-CSDN博客
设计思路:
分为俩个STM32F103C8T6的单片机系统来讲:
单片机A负责对接MPU6050模块,通过IIC通信获取传感器数据来解算姿态角,通过一阶互补滤波提升信息置信度,保证传出的数据是比较正确的。这个传输速率为5Hz,每秒5组数据。
单片机B接收单片机A传回的数据,俩者通过Zigbee DH_20模块进行无线通信,获取数据局后使得机械臂对应部件转过相应角度即可:
后来由于无线通信5Hz回传出现莫名其妙卡顿,便放弃了无线通信的想法,改为有线控制,可能是C8T6不太行。
实测视频演示:
STM32F103C8T6开发笔记1:有线陀螺仪二自由度机械