【嵌入式设计开发】基于STM32 HD01双H桥高功率C车模车驱动板 程序设计
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车模车驱动板 程序设计相关推荐
- 基于stm32的linux开发的书籍,跟工程师学嵌入式开发:基于STM32和μC OS-Ⅲ 带目录高清版pdf...
本书选用的STM32芯片基于ARM Cortex-M3体系结构,根据基于MCU的嵌入式技术实际应用需求,合理地选择了多种常用的重要外设接口,如USART.SPI.I2C.FSCM.SDIO总线.以太网 ...
- 硬件课程设计:基于STM32的多功能播放器之小说阅读
1 小说阅读功能 1.1 功能介绍 1.1.1 设计思路 在TFTLCD屏上显示中英文文本文件是本次硬件课程设计的基本要求,也是我设计的多功能播放器最重要的功能,要求能够读取事先存储在SD卡中的文本文 ...
- 硬件课程设计:基于STM32的多功能播放器之MP3音乐播放
3 MP3音乐播放 3.1 功能介绍 3.1.1 设计思路 音乐播放是手机等电子产品最常见的功能,也是最具娱乐性的功能,在该模块中,我先从SD卡中读取已存放的MP3音乐文件,然后将读取的字节流依次送人 ...
- 硬件课程设计:基于STM32的多功能播放器之聊天功能
6 聊天功能 6.1 功能介绍 6.1.1 设计思路 在该功能模块中,我打算模拟手机QQ的聊天功能,不同的是QQ是通过互联网实现手机与手机之间的通信,而我是通过蓝牙实现stm32开发板与 ...
- 硬件课程设计:基于STM32的多功能播放器之小游戏
4 游戏 4.1 功能介绍 4.1.1 设计思路 为了扩展开发板的应用,同时增加实验的难度和趣味性,我设计了一个类似赛车的小游戏.游戏中共有6条车道,同时有5个障碍物,用按键1和按键2控制赛车更换不同 ...
- 【电机驱动芯片(单、双极性步进电机驱动方式/四相五线和42步进电机)——ULN2003、双H桥芯片(DRV8833/DRV8825)】
文章目录 一.步进电机工作原理 1.基本原理 2.相关总结 二.单极性步进电机驱动(以ULN2003芯片+28BYJ-48电机为例) 1.28BYJ-48四相五线步进电机介绍 2.ULN2003芯片介 ...
- 单片机课程设计:基于STM32的温湿度检监测报警系统的设计
基于STM32的温湿度检监测报警系统 文章目录 基于STM32的温湿度检监测报警系统 前言 一.设计任务 二.系统硬件设计 1.元器件选用 2.系统模型设计 3.硬件连接 二.系统程序设计 1.程序流 ...
- 智能手环功能模块设计_基于STM32实现智能手环设计
龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:<科学导报 · 学术> 2017 年第 10 期 ...
- 基于STM32单片机三色全彩RGB LED灯控制系统 原理图PCB程序设计
硬件电路的设计 (末尾附文件) 系统硬件系统分析设计 系统功能设计 本系统由STM32F103C8T6单片机核心板.RGB灯驱动.按键组成. 1.系统实时驱动RGB灯进行显示不同颜色,颜色调整可以通过 ...
最新文章
- 【Python】解析Python中类的使用
- CTFshow php特性 web106
- Python 类的定义、继承及使用对象
- Java之StringBuffer类
- hdu1272(简单并查集)
- C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
- GridView更新出现异常的解决过程
- 洛谷——P1426 小鱼会有危险吗
- Happens before
- 计算机视觉论文-2021-06-02
- 2021互联网大厂端午礼盒大盘点
- K8S集群中Pod资源处于CrashLoopBackOff状态排查思路
- 如何强制关闭进程linux,4种强制关闭Ubuntu中无响应应用程序的方法
- “一文读懂”系列:AMS是如何动态管理进程的?
- Click Once使用总结
- dp专题-cf 711c
- java中的命名规则(超详细~~),变量、类名、方法名
- npm安装的全局包/工具不能使用,不是内部/外部命令
- 最新版本Hadoop面试题
- bgp基础配置实验(基于环回口建立peer关系)
热门文章
- git小乌龟pull报错 You asked to pull from the remote ‘origin‘...
- 解读决策信息系统EIS
- 浅谈“脆弱的SSL加密算法“
- 解决Office 2007每次打开都要出现 配置Microsoft Office Professional Plus 2007
- strcmp比较结果异常的一种可能原因
- 逆袭上岸的30个考研心得
- 如何查看服务器CPU是几核的
- 论坛开张了,欢迎大家来搞
- 对女生都有好处的常识
- vue的组件components基础和安装vue脚手架