【STM32--智能小车】1. 让小车动起来

先开个头,让小车动起来,明天将进行

串口控制小车、蓝牙控制小车、点动控制小车、PWM调速小车

欢迎一起学习交流!

1. 组装

2. 电机驱动模块------L9110S

平衡小车项目中也用到电机驱动模块,不过和这个不一样,可以看看哟

平衡小车TB6612FNG电机驱动模块https://blog.csdn.net/2301_76153977/article/details/155577282?spm=1011.2415.3001.5331
L9110S 有二路和四路两种,二路可以驱动 2 个直流电机,或者 1 个 4 线 2 相式步进电机;四路可以驱动 4个直流电机,或者 2 个 4 线 2 相式步进电机。
此项目我们使用的是二路的。

L9110S STM32 备注
B-1A GPIO 控制电机
B-1B GPIO 控制电机
VCC 外接电源正极
GND 外接电源负极
A-1A GPIO 控制电机
A-1B GPIO 控制电机

用杜邦线可以直接插进模块绿色的接口,其他的线用螺丝刀调整接口大小即可接入。
接通 VCC 、 GND ,模块电源指示(红)灯亮。
以驱动 2 个直流电机为例:
A-1A 输入高电平,A-1B 输入低电平,MotorA 电机正转;
A-1B 输入低电平,A-1A 输入高电平,MotorA 电机反转;
B-1A 输入高电平,B-1B 输入低电平,MotorB 电机正转;
B-1B 输入低电平,B-1A 输入高电平,MotorB 电机反转。

3. "让小车动起来"功能实现

3.1 初始化

cpp 复制代码
void motor_init(void)
{
    GPIO_InitTypeDef gpio_initstruct;
    //打开时钟
    __HAL_RCC_GPIOB_CLK_ENABLE();                           // 使能GPIOB时钟
    
    //调用GPIO初始化函数
    gpio_initstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_10;          // 两个LED对应的引脚
    gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;             // 推挽输出
    gpio_initstruct.Pull = GPIO_PULLUP;                     // 上拉
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;           // 高速
    HAL_GPIO_Init(GPIOB, &gpio_initstruct);
    
    motor_stop();

}

3.2 前进后退

PB0、PB1控制左轮,PB2、PB10控制右轮

cpp 复制代码
void motor_go_forward(void)
{
    //左轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
    
    //右轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}

void motor_go_backward(void)
{
    //左轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
    
    //右轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
}

3.3 左转右转

cpp 复制代码
void motor_go_left(void)
{
    //左轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
    
    //右轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}

void motor_go_right(void)
{
    //左轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
    
    //右轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}

3.4 停止

cpp 复制代码
void motor_stop(void)
{
    //左轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
    
    //右轮
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}

3.5 验证

main函数中:

cpp 复制代码
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "motor.h"

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    led_init();                         /* 初始化LED灯 */
    uart1_init(115200);
    motor_init();
    printf("hello world!\r\n");

    while(1)
    {  
        motor_go_forward();
        delay_ms(1000);
        motor_go_backward();
        delay_ms(1000);
        motor_go_left();
        delay_ms(1000);
        motor_go_right();
        delay_ms(1000);
        motor_stop();
        delay_ms(1000);
    }
}

烧录后效果:

智能小车1------让小车动起来

相关推荐
LCG元10 小时前
STM32项目实战:基于STM32F103的智能农业监控系统
stm32·单片机·嵌入式硬件
ACP广源盛1392462567310 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
一起搞IT吧11 小时前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
Truffle7电子12 小时前
STM32CubeIDE/Programmer/Touch GFX 应用
stm32·单片机·嵌入式硬件
constant_LDX13 小时前
步进电机开发(一、硬件设计)
单片机·嵌入式硬件
北山有鸟13 小时前
修改源码法和插件法
嵌入式硬件·学习
richxu2025100113 小时前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
Deitymoon13 小时前
STM32——串口通信(USART)
单片机·嵌入式硬件
iCxhust13 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
Deitymoon15 小时前
STM32——外部中断按键控制led
stm32·单片机·嵌入式硬件