程序员开发实例大全宝库

网站首页 > 编程文章 正文

「技术向」STM32机器人控制板设计

zazugpt 2024-09-11 11:33:44 编程文章 21 ℃ 0 评论

工程描述

QR-Board是一块基于“STM32G0微控制器”的四足机器人控制板。

四足机器人常用的硬件模块皆可接入这个控制板,例如:舵机、IMU、超声测距、WiFi、OLED等模块。

并且我还提供了完善的使用例程,能方便完成机器人等项目的功能的开发



关于硬件

1.双MCU应用


①STM32G070CBT6微控制器

  • 64MHz主频
  • 128KB FLASH
  • 36KB SRAM
  • 支持SWD/UART程序下载


②ESP-01S WiFi模组

  • 可基于Arduino编程或AT指令控制
  • 支持UART程序下载


2.板载外设接口

  • 8个光耦隔离的5V PWM舵机接口
  • 3个飞特scs系列总线舵机接口
  • 1个MPU6050模块接口
  • 1个I2C OLED模块接口
  • 1个HC-SR04超声测距模块接口
  • 1个USB转TTL MicroUSB通信接口
  • XT30公头或螺钉式端子DC5V~15V直流供电,支持ADC电压测量
  • 支持I2C/UART通信,引出PWM/ADC/GPIO等富余接口



软件例程

1.软件工具

  • STM32CubeMX
  • MDK-ARM Keil5


2.板级支持包

提供12个板级支持包例程,位于bsp_demo文件夹下


3.工程文件结构

板级支持包的工程文件分为两大部分,一部分是由STM32CubeMX自动生成的,一部分是自己添加的,以mpu6050模块为例,其工程文件结构如下

mpu6050
 ├─BSP
 ├─LIB
 │  └─mpu6050
 ├─MDK-ARM 
 ├─Drivers 
 ├─Core
 ... 

/BSP目录下是自己编写的板级支持包文件,对外提供各类板载功能接口;

/LIB目录下是调用的外部库文件;

其余文件均为STM32CubeMX自动生成


4.命名约定

良好的编程命名规则有利于快速索引和匹配所需的对象,提高编程效率。该板级支持包编程命名规则与STM32HAL库类似,具体规则如下:


①函数命名

函数命名包括三部分,板级支持包+模块名称+函数具体动作,两两之间下划线分隔,函数具体动作采用大驼峰式命名法

BSP_LED_Init();           // led初始化
BSP_MPU6050_GetData();    // 获取mpu6050的数据


②类型命名

类型命名包括两部分,模块名称+类型名,两者之间下划线分隔,类型名采用大驼峰式命名法

// esp8266消息结构体
typedef struct { 
  int len;
  uint8_t *buf;
} ESP8266_Msg;

// led类型枚举
typedef enum { 
  RED = 0,
  GREEN,
  BLUE
} LED_Type;


③变量命名

变量命名采用全小写,下划线分隔

float bat_voltage = 0; // 电池电压


④宏和常量

宏和常量采用全大写,下划线分隔

#define LED_NUM (2)    // led的数量
const int LED_NUM = 2; // led的数量


5.轻量级时间片

该板级支持包提供了一个轻量、易用的时间片轮询功能,位于bsp_time模块中,使用方法如下


①提供一个1ms的时基

// stm32 systick 1ms 中断
void SysTick_Handler(void)
{
  BSP_Time_IncTick(); // 时间片轮询时基
}


②创建轮询任务

int main(void)
{
  BSP_Time_Init(); // 时间片轮询初始化
  while(1)
  {
    if(BSP_Time_CheckTick() ==1 )
    {
       // 500ms轮询任务,绿色led闪烁
      if(BSP_Time_CheckSlice(500) == 1)
      {
        BSP_LED_Toggle(GREEN);
      }
      // 100ms轮询任务,更新hc-sr04超声测距模块的测量距离
      if(BSP_Time_CheckSlice(100) == 1)
      {
        BSP_HCSR04_UpdateDist();
      }
      // 1000ms轮询任务,获取并打印hc-sr04超声测距模块的测量距离
      if(BSP_Time_CheckSlice(1000) == 1)
      {
        float dist = BSP_HCSR04_GetDist();
        printf("dist is %.2f cm\r\n",dist)
      }
    }
  }
}


5.移植

利用STM32CubeMX生成工程,添加/BSP目录和对应的驱动文件,修改端口并添加驱动代码就能实现不同STM32微控制器的快速移植



设计图



文中所有资料与代码来源于此:https://oshwhub.com/yoohgc/QR-Board#P4



如果你欣赏这篇文章

欢迎点赞、关注、转发~

我会持续更新优质的开源项目!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表