发作品签到
专业版

基于stm32的机械四爪

工程标签

6.6k
0
0
4

简介

基于stm32f103c8tc设计的简易机械四足。

简介:基于stm32f103c8tc设计的简易机械四足。

开源协议

CC BY-NC-ND 3.0

创建时间:2023-11-24 09:11:48更新时间:2023-11-27 02:26:30

描述

前言

在刷b站时,偶然看到了一个up主制作的机械四足,于是突发奇想就做了一个简易版的,做的很简单见谅。mep3EVeqLWd6JUIOWLrQAx2b7Wz7k1UXYRV1Tu3u.jpeg

所需材料

1.一块stm32f103c8t6开发板

eavMFmzkMkljm5OXE7ZfHWANOlGDJ40wzAeb06yK.png

2.8个蓝色SG9经典180度舵机

pxrQHZ9ZTBVaQQ2ZLsrXCC1BPLVr9f0AyZwjlnUB.png

3.一块iic通信的oled屏(大屏小屏都可以)

SCQjMeCLl6Lo9HcpjDcscy4smi7Qtb6Nc1et1p7c.png

4.一块3.7v锂电池+一块5v锂电池  or  用我的懒蛋方法直接使用stlink供电

 

原理图和PCB设计说明

一共分为四部分:电源、oled、舵机、stm32板。

1.电源

ssO6VxCWQaqTu54L3hhPdJUMUKi1dCWDeJSv9cFX.png

只需要一个微型拨动开关+两个2p排针或者排母,也可以只放焊盘随后飞线链接电池。

用微型拨动开关控制stm32板子的供电。

3V3是给stm32f103c8t6板子进行供电的,可以用一块小的3.7v锂电池。

5V是给舵机供电的,可以用一块5V锂电池供电。

两块电池可以用热熔胶枪粘在底板的下面。

当然对于我这样的懒蛋来说,直接使用stlink上的3V3和5V驱动,还可以随时改代码。gblUyQNdFR27PP0q8KgR2skrRAjMoySMKkp895eu.gif

2.OLED屏的iic通信端口

bvv9JM2TYCiqGMdfAFuMRqgyqqawB1bCRLKHAYKZ.png

同样只需要一个4p的排针即可。

这里我用的屏幕可以3V3驱动,也可以根据使用更换5V。

通信端口SCl和SDA分别用的PA5和PA7这两个IO口(代码是这样写的),可以根据自己的代码进行更换。

如果用的是其他通信方式这一部分是需要自行修改的。

3.舵机部分

av2gBLJHDa1AiBf6xwGVffqrju3yMNJnxbvmxFF5.pnglsB2MwvSDiFrE3tCywKncqqw8H2JQtz1sjpTaqga.png

这里使用这些端口一个原因是因为距离近,后面排线简单。

其次在控制舵机写代码控制的时候,需要考虑TIM时钟,下图是stm32的TIM时钟对应的IO口。

 

dx0PIXmbSpOB4vOIFaG9FMM8j5sypY1CE3zROpjv.png

4.stm32f103c8t6

fpBCRuugAV3YiLH5F4hjk67aFDrUsrMWpTfEISJ4.pngLdSjMuOmJfN1pxzLJi9JVMKdod7fJCpXwD5HwTZB.png

这里就是用排母把stm32的每一个串口都画出来。

在pcb里要注意排母间距,不然打出来插不进去。

 

代码部分说明

使用的keil5来进行编程,这里其实只需要编写一下PWM的文件,oled直接抄网上整理好的头文件就好了。

PWM部分

需要先查看stm32的TIM时钟表

dx0PIXmbSpOB4vOIFaG9FMM8j5sypY1CE3zROpjv.png

我这里选用了TIM2和TIM4,所以要对PA0、1、2、3和PB6、7、8、9这几个IO口进行定义:

void Pwm_Init_TIM2(void)
{
GPIO_InitTypeDef GPIO_InitTypeStruce;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruce;
TIM_OCInitTypeDef TIM_OCInitTypeStruce;
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//对PA串口进行使能和复用TIM2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
 
GPIO_InitTypeStruce.GPIO_Mode=GPIO_Mode_AF_PP;//设置复用推挽输出
GPIO_InitTypeStruce.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//定义PA0、PA1、PA2、PA3串口
GPIO_InitTypeStruce.GPIO_Speed=GPIO_Speed_50MHz;
 
TIM_TimeBaseInitTypeStruce.TIM_Period=1999;//这里要PWM周期为20ms = (720*2000)/72000000=0.02
TIM_TimeBaseInitTypeStruce.TIM_Prescaler=719;//所以我这里取值分别为2000-1和720-1
TIM_TimeBaseInitTypeStruce.TIM_ClockDivision=0;
TIM_TimeBaseInitTypeStruce.TIM_CounterMode=TIM_CounterMode_Up;
 
TIM_OCInitTypeStruce.TIM_OCMode=TIM_OCMode_PWM1;//这里是设置PWM模式
TIM_OCInitTypeStruce.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitTypeStruce.TIM_OCPolarity=TIM_OCPolarity_High;
 
GPIO_Init(GPIOA,&GPIO_InitTypeStruce);//下面是给上面四个串口进行初始化
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitTypeStruce);
TIM_OC1Init(TIM2,&TIM_OCInitTypeStruce);
TIM_OC2Init(TIM2,&TIM_OCInitTypeStruce);
TIM_OC3Init(TIM2,&TIM_OCInitTypeStruce);
TIM_OC4Init(TIM2,&TIM_OCInitTypeStruce);
 
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);//下面是使能TIM2时钟
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);
 
TIM_Cmd(TIM2,ENABLE);
 
}
 
 
 
void Pwm_Init_TIM4(void)//TIM4与TIM2的设置相似,其中要将GPIOA改为GPIOB,TIM2改为TIM4,四个串口也要进行修改
{
GPIO_InitTypeDef GPIO_InitTypeStruce;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruce;
TIM_OCInitTypeDef TIM_OCInitTypeStruce;
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
 
GPIO_InitTypeStruce.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitTypeStruce.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitTypeStruce.GPIO_Speed=GPIO_Speed_50MHz;
 
TIM_TimeBaseInitTypeStruce.TIM_Period=1999;
TIM_TimeBaseInitTypeStruce.TIM_Prescaler=719;
TIM_TimeBaseInitTypeStruce.TIM_ClockDivision=0;
TIM_TimeBaseInitTypeStruce.TIM_CounterMode=TIM_CounterMode_Up;
 
TIM_OCInitTypeStruce.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitTypeStruce.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitTypeStruce.TIM_OCPolarity=TIM_OCPolarity_High;
 
GPIO_Init(GPIOB,&GPIO_InitTypeStruce);
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitTypeStruce);
TIM_OC1Init(TIM4,&TIM_OCInitTypeStruce);
TIM_OC2Init(TIM4,&TIM_OCInitTypeStruce);
TIM_OC3Init(TIM4,&TIM_OCInitTypeStruce);
TIM_OC4Init(TIM4,&TIM_OCInitTypeStruce);
 
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);
 
TIM_Cmd(TIM4,ENABLE);
 
}
 
 
 
 
编写完PWM初始化的文件后我们就可以使用
TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3)
TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4)
这几个函数进行占空比控制。
同样我们还是离不开TIM时钟表
dx0PIXmbSpOB4vOIFaG9FMM8j5sypY1CE3zROpjv.png
eg:
TIM_SetCompare3(TIM2,50);//这里意味着TIM2时钟上的第三个串口(看上面的TIM时钟表)PA2,这个IO口上控制的舵机转到0°位置
TIM_SetCompare2(TIM4,250);//这里意味着TIM4时钟上的第二个串口(看上面的TIM时钟表)PB7,这个IO口上控制的舵机转到180°位置
这里的50对应舵机转到0°,250对应舵机转到180°
也就意味着50~250之间控制这个舵机旋转度数,可以自行控制。
 

OLED部分的使用

请大家去CSDN学一下使用方法吧

吃透OLED显示原理——玩转OLED模块各种使用方法_oled使用方法-CSDN博客

 

建模部分说明和参数

我使用的是solidworks 2022版本

舵机留的孔大小:

经过3d打印后的材料挤压,可以直接用2mm螺丝

8M9liNHG88dkZnTNuZlNTFkHGckU0Lzia2ZWWhkx.png7EHaCTipiuJfrk7HsvL4rA9h8fChr3awCmfbPeax.png

脚留的孔大小:

同样用2mm螺丝即可

2rBSqsOL6HpJ6BMlIYEBq3mqom2tQ3eQQ8E5i0hp.png

 

腿部连接:

因为用了镜像,在自己切片时需要进行一下切割。

AsvCQy6fnDnZL4W4imfc5NRY7239SM7tmY8mbHfR.pngGVP7gp2gPEQRaaXs0DM86SBnF4XmCLOybXudCZiT.png

安装注意事项

需要知道舵机的三条线:

黄线 or 橙线是信号线

红线是电源线

黑线 or 棕线是地线

首先需要知道舵机是如何旋转的:

46bHsb7Rwr4ztW3TDFYfdnJdXR6QvmCRdeWNw3iC.png

然后在安装之前需要用代码将舵机都旋转到90°后再进行脚的固定,可以增大脚左右移动的自由度:

先用这几个代码

TIM_SetCompare1(TIM2,150);

TIM_SetCompare2(TIM2,150);

TIM_SetCompare3(TIM2,150);

TIM_SetCompare4(TIM2,150);

 

TIM_SetCompare1(TIM4,150);

TIM_SetCompare2(TIM4,150);

TIM_SetCompare3(TIM4,150);

TIM_SetCompare4(TIM4,150);

将舵机调至90°后,按下图连接腿部。

 

xsyNBgF4tnAAXXoxygC0vTFPyDOV5GffBWtYcZPX.jpeg

如果要用我的代码进行运行,需要如下图连接舵机线:

HSkBLBVTgPEjUwNwocYJ7V9oxfRqasgdFQNCILmh.png

总结

因为我也还是一个大学的萌新,所以做的很简单,有问题也请大家指出,谢谢。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
机械四爪.jpg
229
2
展示视频.mp4
135
3
3d打印文件.zip
351
4
机械四足代码.zip
527
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航