STM32 2轮PID智能小车第一章驱动电机让小车动起来
【摘要】 @TOC 前言本篇文章正式带大家学习STM32智能小车。这篇文章先带大家了解一下如何让小车动起来。 一、LM298N1.LM298N模块接线原理图。根据下图可知一个LM298N可以控制两个电机模块。12V输入需要接入电源,电源地接GND。单片机IO口接到STM32的GPIO口。2.LM298N和STM32接线图及LM298N和电机接线图将电机接到LM298N上,LM298N接到STM32上,...
@TOC
前言
本篇文章正式带大家学习STM32智能小车。这篇文章先带大家了解一下如何让小车动起来。
一、LM298N
1.LM298N模块接线原理图。
根据下图可知一个LM298N可以控制两个电机模块。
12V输入需要接入电源,电源地接GND。单片机IO口接到STM32的GPIO口。
2.LM298N和STM32接线图及LM298N和电机接线图
将电机接到LM298N上,LM298N接到STM32上,通过STM32控制控制GPIO引脚的电平高低驱动电机转动。
二、驱动电机模块
//硬件连接说明:
//PB0----PWMA 右电机PWM
//PB12----AIN2 控制右电机正反
//PB13----AIN1 控制右电机正反
//PB14----BIN1 控制左电机正反
//PB15----BIN2 控制左电机正反
//PB1----PWMB 左电机PWM
LM298N上面的ENA,ENB控制小车PWM调速,IN1,IN2,IN3,IN4控制电机的正转和反转。
电机的正转、反转、停转
1.首先实现电机的停转是最简单的只要将电机的两个GPIO口都设置为相同的电平。
代码:
停转
HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);
2.电机正转和反转将两个GPIO口设置为不同电平即可
正转
HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);
反转
HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_SET);
二、cubeMX配置
让小车动起来只需配置如下引脚。
三、程序代码编写
Moto.c
#include "Moto.h"
//小车模式定义
#define GO 0
#define Back 1
#define Stop 2
/*
函数功能:小车电机初始化
*/
void Moto_Iint(void)
{
car_move(Stop);
}
/*
函数功能:左电机模式设置
Mode:模式选择 GO:前进 Back:后退 Stop:停止
*/
void Left_mode(char Mode)
{
switch(Mode)
{
case GO:
{
BIN1_RESET();
BIN2_SET();
}
break;
case Back:
{
BIN2_RESET();
BIN1_SET();
}
break;
case Stop:
{
BIN1_RESET();
BIN2_RESET();
}
break;
}
}
/*
函数功能:右电机模式设置
Mode:模式选择 GO:前进 Back:后退 Stop:停止
*/
void Rright_mode(char Mode)
{
switch(Mode)
{
case GO:
{
AIN1_RESET();
AIN2_SET();
}
break;
case Back:
{
AIN1_RESET();
AIN2_SET();
}
break;
case Stop:
{
AIN1_RESET();
AIN2_RESET();
}
break;
}
}
/*
函数功能:小车移动
Mode:模式选择 GO:前进 Back:后退 Stop:停止
*/
void car_move(char Mode)
{
switch(Mode)
{
case GO:
{
Left_mode(GO);
Rright_mode(GO);
}
break;
case Back:
{
Left_mode(Back);
Rright_mode(Back);
}
break;
case Stop:
{
Left_mode(Stop);
Rright_mode(Stop);
}
break;
}
}
Moto.h
#ifndef _MOTO_H_
#define _MOTO_H_
#include "main.h"
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int
//电机IO定义
//右电机
#define AIN1_RESET() HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET)
#define AIN1_SET() HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET)
#define AIN2_RESET() HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET)
#define AIN2_SET() HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_SET)
//左电机
#define BIN1_RESET() HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_RESET)
#define BIN1_SET() HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_SET)
#define BIN2_RESET() HAL_GPIO_WritePin(BIN2_GPIO_Port,BIN2_Pin,GPIO_PIN_RESET)
#define BIN2_SET() HAL_GPIO_WritePin(BIN2_GPIO_Port,BIN2_Pin,GPIO_PIN_SET)
void Moto_Iint(void);
void car_move(char Mode);
void Left_mode(char Mode);
void Rright_mode(char Mode);
#endif
总结
本篇文章就介绍到这里,大家有什么问题可以留言或者私信。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)