STM32f4日记3之diy小车实验(小车实验一:驱动小车转圈,直走,倒走)
//
板子:stm32f407zgt6正点原子迷你版
//
如果你觉得对你有帮助,请点赞同,这对我很重要,谢谢。
//
一、器材介绍
器材:小车基本结构:底盘,电机,两个轮子,一个万向轮,固定螺丝,有机玻璃等等
电机驱动采用L298N(TB6612FNG也可,不过本实验暂时不讲)
二、核心模块L298N的讲解
首先讲解L298N模块的基本使用(只讲用法,原理不讲,有兴趣的自行查找)
L298N模块是最常见的电机驱动模块,淘宝上售价10元
可将6~30v电压转换成左右两桥5v输出,若摘除跳线帽还可为单片机提供5v供电
//
产品参数:
1.驱动芯片:L298N 双 H 桥直流电机驱动芯片
2.驱动部分端子供电范围 Vs:+5V~+30V ; 如需要板内取电,则
供电范围 Vs:+6V~+30V
3.驱动部分峰值电流 Io:2A
4.逻辑部分端子供电范围 Vss:+5V~+7V(可板内取电+5V)
5.逻辑部分工作电流范围:0~36mA
6.控制信号输入电压范围(IN1 IN2 IN3 IN4):
低电平:-0.3V≤Vin≤1.5V
高电平:2.3V≤Vin≤Vss
7.使能信号输入电压范围(ENA ENB):
低电平:-0.3≤Vin≤1.5V(控制信号无效)
高电平:2.3V≤Vin≤Vss(控制信号有效)
8.最大功耗:20W(温度 T=75℃时)
9.存储温度:-25℃~+130℃
10.驱动板尺寸:55mm45mm33mm(带固定铜柱和散热片高度)
12.逻辑部分板内取电接口。
图中绿色端子为电机驱动输出端与驱动电源输入端(螺丝刀可以拧紧拧松自主调节):12V输入(实际上6v就可)端(可用4节1.5v电池组供电),GND端,5v输出端
排针处为电机控制逻辑输入端:IN4 IN3 IN2 IN1 控制电机输出端
ENA,ENB为pwm波使能端
左右两边的两个绿色端子是电机电压输出端口,左边使能左电机,右边使能右电机
三、硬件连接
下面讲述硬件连接:
1.将电池组(4节1.5v电池)的正极连L298N的12V输入
2.电池组负极连接L298N的GND
此时若L298N的小灯亮起说明连接成功
3.L298N左右两桥的共四个OUT口分别接在左右电机两端
4.L298N的GND接开发板的GND,共地,此时逻辑值1,0才生效这一步非常重要
5.将开发板的各个IO口接到L298N电机控制逻辑输入端
6.给烧录好程序的单片机上电即可使得小车开始工作
四、单片机代码编写
代码讲解:
ENA接高电平使能左电机
ENB接高电平使能右电机
IN1,IN2分别输入高电平1跟低电平0,左电机正转
IN1,IN2分别输入低电平0跟高电平1,左电机反转
IN3,IN4分别输入高电平1跟低电平0,右电机正转
IN3,IN4分别输入低电平0跟高电平1,右电机反转
代码功能:PF0,2,6,7为高电平
PF8,4为低电平
连接:
PF0接ENA
PF6,4接IN1和IN2
PF2接ENB
PF7,4接IN3和IN4
以下是car.c里面代码
void CAR_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_2|GPIO_Pin_7|GPIO_Pin_4|GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_6);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_ResetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_7);
}
下面是car.h里面代码
#ifndef __CAR_H
#define __CAR_H
#include "sys.h"
void CAR_Init(void);//³õʼ»¯
#endif
以下是主函数里代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "car.h"
int main(void)
{
delay_init(168);
CAR_Init();
while(1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_6);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_ResetBits(GPIOF,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_7);
}
}
五、其他如转圈,倒走
只要将单片机IO口接线换个位置(或者少接几跟)就能实现
希望读者自行探索
六、思考
PWM制波能调节小车速度而且还能与红外线寻迹,避障等模块一起使用,那怎么连接硬件,修改程序能达到那样的效果呢
这些内容下一期会出,喜欢的朋友可以专注一下作者
作者:shawn
可咨询QQ:965798711
2020.1.17
15:08
All rights reserved