两轮平衡小车之硬件设计

发布者:Xiangsi最新更新时间:2024-07-03 来源: elecfans关键字:硬件设计  stm32 手机看文章 扫描二维码
随时随地手机看文章

学习一种单片机最快的方式莫过于用它实际制作一个作品了,前些天看到有人在玩平衡小车,感觉非常有趣,于是就决定自己动手制作一个基于stm32的两轮平衡小车。从电路板设计,到程序编写,一步一步的,希望自己在这个过程中有一定的收获。


这篇博客先写最开始的电路设计,之后会更新后续的代码编写和小车调试。


电路设计的基本过程一般是这样的:需求分析——元件选型——原理图设计——PCB设计——焊接调试。

需求分析:在这里,主要是确定小车需要哪些模块、外设或接口。首先,stm32最小系统是必须的,这是小车控制的核心。然后小车的两个轮子需要两个H桥驱动和编码器接口。需要陀螺仪感知小车的姿态(包括倾角,转向角,角速度等)。需要一些调试和指示用的外设(蜂鸣器,LED等)。需要电源电路为系统供电。需要电池电压采集电路来实时采集电池电压,做低压报警,防止电池过放。需要下载接口和调试用的串口。基本就是根据自己想要实现功能,然后确定需要那些部分的电路。

元件选型:为需要的各个部分电路选择元件,一般来说,主要是选择何种型号、什么封装的芯片,对于一些比较特殊的电路,即使是电阻电容这样常见的无源器件也需要认真选择,然而平衡小车的电路中并不需要一些高精度或很高速的电路部分,所以,下面主要介绍如何选择各个电路部分的主要芯片。

1.最小系统:考虑到小车的主控板可以作为今后做四轴或其他更高级的机器人的基础电路,所以主控选择了stm32F405RGT6,这款主控是M3内核的,主频可以达到168M,有丰富的外设资源可以使用,性能非常强悍,非常适合以后的开发和拓展。

2.电机驱动:小车的两个轮子电机需要两个H桥驱动。驱动的选择和电机的参数紧密相关。我选用的电机的正常工作电流360mA,并且考虑到小车在正常情况下基本不会出现赌转的情况,并且为了尽量减小PCB板的面积,所以选择了东芝的电机驱动芯片TB6612,该芯片有两个集成的H桥,可以同时驱动两个电机,每个H桥可以持续输出1.2A的电流,PWM频率可以到100kHz,芯片的供电电压最大可以到15V,适合用3S电池供电,并且芯片封装很小,节省PCB面积。

3.电源电路:主要考虑输入电压、输出电压、输出电流等。小车电池采用3S锂聚合物电池,放电率25C,以后做四轴还能用。电池的满电电压12.6V左右,电路中需要5V和3.3V的电源,因此需要选择两款款芯片将12V电压降压到5V,然后再将5V降压到3.3V。12V-5V的芯片可以选择MPS公司的DCDC降压芯片MP2482,该芯片支持最大5A电流输出,最大28V电压输入,0.8至25V可调电压输出,符合需求。5V-3.3V选用常见的AMS1117-3.3。

4.陀螺仪:选用MPU6050模块,模块自带了软件滤波算法,采用串口对外输出数据,在115200波特率的情况下,每秒钟可以输出100帧的数据。


原理图设计:

1.最小系统:包括stm32f405rgt6,晶振电路,复位电路。R2和R3用于配置启动方式。C9和C12是单片机内部电源变换部分的滤波电容。最小系统基本都是一样的,按照常用的电路设计一般没有错。那几个电容式芯片的去耦电容,注意一下,模拟电压、模拟地和数字电源、数字地之间用磁珠隔离,防止数字电路的高频噪声影响到模拟电路的精度。

2.电源电路:R22和R23将电池电压分压到1.2V,接到单片机内部的ADC引脚,监控电池电压,防止过放。

3.电机驱动和编码器电路:基本就是按照芯片datasheet上的参考电路设计的,注意做好电源去耦,因为电机的电压较高、电流较大,容易通过电源网络对其它电路产生影响。

4.陀螺仪:集成的模块,没啥好说的,把引脚连到单片机上就好了,简单在电源脚上并一个电容做一下电源去耦(不做也无妨,因为模块内部已经做了)。

5.CAN通信:在小车上并没有用到CAN通信,但是CAN通信在现在的机器人设计中应用的非常广泛。并且我们做小车本来就是要学东西的,加上调一下,多学习些知识,何乐而不为呢?CAN通信用的芯片是飞利浦的TJA1050,这是一个CAN收发器,stm32内部集成了CAN控制器。R4是阻抗匹配的电阻,在整个CAN通信网络中有且只有两个节点焊接此电阻,电阻阻值为120ohm。现在也还没有深入学习CAN通信相关的知识,在以后调试CAN通信的时候再详细学习吧。(^.^)

6.调试电路和其他的接口:SWD下载接口,USART调试串口,蓝牙接口(根据选择的蓝牙模块不同确定接口不同引脚的用途,比如使能脚、状态输入脚等,后面写蓝牙的时候详细描述)。蜂鸣器和双色LED灯用于调试和指示。另外又引出了几个定时器的引脚,可以留作拓展使用。

PCB设计:不详细说了吧,工程文件在附件里有。注意事项主要有电源去耦(具体做法可以参考我之前关于电源去耦的博文)、线宽控制(大电流的走线要尽量宽)、开关电源的布局布线(一般来说主要记住三点就好了:一是芯片的SW的信号是电压高,频率高的开关信号,会对其他电路产生严重的干扰,要尽量远离敏感的电路。二是反馈网络是很敏感的网络,尽量避免受干扰。三是电源的电流较大,注意线宽和过孔的数量、孔径等,保证有能力通过这么大的电流。注意了这三点,集成的DCDC电路一般没有问题)等。这里贴一下板子正反两面的3D效果图


焊接调试:也不多说了,平时多练练手,0603 QFP这些封装的元件就能轻松搞定了。焊接的时候先焊接电源部分,上电测试电源没有问题的话再焊接其他部分,否则一旦电源有问题,整板全白焊了


关键字:硬件设计  stm32 引用地址:两轮平衡小车之硬件设计

上一篇:【蓝桥杯嵌入式主板G4】第三章 点亮一个LED
下一篇:从0到1教你制作网络数字变化时钟的项目代码进行修改

推荐阅读最新更新时间:2024-11-13 20:23

STM32 GPIO的十大优越功能综述
下面我就在做个抛砖引玉,根据ST手册上的内容,简单地综述一下GPIO的功能: 一、共有8种模式,可以通过编程选择: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出 (此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用功能的推挽输出 8. 复用功能的开漏输出 模式7和模式8需根据具体的复用功能决定。 二、专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的 读-修改-写 操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。 三、每个GPIO口都可以作为外
[单片机]
stm32用ucos还是linux
  常见的嵌入式操作系统有两种:用MMU的和不用MMU的。 用MMU的是Windows、 MacOS 、Linux、 Android,不用MMU的是FreeRTOS VxWorks ucOS。 CPU有两种:带MMU的和不带MMU的,带MMU的有Cortex-A系列ARM9、 ARM11系列,不带MMU的有Cortex-M系列。 stm32用ucos还是linux STM32是M系列,不带MMU控制器,不可能运行Linux,当然, STM32能够跑μClinux,但是严格来说,μClinux是不算Linux的。所以对于很多网友有疑问的stm32用ucos还是linux这个问题,我们就知道答案了,stm32是用
[单片机]
STM32 JTAG端口作为普通I/O口使用的方法
STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。 有时我们为了充分利用MCU I/O口的资源,会把这些端口设置为普通I/O口。具体方法如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP) GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable ,
[单片机]
stm32之 GPIO_Remap_SWJ_Disable之后无法使用swd下载 程序解决方法
说明:库文件版本:3.5.0 软件环境:iar for arm 在系统复位的时候默认是开启JTAG与swd的,在点击下载后的2秒内按下复位键即可将程序下载进stm32 注意:在程序里边加入GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); 来彻底解除限制,或用写寄存器的方式,SWG_CFG 写入000
[单片机]
STM32看门狗总结篇(续)
在调节利用DMA向串口发送数据的过程中,必须在使能DMA,执行完发送数据的操作后再关闭DMA,否则串口将不能连续自动发送数据。只能在复位时进行发送,不复位则停止发送。 如图所示,添加关闭DMA的语句,则可实现连续发送: 在注释掉关闭DMA的语句后,则串口不能连续发送数据: 如有大神指导原因,可以在此留言,谢谢。 补充DMA相关的知识: ①、DMA的各个通道对应特定的外设,在使用时需要一一对应。 ②、三种传输方式:外设- 内存,内存- 外设,内存- 内存 ③、由于DMA传输不需要CPU的参与。所以在调试的时候会发现,在我们单步停止的时候,串口依然不停地向外发送数据。(未经验证) ④、DMA实现数据转移是采用共享系统
[单片机]
<font color='red'>STM32</font>看门狗总结篇(续)
STM32开发笔记69: 外设启动的先后次序
单片机型号:STM32F070F6P6 今天,在程序框架中增加了Timer16定时器驱动,但程序不能正常运行,本篇日志记录其原因。 驱动程序框架,定义了回调函数Timer16_InterruptFunction,写在main.cpp中用于逻辑层设计。Timer16_InterruptFunction调用的间隔为1ms,具体程序如下: void Timer16_InterruptFunction(void) { Target.HAL.L2.Turn(); } 此程序完成以1ms为间隔L2闪烁的程序,但是将此程序烧写到目标板后,程序不能正常运行。经过调试,最后将问题锁定在启动顺序上,看一下程序外设的启动顺序,具体程序如下
[单片机]
STM32定时器控制led灯亮灭
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产 生一次中断,以此循环往复。 在使用时,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。 接下来,利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁。 1、设置重装载寄存器的值 2、清除当前数值寄存器的值 3、配置控制与状态寄存器 配置头文件: void PendSV_Handler(void) { }
[单片机]
STM32中GPIO的8种工作模式
最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总
[单片机]
<font color='red'>STM32</font>中GPIO的8种工作模式
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved