## 1.电机驱动模块学习及编码器
1.1电机转动的原理:
如果我们可以调节施加在电机上面的直流电压大小,
即可实现直流电机调速,改变施加电机上面直流电压的极性,即可实现电机换向。
1.2电机实物图
有 6 个线,而6P 排线中,中间的四根线(红绿白黑)是编码器的线,只是用于测速,和直流电机本身没有联系。我们在实现开环控制的时候无需使用。黄色和棕色的是电机的正负相关。
## 2.TB6612FNG 使用说明
具有大电流 MOSFET-H 桥结构,双通道电路输出,可同时驱动 2
个电机。
它无需外加散
热片,外围电路简单,只需外接电源滤波电容就可以直接驱动电机,利于减小系统尺寸。对于 PWM 信号输入频率范围,高达 100 kHz 的频率。
**以下是 TB6612FNG 的主要参数:**
最大输入电压:VM = 15V
最大输出电流:Iout = 1.2A(平均)/3.2A,()峰值)
正反转/短路刹车/停机功能模式
内置过热保护和低压检测电路
**TB6612 模块测试一个电机的接线图**
注意,需要由PWN的输出才有 AO1 和 AO2 的信号,只接 AIN1 和 AIN2不会产生 AO1 和 AO2 的信号。
上图中红色
部分的 5 个引脚控制一路电机,蓝色部分的控制另外一路电机,这里只讲其中的 A 路,B 路的使用是一样的。AO1 和 AO2 分别接到电机的+和-。
然后通过 PWMA、AIN2、AIN1 控制电机。其中 PWMA 接
到单片机的 PWM 引脚,一般 10Khz 的 PWM 即可,并通过改变占空。比来调节电机的速度。下面是真值表:
AIN1 接 3.3~5V、 AIN2 接 GND、 PWMA 接 3.3~5V。这样相当
于控制电机满占空比正转;
AIN1 接 GND、 AIN2 接 3.3~5V、 PWMA 接 3.3~5V。这样相当
于控制电机满占空比反转;
**连线示意图:**
附上TB6612模块原理图:
**## 编码器相关教程和例程**
需要STM32F1控制编码器电机例程的可以联系评论区联系方式联系我。
**
## 3平衡小车底盘
**
## 4. 12V降压和稳压电路(5V和3.3V)
*
## *5. MPU6050相关内容*
使用MPU6050d的INT引脚没5MS触发的中断作为控制的时间基准
模块电路:
**使用到了STM32资源:**
ADC 模块:采集电阻分压后的电池电压,
TIM1:初始化为 PWM 输出,CH1,CH4 输出双路 10KHZ 的 PWM 控制电机
TIM2:初始化为正交编码器模式,硬件采集编码器 1 数据
TIM3:CH3 初始化为超声波的回波采集接口。
TIM4:初始化为正交编码器模式,硬件采集编码器 2 数据
USART1:通过串口 1 把数据发到串口调试助手
USART3:通过串口 3 接收蓝牙遥控的数据,接收方式为中断接收。并发送数据给 app。
IIC:利用 IO 模拟 IIC 去读取 MPU6050 的数据,原理图上 MPU6050 链接的是 STM32 的硬
件 IIC 接口,但是因为 STM32 硬件 IIC 不稳定,所以默认使用模拟 IIC,大家可以自行拓展。
GPIO:读取按键输入,控制 LED,控制电机使能和正反转
EXTI:由 MPU6050 的 INT 引脚每 5ms 触发一次中断,作为控制的时间基准
相关文件及说明:
Encoder.c 提供编码器采集相关函数
Balance文件夹:
Control.c 提供全部的控制函数,并放在由 MPU6050 触发的外部中断里面执行
Inv_mpu.c:MPU6050 内置 DMP 的相关库文件
Inv_mpu_dmp_motion_driver.c:MPU6050 内置 DMP 的相关库文件(DMP就是指 MPU6050内部集成的处理单元,可以直接运算出四元数和姿态,而不再需要另外进行数学运算。DMP的使用大大简化了代码设计。DMP是数字运动处理器的缩写)
Fitler.c:提供平衡小车常用的滤波算法,如卡尔曼滤波,互补滤波
Mpu6050.c:提供 MPU6050 初始化函数及相关的函数
Show.c:提供用于数显和 APP 使用的相关函数
## 使用了卡尔曼滤波
平衡小车获取姿态角的滤波算法一般为卡尔曼滤波和一阶互补滤波。但是 MPU6050 内
置的 DMP 可以直接输出和姿态相关的四元数。所以,常用的有三种方法可以获取角度。
## 控制算法
直立控制:PD 控制,这是最核心的控制,其他的控制都是相对直立控制而言都是干扰。
速度控制:PI 控制 对编码器信息进行低通滤波可以削弱电机控制的比重,提高系统稳
定性。
转向控制:PD 控制 结合了 Z 轴陀螺仪 PD 控制;
## 电池电压测量模块
## 电路原理图