HD01高功率驱动高速小车

  • HD01双H桥高功率赛车驱动板
    • 驱动参数
    • 引脚分配
    • 引脚性能
  • STM32驱动代码
    • 初始化代码
    • 电机控制代码
    • 控制频率参数

HD01双H桥高功率赛车驱动板

HD01高功率驱动高速小车

  • 高功率驱动板主要提供车的速度

  • 虽然方向上有些偏差,但后续可以通过 硬件加编码器 软件PID算法解决小车差速问题

驱动参数

先看看我们驱动的参数

一般情况下驱动电流决定了小车的速度
驱动17A 完全碾压L298N
这里推荐新手如果不是缺钱的话 最好买一个好点车模 和驱动

引脚分配

然后我们看他的操作引脚

引脚性能

  • VM GND M+ M- 这个没什么好说的

  • DIR控制方向

  • SLP控制开关

  • PWM控制速度

  • 而FLP CS 作为检测

  • 可以用读取IO口作为FLP的状态读取 就和按键差不多

  • 用ADC采集样本

  • 首先我们分配引脚

STM32驱动代码

  • 然后我们根据我们要写的功能写一个基本控制的初始化

初始化代码

#include "motor_control.h"
#include "led.h"uint16_t PrescalerValue = 0;  //20msvoid Montor_Init(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)LED_warning();                   //ELT ¶ÁÈ¡¹ÊÕÏ PB5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB ,&GPIO_InitStructure);                GPIO_ResetBits(GPIOB,GPIO_Pin_7);                    //PB7 CS  µçѹ²âËÙGPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);                GPIO_SetBits(GPIOB,GPIO_Pin_3);                  //PB3 SLP ¸ßµçƽ´ò¿ª  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;               GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);                GPIO_SetBits(GPIOC,GPIO_Pin_10);                     //PC10 DIR ¸ßµçƽ´ÓÕýµ½¸ºÊý  /* System Clocks Configuration *//* TIM3 clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);/* GPIO Configuration *//*GPIOB Configuration: TIM3 channel1, 2, 3 and 4 */GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}

电机控制代码

然后再编写一下PWM模块 PWM有两组 一组是舵机控制
采用的20ms 周期
一种是电机控制 他们推荐我们使用的20KHZ

控制频率参数


代码如下

#include "mypwm.h"
uint16_t DUOJI =62;//0-125
uint16_t TIAOSU =62;
void TIM3_PWM_Init(void)
{uint16_t PrescalerValue = 0;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;   /* System Clocks Configuration *//* TIM3 clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);/* GPIO Configuration *//*GPIOB Configuration: TIM3 channel1, 2, 3 and 4 */ \GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* -----------------------------------------------------------------------TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:The TIM3CLK frequency is set to SystemCoreClock (Hz), to get TIM3 counterclock at 24 MHz the Prescaler is computed as following:- Prescaler = (TIM3CLK / TIM3 counter clock) - 1SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-densityand Connectivity line devices and to 24 MHz for Low-Density Value line andMedium-Density Value line devicesThe TIM3 is running at 36 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)= 24 MHz / 666 = 36 KHzTIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%----------------------------------------------------------------------- *//* Compute the prescaler value */PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;/* Time base configuration */TIM_TimeBaseStructure.TIM_Period = 125;TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = TIAOSU;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC2Init(TIM3, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM3, ENABLE);/* TIM3 enable counter */TIM_Cmd(TIM3, ENABLE);}
void TIM2_PWM_Init(void)
{uint16_t PrescalerValue = 0;uint16_t CCR1_Val = 400;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;   /* System Clocks Configuration *//* TIM3 clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/* GPIOA and GPIOB clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);/* GPIO Configuration *//*GPIOB Configuration: TIM3 channel1, 2, 3 and 4 */GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* -----------------------------------------------------------------------TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:The TIM3CLK frequency is set to SystemCoreClock (Hz), to get TIM3 counterclock at 24 MHz the Prescaler is computed as following:- Prescaler = (TIM3CLK / TIM3 counter clock) - 1SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-densityand Connectivity line devices and to 24 MHz for Low-Density Value line andMedium-Density Value line devicesThe TIM3 is running at 36 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)= 24 MHz / 666 = 36 KHzTIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%----------------------------------------------------------------------- *//* Compute the prescaler value */PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;/* Time base configuration */TIM_TimeBaseStructure.TIM_Period = 125;TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = DUOJI     ;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC2Init(TIM2, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2, ENABLE);/* TIM3 enable counter */TIM_Cmd(TIM2, ENABLE);}

【嵌入式设计开发】基于STM32 HD01双H桥高功率C车模车驱动板 程序设计相关推荐

  1. 基于stm32的linux开发的书籍,跟工程师学嵌入式开发:基于STM32和μC OS-Ⅲ 带目录高清版pdf...

    本书选用的STM32芯片基于ARM Cortex-M3体系结构,根据基于MCU的嵌入式技术实际应用需求,合理地选择了多种常用的重要外设接口,如USART.SPI.I2C.FSCM.SDIO总线.以太网 ...

  2. 硬件课程设计:基于STM32的多功能播放器之小说阅读

    1 小说阅读功能 1.1 功能介绍 1.1.1 设计思路 在TFTLCD屏上显示中英文文本文件是本次硬件课程设计的基本要求,也是我设计的多功能播放器最重要的功能,要求能够读取事先存储在SD卡中的文本文 ...

  3. 硬件课程设计:基于STM32的多功能播放器之MP3音乐播放

    3 MP3音乐播放 3.1 功能介绍 3.1.1 设计思路 音乐播放是手机等电子产品最常见的功能,也是最具娱乐性的功能,在该模块中,我先从SD卡中读取已存放的MP3音乐文件,然后将读取的字节流依次送人 ...

  4. 硬件课程设计:基于STM32的多功能播放器之聊天功能

    6 聊天功能 6.1 功能介绍 6.1.1 设计思路        在该功能模块中,我打算模拟手机QQ的聊天功能,不同的是QQ是通过互联网实现手机与手机之间的通信,而我是通过蓝牙实现stm32开发板与 ...

  5. 硬件课程设计:基于STM32的多功能播放器之小游戏

    4 游戏 4.1 功能介绍 4.1.1 设计思路 为了扩展开发板的应用,同时增加实验的难度和趣味性,我设计了一个类似赛车的小游戏.游戏中共有6条车道,同时有5个障碍物,用按键1和按键2控制赛车更换不同 ...

  6. 【电机驱动芯片(单、双极性步进电机驱动方式/四相五线和42步进电机)——ULN2003、双H桥芯片(DRV8833/DRV8825)】

    文章目录 一.步进电机工作原理 1.基本原理 2.相关总结 二.单极性步进电机驱动(以ULN2003芯片+28BYJ-48电机为例) 1.28BYJ-48四相五线步进电机介绍 2.ULN2003芯片介 ...

  7. 单片机课程设计:基于STM32的温湿度检监测报警系统的设计

    基于STM32的温湿度检监测报警系统 文章目录 基于STM32的温湿度检监测报警系统 前言 一.设计任务 二.系统硬件设计 1.元器件选用 2.系统模型设计 3.硬件连接 二.系统程序设计 1.程序流 ...

  8. 智能手环功能模块设计_基于STM32实现智能手环设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:<科学导报 · 学术> 2017 年第 10 期 ...

  9. 基于STM32单片机三色全彩RGB LED灯控制系统 原理图PCB程序设计

    硬件电路的设计 (末尾附文件) 系统硬件系统分析设计 系统功能设计 本系统由STM32F103C8T6单片机核心板.RGB灯驱动.按键组成. 1.系统实时驱动RGB灯进行显示不同颜色,颜色调整可以通过 ...

最新文章

  1. 【Python】解析Python中类的使用
  2. CTFshow php特性 web106
  3. Python 类的定义、继承及使用对象
  4. Java之StringBuffer类
  5. hdu1272(简单并查集)
  6. C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
  7. GridView更新出现异常的解决过程
  8. 洛谷——P1426 小鱼会有危险吗
  9. Happens before
  10. 计算机视觉论文-2021-06-02
  11. 2021互联网大厂端午礼盒大盘点
  12. K8S集群中Pod资源处于CrashLoopBackOff状态排查思路
  13. 如何强制关闭进程linux,4种强制关闭Ubuntu中无响应应用程序的方法
  14. “一文读懂”系列:AMS是如何动态管理进程的?
  15. Click Once使用总结
  16. dp专题-cf 711c
  17. java中的命名规则(超详细~~),变量、类名、方法名
  18. npm安装的全局包/工具不能使用,不是内部/外部命令
  19. 最新版本Hadoop面试题
  20. bgp基础配置实验(基于环回口建立peer关系)

热门文章

  1. git小乌龟pull报错 You asked to pull from the remote ‘origin‘...
  2. 解读决策信息系统EIS
  3. 浅谈“脆弱的SSL加密算法“
  4. 解决Office 2007每次打开都要出现 配置Microsoft Office Professional Plus 2007
  5. strcmp比较结果异常的一种可能原因
  6. 逆袭上岸的30个考研心得
  7. 如何查看服务器CPU是几核的
  8. 论坛开张了,欢迎大家来搞
  9. 对女生都有好处的常识
  10. vue的组件components基础和安装vue脚手架