【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------让小车动起来

相关推荐
YYRAN_ZZU1 小时前
Lattice 自定义IP业务逻辑核
嵌入式硬件·fpga开发
AI的探索之旅2 小时前
从 Ubuntu 14.04 到 24.04:TI AM335x 开发环境完整迁移与 Agent 接管方案
linux·数据库·嵌入式硬件·ubuntu·postgresql
ACP广源盛139246256732 小时前
GSV6155 @ACP#工业车规 DP1.4 重定时器 Retimer
大数据·人工智能·分布式·嵌入式硬件
sramdram2 小时前
低功耗MCU芯片电机控制专用
单片机·嵌入式硬件·mcu·低功耗mcu·mcu芯片
ACP广源盛139246256733 小时前
GSV2221@ACP# DP1.4 MST 多流显示转换芯片国产工业多屏
大数据·人工智能·分布式·嵌入式硬件·spark
ACP广源盛139246256733 小时前
GSV2231@ACP# 增强型 8K MST 多屏扩展芯片
大数据·人工智能·分布式·嵌入式硬件
国科安芯15 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
茯苓gao17 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉20 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者21 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件