平衡小车制作系列之一——捋清制作流程


一、 技术路线

首先审视自己的水平,我熟悉51、32单片机的开发流程,理解并基本完成基本电路的设计,同时自己的编程水平也有一定基础,但没有对平衡车项目足够熟悉,对于整体模块的调试也是此次初次尝试!正所谓“养兵千日,用兵一时”,2021年8月5日星期四,我将通过模块拼接和手工焊接布线的方式开启自己的第一个项目,此系列博客会持续更新,记录我成长的点点滴滴:)

提示:以下是本篇文章正文内容,下面案例仅供参考


1.1 材料准备

  •  单片机最小系统:这个是用来写入程序的。

  •  姿态传感器:MPU6050(用来获取小车姿态数据,来保持平衡)。资料链接:https://pan.baidu.com/s/1dFJhQJv?qq-pf-to=pcqq.group

  •  电源模块:用来做电源升降压,给各个单元电路(单片机、电机驱动MPU6050)供电。一般而言,现在都是12V的直流减速电机。直接选用12V的航模电池套装即可

  •  电池:给整个系统供电。电池准备好之后,要根据单片机和传感器的工作电压对电池进行降压(较为常见的降压模块LM2596)

  •  无线模块:用来做遥控,控制小车移动行走。无线模块建议选用蓝牙,HC05/06主从一体。串口通信

  •  直流减速电机

  • 注意:一些连接电源模块和电机等等的需要选配合适的螺丝,或者直接购买配套连接轴和固定轴螺丝的轮子;或者利用手边现成的零件“拆东墙补西墙”哈~

1.2 手工焊接

手工焊接,需要一块和车架板差不多大小的洞洞板,方便我们的板子后面安装在车上。手工焊接和PCB设计一样,需要考虑各个模块以及元件的布局,也就是各个模块的摆放位置。模块位置的摆放正确与否,能让我们少走锡,少布跳线。能让我们省去许多精力。

1.3 程序设计思路

  •  第一步,先测试MPU6050程序,通过测试程序正确读取出6050数据。
  •  第二步,单独再调试单片机和电机,单片机程序是否能正确控制电机驱动,使得电机正反转、加减速。
  •  第三步,以MPU6050程序为基础,将电机转动程序加入其中,并添加PID控制函数,以6050数据为闭环入口参数,调节PID参数,计算出控制PWM,来控制电机转动,保持小车车身平衡。
  •  第四步,小车控制平衡后,对蓝牙测试程序进行单独测试,并将蓝牙控制信号输入到PID控制函数中,作为速度环和转向环的一个控制变量,来达到控制小车前后左右移动的效果。
  •  相关网上程序资料(Source:vx公众号“大鱼机器人”):
    a) 大平衡车链接:https://pan.baidu.com/s/1_TN2WBCQ3lHf4DkvhANYAA 提取码:yexs
    b) 平衡小车链接:https://pan.baidu.com/s/1S90wwbGbOHwRg-39rmTPpA 提取码:tl27
    c) 加速度计和陀螺仪指南

二、 结尾说明

本文重点参考以下几篇博客文章,感谢前辈的知识教诲!

MUP6050是一种MEMS加速度计和陀螺仪的组合传感器,而STM32是一种基于ARM Cortex-M内核的微控制器。如果您需要使用MUP6050与STM32进行通信,需要实现I2C协议进行数据交换。这里提供一个简单的代码示例,仅供参考: ```c #include "stm32f10x.h" #define MPU6050_ADDRESS 0xD0 void MPU6050_Init(void) { I2C_InitTypeDef I2C_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStruct.I2C_OwnAddress1 = 0x00; I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStruct.I2C_ClockSpeed = 400000; I2C_Init(I2C1, &I2C_InitStruct); I2C_Cmd(I2C1, ENABLE); } uint8_t MPU6050_Read(uint8_t reg) { I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, MPU6050_ADDRESS, I2C_Direction_Transmitter); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); I2C_SendData(I2C1, reg); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, MPU6050_ADDRESS, I2C_Direction_Receiver); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); uint8_t data = I2C_ReceiveData(I2C1); I2C_GenerateSTOP(I2C1, ENABLE); return data; } ``` 这段代码实现了STM32与MPU6050的I2C通信,并可以读取MPU6050的寄存器数据。请注意,这只是一个简单的示例,具体实现需要根据您的具体需求进行调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值