基于stm32F1的蓝牙控制小车 全硬件代码开源

这篇具有很好参考价值的文章主要介绍了基于stm32F1的蓝牙控制小车 全硬件代码开源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于stm32F1的蓝牙控制小车 全硬件代码开源

简介

   “基于stm32F1的蓝牙控制小车”由L898N电机驱动模块、电源管理模块、stm32f1主控模块、蓝牙串口通信模块。电机驱动模块使用了两个L298N芯片来驱动4路电机,使能端连接4路来自主控板的电平信号;电源管理模块使用了LM2940-5.0芯片进行12V到5V的转换,12V用于电机模块的供电,5V用于蓝牙模块、传感器等的供电;主控模块采用了MDK编辑程序,然后下载到主控板,实现硬件与软件的交互;蓝牙串口通信模块则是与主控板进行串口通信,同时与手机进行通信;控制端模块是一个集开启蓝牙、搜索蓝牙、控制小车等功能。用户可以通过手机控制端进行控制小车的运动,实现一些用户需要的功能和服务。

 

L298N驱动

L298N 是ST 公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15 脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间 峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H 桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电 压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N 芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。

1、控制板内部带5V逻辑电平转换芯片,不需要额外的5V供电。

2、如果EN1、EN2、EN3、EN4不接PWM调速信号,次脚需要和对应的管教短接。

3、GND和12V接电机电源,其中12V可以接7V--24V电平,板子上的电源开关只是控制逻辑5V电平的开关,L298的12V电源不受此开关控制.

4、输出端和输入端一一对应,当输入端为5V时,输出端也为高电平,输入端为低电平时输出亦为低电平。

电源管理模块

电源是整个系统稳定工作的前提,因此必须有一个合理的电源设计,对于小车来说电源设计应

注意两点:

1. 与一般的稳压电源不同,小车的电池电压一般在6-8V 左右,还要考虑在电池损耗的情况下电压的降低,因此常用的78 系列稳压芯片不再能够满足要求,因此必须采用低压差的稳压芯片,在本文中以较为常见的LM2940-5.0 为例。

2. 单片机必须与大电流器件分开供电,避免大电流器件对单片机造成干扰,影响单片机的稳定运行。

现在各种新型的电源芯片层出不穷,各位读者可以根据自己的需求自行选择电源芯片,对于本设计应该主要注意稳压压差和最大输出电流两个指标能否满足设计要求。

LM2940 系列是输出电压固定的低压差三端端稳压器;输出电压有5V、8V、10V 多种;最大输出电流1A;输出电流1A 时,最小输入输出电压差小于0.8V;最大输入电压26V;工作温度-40~+125℃;

内含静态电流降低电路、电流限制、过热保护、电池反接和反插入保护电路。同时LM2940 价格适中而且较容易购买,非常适合在本设计中使用。如图所示,采用两路供电,这样可以使用其中一路单独为STM32F1电路板供电,指示灯等供电。另外一路提供L298N、舵机、蓝牙的工作电压,L298N 的驱动电压由电池不经任何处理直接给出。舵机可以用6V 供电,也可以直接用5V 供电。

基于stm32F1的蓝牙控制小车 全硬件代码开源

 PCB图:

基于stm32F1的蓝牙控制小车 全硬件代码开源

系统软件设计

 主程序:由蓝牙数据接收判断函数组成,对蓝牙接收信号进行判断,并作出对应反应。(图中省略了初始化代码)

 while(1)
      {
        
          switch(flag)
              {
                    case 0:  Stop();         break  ;
                    case 1:  Turnleft();     break  ;
                    case 2:  Turnright();    break  ;
                    case 3:  Turnback();     break  ;
                    case 4:  Turnfront();    break  ;
                    case 5:  Leftaround();   break  ;
                    case 6:  Rightaround();  break  ;
                    default: Stop();         break  ;                                                                                                
              }          
      }

串口配置函数:

//利用中断进行蓝牙的收发
    
      GPIO_InitTypeDef GPIO_InitStructure;
      USART_InitTypeDef USART_InitStructure;
      NVIC_InitTypeDef NVIC_InitStructure;

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);    //使能USART1,GPIOA时钟
//     USART_DeInit(USART1);  //复位串口1
//  USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
   
    //USART1_RX      PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA10     
    
     
    /* USARTx configured as follow:
       - BaudRate = 9600 baud  波特率
       - Word Length = 8 Bits  数据长度
       - One Stop Bit          停止位
       - No parity             校验方式
       - Hardware flow control disabled (RTS and CTS signals) 硬件控制流
       - Receive and transmit enabled                         使能发送和接收
    */
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(USART1, &USART_InitStructure);
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断

    //Usart1 NVIC 配置
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        //子优先级3
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQ通道使能
      NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器
      USART_Cmd(USART1, ENABLE);                    //使能串口 

电机驱动GPIO初始化函数:

    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8|GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_6|GPIO_Pin_9);

电机执行函数:

//停止模式
void Stop(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
    GPIO_ResetBits(GPIOC,GPIO_Pin_2);
    GPIO_ResetBits(GPIOC,GPIO_Pin_9);
}


//左转模式 -> 左电机正转,右电机反转
void Turnleft(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_0); 
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
    GPIO_ResetBits(GPIOC,GPIO_Pin_2);
    GPIO_SetBits(GPIOC,GPIO_Pin_9);
    GPIO_SetBits(GPIOC,GPIO_Pin_6);
}

//右转模式 -> 左电机反转,右电机正转
void Turnright(void)
{
    GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    GPIO_SetBits(GPIOC,GPIO_Pin_1);
    GPIO_SetBits(GPIOC,GPIO_Pin_2);
    GPIO_ResetBits(GPIOC,GPIO_Pin_9);
    GPIO_SetBits(GPIOC,GPIO_Pin_6);
}

//后退模式 -> 左电机反转,右电机反转
void Turnback(void)
{
    
    GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    GPIO_SetBits(GPIOC,GPIO_Pin_1);
    GPIO_ResetBits(GPIOC,GPIO_Pin_2);
    GPIO_SetBits(GPIOC,GPIO_Pin_9);
    GPIO_SetBits(GPIOC,GPIO_Pin_8);
    
}

//前进模式 -> 左电机正转,右电机正转
void Turnfront(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_0);
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
    GPIO_SetBits(GPIOC,GPIO_Pin_2); 
    GPIO_ResetBits(GPIOC,GPIO_Pin_9);
    GPIO_SetBits(GPIOC,GPIO_Pin_7);
}

//以左电机为中心原地左转
void Leftaround(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_0);
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
    GPIO_SetBits(GPIOC,GPIO_Pin_2);
    GPIO_SetBits(GPIOC,GPIO_Pin_9);
    
}

//以右电机为中心原地右转
void Rightaround(void)
{
    GPIO_SetBits(GPIOC,GPIO_Pin_0);
    GPIO_SetBits(GPIOC,GPIO_Pin_1);
    GPIO_SetBits(GPIOC,GPIO_Pin_2);
    GPIO_ResetBits(GPIOC,GPIO_Pin_9);
    
}

以上便是主要代码和硬件资料,如需详细资料,如手机端APP,完整代码,硬件原理图和PCB,请在下载资料里自提。文章来源地址https://www.toymoban.com/news/detail-419057.html

到了这里,关于基于stm32F1的蓝牙控制小车 全硬件代码开源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32超级蓝牙小车——基于STM32F103C8T6的多功能蓝牙小车(PID循迹、跟踪、有源蜂鸣器播放音乐、蓝牙遥控、AD采集+DMA转运等超多元素小车)

    一、项目时间:2023.7.24~11.26 二、实现效果:通过蓝牙控制小车运动与模式转换                         模式一:循迹模式                         模式二:跟踪模式                         模式三:音乐模式                         模式四:控制运动模式 三、使

    2024年02月04日
    浏览(22)
  • 基于STM32F1的自动追光云台(代码开源)

    前一段时间做了一个自动追光云台(大家感兴趣的也可以自己DIY一个呀),用来自动捕捉阳光供太阳板发电提高太阳板的发电效率,我用了一款STM32f103c8t6为主控来控制云台舵机的旋转。感光元器件使用的是光敏传感器(淘宝随便买一款啊很便宜)来感知光强,所以用ADC进行模

    2024年02月15日
    浏览(16)
  • STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    📌相关篇《【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕》 ✨驱动效果就不做演示了,和上面的相关篇一样,主要是为了方便使用MDK Keil开发的使用。所以花了点时间从上面的工程当中做了分离,重新使用STM32CubeMX配置一个方便二次开发移植使用和配置的工程。本

    2024年02月03日
    浏览(20)
  • STM32F1 + 蓝牙HC08 与 手机APP通信

    1.1  开发软硬环境 芯片型号:STM32F103RCT6 开发软件:Keil5  (v5.31+AC5,最常用) 代码用库:标准固件库 蓝牙模块:HC-08 (HC家的,小贵 ,配套图解、串口助手、APP、小程序,完美) USB转TTL模块: CH9340C  (Type-C接口,win10可免驱动,比CH340和CP2102爽) 1.2  代码下载链接 百度网

    2024年02月04日
    浏览(27)
  • STM32 蓝牙平衡小车(一)硬件原理图

    第一篇文章首先介绍平衡小车的硬件组成,对硬件原理图进行详解。   1. 主控板:主控芯片(STM32F103C8T6)+电机驱动芯片(TB6612FNG)。 2. 小车框架:平衡车底盘、带编码器的电机、轮子 3. 电池:狮子航模电池2200mAh11.1V35C,T母头 4. DC-DC降压模块:MP1584EN,3A可调降压稳压电源模

    2024年02月14日
    浏览(20)
  • 蓝牙小车(基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图)

    一、小车1.0——基本蓝牙小车(仅蓝牙遥控小车运动方向,本篇) 二、小车2.0——蓝牙小车PLUS(可以蓝牙控制方向+蓝牙直接调节车速) 三、小车3.0——避障小车(超声波+舵机云台) 四、小车4.0——无线手柄方向感知操控小车(mpu6050+双蓝牙透传) 五、双轮自平衡小车(HAL库版

    2023年04月09日
    浏览(24)
  • 基于STM32的android蓝牙控制LED灯,代码开源!!!

    使用STM32控制LED灯很简单,这次将通过android应用,连接对应的蓝牙模块,进行数据传输,以此来达到手机控制开发板LED的亮灭,颜色切换以及亮度调节。 (1)单片机采用:STM32F103RCT6或者F1其他系列单片机 (2)通信方式:采用蓝牙通信,某宝上常见的HC-05等等 (3)开发软件

    2024年02月11日
    浏览(17)
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)

    点 击 跳 转 点击跳转HaaS506官方最新案例 用语音识别当stm32智能车的遥控器,还能这样玩 用STM32单片机做了一辆蓝牙控制的麦轮小车,分享一下小车的原理和制作过程。 控制部分分为手机APP,语音模块控制,Haas506开发板三种。 本文介绍语音模块控制的方法以及小车的制作。

    2024年02月16日
    浏览(18)
  • STM32项目设计:基于stm32f1的智能门锁(附项目视频全套教程)

      最近假期比较闲,拿着之前剩下的模块做了一个小玩具, 先制定一下此次玩具的规划,也可以理解为简易项目书。 开发软件:keil 硬件选型:STM32F103C8T6、RFID读卡器、oled屏幕、按键模块、蓝牙通信模块、蜂鸣器、舵机; 上位机: 1.上位机可以对密码进行设置、重置 2.上位机可以

    2024年02月10日
    浏览(20)
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车4(体感控制)

    点 击 跳 转 点击跳转HaaS506官方最新案例 用STM32单片机做了一辆蓝牙控制的麦轮小车,分享一下小车的原理和制作过程。 控制部分分为手机APP,语音模块控制,Haas506开发板(遥感 + 体感)三种。 本文介绍Haas506(体感)控制的方法以及小车的制作。 器件说明 器件 数量 说明 STM32F

    2023年04月11日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包