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. Hadoop生态Zookeeper安装
  2. Nginx常用命令有哪些?
  3. mysql select high_priority_MySQL进阶SELECT语法篇
  4. 验证 decimal 和 数字
  5. PCL之鼠标拾取点云的三维坐标
  6. Scrapy运行时出现的错误 :exception.ImportError No module named win32api
  7. 蓝牙要抢ZigBee的地盘?低功耗广域网络笑了
  8. 用Visual Studio 2005/2008提取EXE文件中的资源[图片|htm|光标文件]
  9. 高等数学导数公式、微分公式和积分公式大全
  10. 财务软件虚拟服务器,新中大财务软件远程虚拟化办公方案
  11. PHP中的ereg()与eregi()
  12. python中import 模块的路径问题
  13. java-php-net-python-基于的相册软件的设计与实现计算机毕业设计程序
  14. SpringWeb项目Maven执行clean命令后编译拒绝访问的解决方法
  15. 【raft】学习五:日志结构raftLog
  16. pyhton的tkinter制作简易口算训练器
  17. Unity基础:文本框、图片自适应(ContentSizeFitter、VerticalLayoutGroup等组件的使用)
  18. usb连接不上 艾德克斯电源_艾德克斯 ITECH电源RS232通讯设置简易教程
  19. 成都工控开发:太简单了!串口触摸屏开发HMI的全流程介绍
  20. 404错误的处理方式及对SEO的影响(更新)

热门文章

  1. 计算机好的三本学校有哪些,全国较好的三本学校有哪些?(国内有哪些三本院校?)...
  2. 解决windows输入密码后,黑屏只有一个鼠标箭头
  3. 使用appium工具对漫画发表评论
  4. OpenCV学习笔记(十七)——K均值聚类
  5. beam-search及其torch实现
  6. Centos7安装Nessus教程
  7. 2.6_2 NoSQL概述
  8. elementUI进度条默认背景色修改
  9. 育碧公司注册“雷曼传奇”域名证实猜想
  10. 智能小助手:简单版(自动回复)_xing2516_新浪博客