首页 > 其他分享 >基于STM32蓝牙控制小车系统设计(三)

基于STM32蓝牙控制小车系统设计(三)

时间:2024-04-04 19:03:56浏览次数:26  
标签:输出 初始化 函数 电机 小车 蓝牙 STM32 控制 PWM

主控板程序设计

设计基于主控板(STM32)的程序通常包括以下几个关键步骤:

  1. 项目规划和需求分析

    • 确定项目的功能和需求,包括所需的传感器、执行器、通信接口等。
    • 制定软件开发计划,包括项目时间表、任务分配等。
  2. 环境搭建

    • 配置开发环境,包括安装集成开发环境(IDE)和相关工具链。
    • 配置主控板的硬件开发环境,包括连接调试器、下载器等。
  3. 初始化设置

    • 编写启动代码和初始化函数,配置主控板的时钟、GPIO、中断等基本设置。
    • 初始化外设,如UART、SPI、I2C等,以及定时器、ADC等。
  4. 任务调度和多任务管理

    • 设计并实现系统的任务调度策略,包括实时操作系统(RTOS)或简单的任务调度器。
    • 将系统划分为多个任务(Task),并实现任务之间的优先级和调度。
  5. 驱动程序开发

    • 开发外设驱动程序,包括与传感器、执行器、通信设备等相关的驱动程序。
    • 确保驱动程序能够正确初始化和控制外设,并提供简洁清晰的API供上层调用。
  6. 通信协议实现

    • 实现与其他设备之间的通信协议,如UART通信、SPI通信、I2C通信等。
    • 如果需要,实现蓝牙通信、WiFi通信等无线通信协议。
  7. 功能实现

    • 根据项目需求,实现各种功能模块,如数据采集、数据处理、控制算法等。
    • 编写相应的算法和逻辑代码,确保功能的正确性和稳定性。
  8. 调试和测试

    • 在开发过程中进行调试和测试,包括单元测试、集成测试和系统测试等。
    • 使用调试工具和仪器对程序进行调试,确保系统的稳定性和可靠性。
  9. 优化和性能提升

    • 对程序进行优化,包括优化算法、优化代码结构、减少功耗等方面的优化。
    • 通过性能测试和功耗测试,评估系统的性能和功耗,并进行必要的调整和优化。
  10. 文档编写

    • 编写相关的软件设计文档(SDD)、用户手册等,记录系统的设计思路、功能说明和使用方法等。

        主函数主要分为延迟时间初始化、串口接收模块程序、电机初始化三个部分。主要函数的流程图如图所示:

主函数程序代码如下:

串口接收模块程序

下面是一个简单的串口接收模块程序流程:

  1. 初始化串口

    • 配置串口参数,包括波特率、数据位、停止位、校验位等。
    • 启动串口接收和发送功能。
  2. 等待数据接收

    • 在主循环中,通过轮询或者中断方式等待接收到数据。
    • 如果采用轮询方式,可以使用串口接收函数 HAL_UART_Receive() 来检查是否有数据到达。
    • 如果采用中断方式,可以通过配置相应的中断回调函数来处理接收到的数据。
  3. 处理接收到的数据

    • 一旦接收到数据,可以在接收完成的回调函数中进行数据处理。
    • 可以将接收到的数据保存到缓冲区中,或者直接进行相应的逻辑处理。
  4. 根据需求进行响应操作

    • 根据接收到的数据内容,进行相应的操作。比如,根据指令控制外设、执行特定的任务等。
    • 如果需要对接收到的数据进行解析,可以使用字符串处理函数或者自定义的解析函数进行处理。
  5. 发送响应数据(可选)

    • 如果需要,可以根据处理结果向发送方返回响应数据。
    • 使用串口发送函数 HAL_UART_Transmit() 将响应数据发送回去。
  6. 循环处理

    • 在主循环中不断重复以上步骤,等待接收数据、处理数据,并根据需求进行响应操作。

        主控板接收到蓝牙从串口传来的数据后存入Res变量,然后通过分支程序来选择执行前进、后退、左转、右转和停止等功能。该模块的程序流程图如图所示:

修改PWM输出值程序

下面是修改PWM输出值的一个简单程序流程:

  1. 初始化定时器和PWM输出通道

    • 使用HAL库或者其他适合的库初始化定时器和PWM输出通道。
    • 设置定时器的时钟源、计数模式、周期值等参数。
    • 配置PWM输出通道的通道号、占空比、极性等参数。
  2. 修改PWM输出值

    • 在程序中根据需要修改PWM输出值。
    • 使用PWM输出函数(如 HAL_TIM_PWM_Start()HAL_TIM_PWM_Stop())启动或停止PWM输出,或者使用修改占空比的函数(如 HAL_TIM_PWM_ConfigChannel())来调整PWM输出的占空比。
  3. 循环处理或事件触发

    • 根据需要,在主循环中循环修改PWM输出值,或者在外部事件触发时修改PWM输出值。
    • 如果是在主循环中循环修改,可以在一个无限循环中周期性地修改PWM输出值。
    • 如果是在外部事件触发时修改,可以在相应的事件回调函数中修改PWM输出值。
  4. 处理异常情况

    • 在修改PWM输出值的过程中,可能会遇到一些异常情况,如参数设置错误、硬件故障等。
    • 在程序中添加适当的异常处理代码,如错误提示、重新初始化等,以确保系统的稳定性和可靠性。
  5. 测试和调试

    • 在修改PWM输出值的过程中,及时进行测试和调试,确保输出的PWM信号符合预期,且没有异常情况发生。
    • 使用示波器或者逻辑分析仪等工具对PWM输出信号进行观测和分析,以验证输出信号的正确性和稳定性。
  6. 优化和性能提升

    • 根据测试结果对程序进行优化,包括优化算法、调整参数、减少功耗等。
    • 可以根据实际需求对PWM输出的控制精度、响应速度等进行调整和优化。

该程序是基于“4_PWM的实现”中的程序改编的。部分代码如下:

设置电机转向程序

以下是设置电机转向的简单程序流程:

  1. 初始化电机控制引脚

    • 根据电机控制方案,确定电机控制引脚的接口,通常是GPIO引脚。
    • 使用HAL库或其他适合的库初始化这些GPIO引脚,并配置为输出模式。
  2. 确定电机控制方式

    • 确定电机控制方式,例如直流电机的正反转控制、步进电机的旋转方向控制等。
    • 根据电机控制方式确定控制引脚的操作顺序和电平变化规律。
  3. 编写电机控制函数

    • 编写函数来控制电机的转向,根据不同的控制方式实现相应的控制逻辑。
    • 对于直流电机的正反转控制,可以编写两个函数分别控制电机的正转和反转。
    • 对于步进电机的旋转方向控制,可以编写一个函数根据不同的旋转方向来控制电机的步进脉冲信号。
  4. 调用电机控制函数

    • 在需要改变电机转向的地方调用相应的电机控制函数。
    • 根据具体需求确定何时调用电机控制函数,例如在接收到特定命令时、在检测到特定条件时等。
  5. 处理异常情况

    • 在电机控制过程中可能会出现异常情况,如电机无法正常启动、电机堵转等。
    • 在程序中添加相应的异常处理代码,例如增加超时保护、检测电机运行状态等。
  6. 测试和调试

    • 在实际运行中对电机转向的控制进行测试和调试,确保电机能够按预期转向。
    • 使用示波器或逻辑分析仪等工具监测电机控制引脚的电平变化,以验证电机控制的正确性。
  7. 优化和性能提升

    • 根据测试结果对电机控制函数进行优化,包括提高响应速度、减少功耗、增加稳定性等方面的优化。

       该程序将电机驱动模块的8个输入端口接到了主控板的8个GPIO口,通过推挽输出,从而控制电机的转向,部分代码如下:

标签:输出,初始化,函数,电机,小车,蓝牙,STM32,控制,PWM
From: https://blog.csdn.net/weixin_47273943/article/details/137237344

相关文章

  • 基于keil搭建stm32项目
    1.下载stm32cube的固件包1.1进入st的官网ST官网传送门1.2查找固件包 1.3找到自己的硬件对应的系列的固件包 1.4选择固件包点击进入后,点击获取软件 1.5选择版本下载 2.创建项目相关的目录2.1创建项目相关的目录 2.2给Drivers添加相关的驱动文件或者目录......
  • 初探STM32f407VET6
    一、买到了板子,自己分析引脚功能我在某宝上买到一块stm32f407vet6的板子,图便宜,结果遇上了个态度差的客服。没有说明,没有资料。不能退换,只能自己想办法分析引脚在嘉里创找到了芯片原理图(LQFP-100封装),想着看走线猜引脚,结果拿着放大镜找了许久没有进展。这板子上有许多过孔,走线......
  • STM32FATFS(未完待续)
    注意,本博客适合像我一样的小白,会的不多,但是想快速做些东西,不适合会写驱动的大佬。另外,示例代码中的注释有误(从多个项目中移植过来的,未做更改),请不要被误导!!!【免费】stm32f103c8t6SD卡驱动(Fatfs)资源-CSDN文库一、copy源码,移植我在CSDN上找到了一位大佬用HAL库和fatfs实现stm32f......
  • STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天原理解析)
    STM32第六天一、 USART1、USART概念USART:(UniversalSynchronous/AsynchronousReceiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备处理器与外部设备通信的两种方式:u并行通信(八车道)......
  • 不到2000字,轻松带你搞懂STM32中GPIO的8种工作模式
    大家好,我是知微!学习过单片机的小伙伴对GPIO肯定不陌生,GPIO(generalpurposeinputoutput)是通用输入输出端口的简称,通俗来讲就是单片机上的引脚。在STM32中,GPIO的工作模式被细分为8种,对于初学者来讲,要理解它们可太难了!诶诶诶,给个机会,先别急着退出哈!这不是有我在呢,跟着这篇文......
  • 基于stm32云平台a42智能头盔(APP)物联网嵌入式软硬件开发单片机毕业源码案例设计
    (1)硬件端1.   加速度传感器:用于检测头部是否遭受冲击或碰撞,以触发警报。2.   气体传感器:用于检测有害气体浓度,如CO、CO2、NH3等,防止中毒和窒息等危险情况。3.   光敏传感器:用于检测光线强度,以便在光线昏暗的环境下提醒员工注意安全。4.   声音传感器:可用于......
  • 蓝牙BLE开发——如何实时监听蓝牙适配器状态变化及回调
    uniapp监听蓝牙适配器状态变化事件近年来开发项目中接触比较多的与硬件设备对接,通过蓝牙与设备通讯;开发App、微信小程序,今天分享其中如何监听蓝牙适配;近期比较忙,不定时更新,有时间会分享uniapp开发蓝牙项目的Demo,个人分享,仅供参考。如何实时监听手机蓝牙状态变化并......
  • 【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试
    本篇文章基于STM32F103和CH390H芯片进行例程移植及相关注意事项,简单验证TCP\UDP\Ping基础功能。硬件:STM32F103开发板+沁恒CH390H的评估版图一示,SPI使用接口为:INT->PA0,RST->PA1,CS->PA2,SCK->PA5,MISO->PA6,MOSI->PA7,WOL->PA8。 图一 软件移植:采用的沁恒官方提供的CH......
  • OM6650AM支持蓝牙5.1协议栈与2.4GHz私有协议的双模无线连接SoC芯片
    OM6650AM是一款超低功耗、同时支持蓝牙5.1协议栈与2.4GHz私有协议的双模无线连接SoC芯片,采用4.0mmx4.0mmQFN32封装,具有丰富的资源,极低的功耗,优异的射频性能,可广泛应用于车载数字钥匙模组、胎压检测、PKE钥匙等场景。01主要特性蓝牙规格:全功能BLE5.1;支持数据传输速率:1Mb......
  • 【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)
    这里写目录标题STM32资料包:百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888提取码:8888一、任务描述二、任务实施1、工程文件夹创建2、函数编辑(1)主函数编辑(2)USART1初始化函数(usart1_init())(3)USART数据发送函数(USART1_Send_Data())(4)USART......