基于stm32单片机四足机器人,应用sg90舵机(8个)控制四条腿,BT06蓝牙模块与单片机进行串口通讯,控制机器人前进后退转动
一、设计简介
针对STM32单片机控制的四足机器人项目,使用8个SG90舵机并通过蓝牙BT06进行控制,以下是视频展示
基于stm32四足机器人,sg90舵机8个,蓝牙模块BT06
百度网盘源码资料下载链接https://pan.baidu.com/s/1DpydIRuhsTLnbWYqtZ3o0A?pwd=vgaz
二、硬件准备
-
STM32单片机:
STM32F103C8T6单片机是一款非常用的单片机型号,可以方便灵活的进行嵌入式系统开发。首先,它的处理器基于Cortex-M3内核,最高工作频率达72MHz。STM32F103C8T6拥有64KB闪存和20KB SRAM,非常适合中小型单片机开发项目。
具有非常丰富的外设接口,如串口USART、SPI通信、I2C通讯、CAN通讯和USB,在与单片机外设通信方面非常方便。有多个GPIO通用IO口,定时器,中断系统,灵活配置为输入,输出、模拟输入或PWM输出,可以连接各类传感器和模块。
内部集成的12位逐次逼近型ADC和DAC,支持高精度模拟信号处理。STM32F103C8T6还支持低功耗模式,适合电池供电的应用场景。结合强大的STM32开发生态,包括库函数和工具链,可以让开发者很方便的完成单片机项目的开发。
-
SG90舵机:
- 共8个,用于驱动四足机器人的四条腿。
SG90舵机是一种位置(角度)伺服的驱动器,适用于需要角度不断变化并可以保持的控制系统。在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。
舵机一般可以在0~180度或0~360度范围内转动任意角度,经常用于小车小船转向控制和机械臂的关节等。舵机的转动角度范围不是固定的,一般选用0~180度旋转的舵机,简称180度舵机。
SG90舵机的工作原理主要由电机、电子控制板和位置反馈器三部分组成。当系统通过SG90 PWM信号控制电子控制板时,电机内部的电机轴会向上或向下旋转,从而输出一定的转角位置。位置反馈器会读取输出轴的角度位置信息,并将该信息反馈给电子控制板,从而实现闭环控制。
在控制SG90舵机时,MCU需要产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度。高电平时间与舵机旋转角度的对应关系如下:
-
蓝牙BT06模块:
- 用于实现与手机或其他蓝牙设备的无线通信,从而控制四足机器人的运动。
BT06蓝牙模块是一款专为智能无线数据传输设计的模块,以下是对其的详细介绍:
一、主要特点
二、硬件接口
三、工作模式
四、AT指令集
BT06蓝牙模块支持AT指令集,用户可以通过串口发送AT指令来配置和控制模块。以下是一些常用的AT指令:
三、硬件连接
-
STM32与SG90舵机的连接:
- 使用STM32的PWM输出引脚(如TIM2和TIM4的通道)连接SG90舵机的信号线。
- 根据SG90舵机的工作原理,通过PWM信号的占空比来控制舵机的旋转角度。
-
STM32与蓝牙BT06模块的连接:
- 将蓝牙BT06模块的RXD和TXD引脚分别连接到STM32的串口(如USART2)的TXD和RXD引脚上。
- 配置STM32的串口以接收和发送蓝牙数据。
四、软件设计
-
STM32固件开发:
- 使用Keil等开发工具进行STM32固件的开发。
- 配置STM32的时钟、GPIO、PWM和串口等外设。
- 编写PWM控制代码,用于生成控制SG90舵机所需的PWM信号。
- 编写串口通信代码,用于接收和解析来自蓝牙BT06模块的数据。
-
蓝牙通信协议:
- 定义一套蓝牙通信协议,用于手机或其他蓝牙设备与STM32单片机之间的数据交换。
- 协议可以包括控制指令、数据格式、校验方式等内容。
-
四足机器人步态控制:
- 根据四足机器人的运动需求,设计相应的步态控制算法。
- 通过调整SG90舵机的旋转角度和速度,实现四足机器人的前进、后退、转向等动作。
-
调试与优化:
- 在实际调试过程中,可能需要对PWM信号的占空比、串口通信的波特率等参数进行调整。
- 根据四足机器人的运动效果,对步态控制算法进行优化。
五、原理图及设计流程图
六、程序代码
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_usart.h"
#include "bsp_GeneralTim.h"
#include "bsp_servo.h"
uint8_t state;
int main()
{
USART_Config();
LED_GPIO_Config();
printf("四足机器人初始化中!\r\n");
GENERAL_TIM_Init();
while(1)
{
if(USART_GetFlagStatus(DEBUG_USARTx_2,USART_FLAG_RXNE) != RESET)
{
state = USART_ReceiveData(DEBUG_USARTx_2);
Usart_SendByte(DEBUG_USARTx_1, state);
}
//机器人的动作通过扫描串口的值进行选择进入
//蓝牙主机设置为:按下发送01、02、03...,松手发送00
switch(state)
{
case 0:
//暂停状态
break;
case 1:
//前进
Servo_Advance();
break;
case 2:
//右转
Servo_RightTurn();
break;
case 3:
//左转
Servo_LeftTurn();
break;
case 4:
//后退
Servo_Retreat();
break;
case 5:
//特殊姿势1,左右摆动
Servo_Pose_1();
break;
case 6:
//站立
Servo_Stand();
break;
case 7:
//趴下
Servo_Fall();
break;
case 8:
//复位姿态
Servo_Reset();
break;
default:
printf("无任何状态指示!\r\n");
break;
}
}
}
七、实物图片
八、实物图片
百度网盘源码资料下载https://pan.baidu.com/s/1DpydIRuhsTLnbWYqtZ3o0A?pwd=vgaz
作者:铭创电子设计