stm32+TB6612驱动直流电机

2023-05-16

        因为单片机的不可以直接的驱动电机,所以需要在他们之间加上一个电机的驱动模块,之前的文章里面用过L298N电机驱动模块,现在再给大家推荐一个新的电机驱动模块,他比L298N好用许多,而且占用体积小,发热也少。TB6612可以一次驱动两个直流电机,输出PWM也很简单,下面就是通过实验对TB6612电机进行介绍。

一、TB6612电机驱动模块

        先介绍一下TB6612电机驱动模块的引脚功能,VM:最大接15V电源,我一般使用12V直流电源供电。VCC采用3.3V或者5V供电。板子上的GND就是接地,尽量将三个GND都接上,尽量同时接电源的GND和STM32的GND引脚。STBY:使能端口,加3.3V或者5V电压。AIN1、AIN2、BIN1、BIN2:单片机对驱动模块的输入。AO1、AO2、BO1、BO2:驱动模块对电机的输入。PWMA、PWMB:对A和B口输出PWM,通过PWM来调节电机的转速。

        可以通过输入电压的改变来控制电机的正反转,如下图:

        下面采用带编码器的减速直流电机来进行最简单的电机实验:接线如下图:

         直接用VCC和GND来带动电机,AIN1接VCC,AIN2接GND,给PWMA接VCC,STBY接VCC,这是代表电机在一个方向全速转动。如果电机正常转动的话,那么各模块就是没有问题的,可以进行下一步实验了,利用GPIO控制电机正反转,就是定义两个独立的GPIO引脚,两个都为输出模式,一个口输出高、一个口输出低,电机就可以根据GPIO的信息正反转起来了,实验简单就不上代码了。

        电机可以正反转了,那么如何控制电机的转动速度呢,这里就用到了PWM脉宽调制功能。刚才将PWMA接到了VCC上,代表PWMA一直是高电平,下来将一个IO口定义为PWM功能,通过更改占空比来调节电机的转速。以下是PWM的配置代码后面我们只需要调用TIM_SetCompare1(TIM8,20);这个函数来更改占空比,从而达到调速的功能。将输出PWM的引脚连接在驱动模块的PWMA口即可,之后电机就可以根据设置的PWM来调速转动了。

void TIM1_PWM_Init(u16 arr,u16 psc)
{  
	 GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;

	//使能GPIO外设时钟使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  
	                                                                     	

  //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	//初始化定时器ARR,PSC
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 80K
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

  //初始化输出比较参数
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OC1Init(TIM8, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

	//使能TIM1
	TIM_Cmd(TIM8, ENABLE);  //使能TIM1
 
	//MOE 主输出使能pwm
  TIM_CtrlPWMOutputs(TIM8,ENABLE);		
	
	//CH1预装载使能
	TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);  	 
	
	//使能TIMx在ARR上的预装载寄存器
	TIM_ARRPreloadConfig(TIM8, ENABLE);    
}

        利用带编码器的电机,还可以做一个闭环的电机控制系统,利用PID算法控制电机在可控的情况下可以定速的运行,这里还是PID计算出来的值就是PWM要设置的占空比。后面把平衡小车做出来时会分享出来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32+TB6612驱动直流电机 的相关文章

  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd

随机推荐

  • gsoap工具生成onvif设备搜索(remotediscovery)代码框架

    什么是gsoap工具 xff1f gSOAP 提供了两个工具来方便开发人员使用 C C 43 43 语言快速开发Web 服务应用 xff0c 通过 gSOAP 提供的这两个工具 xff0c 开发人员可以快速生成服务端与客户端代码框架 xff
  • Latex之给字符上加横线、波浪等

    Latex 前几天想在 x x x 上加波浪号 xff0c 一时间忘记怎么打 xff0c 现在记录下来 xff0c 以后好查阅 加 号 xff1a hat x 加横线 xff1a overline x 加宽 xff1a widehat x
  • 数据结构笔记-2(线性表)

    线性表 2 1 线性表 1 定义 是零个或多个具有相同类型的数据元素的有序数列 xff1b xff08 长度等于零的线性表为空表 xff09 非空线性表通常记为 xff1a L xff1d a 1 xff0c a 2 xff0c xff0c
  • 数据结构-6(图)

    图 图的逻辑结构 图的定义 xff1a 图是由顶点的有穷非空集合和顶点之间边的集合组成 xff0c 通常表示为 xff1a G 61 V xff0c E 其中 xff1a G表示一个图 xff0c V是图G中顶点的集合 xff0c E是图G
  • 【leetcode常见面试题】螺旋矩阵解题思路

    文章目录 螺旋矩阵解题思路先找行进路线找每条路线的结束位置再找每条路线的结束位置模拟行走 螺旋矩阵 II总结 螺旋矩阵 解题思路 本题可以采用模拟的方式 xff0c 设4种行走方向 xff0c 如下图 xff1a 先找行进路线 4个方向的行
  • C++面向对象程序设计学习心得

    C 43 43 面向对象程序设计学习心得 经过几周c 43 43 面向对象程序设计的学习 xff0c 对面向对象程序设计有了一些了解 递归 简单地讲 xff0c 递归就是程序直接或间接调用本身的编程技巧 xff0c 通过把一个不能或不好解决
  • STL学习心得

    STL概述 STL组件 1 容器 xff08 Container xff09 xff0d 管理某类对象的集合 2 迭代器 xff08 Iterator xff09 xff0d 在对象集合上进行遍历 xff08 注意 xff1a 这些集合可能
  • 安装nodejs和vue出现问题

    安装nodejs国内镜像时报错 npm install g cnpm registry 61 https registry npm taobao org不知道这是啥错误 xff0c 怎么改啊 xff1f 安装vue 从官网点击下载 下载后点
  • Jetson nano/nx通过网线连接电脑实现远程控制

    Jetson nano nx通过网线连接电脑实现远程控制 摘要1 nano nx桌面共享设置2 安装dconf editor解除加密3 自启VNC server4 网络共享5 获取IP地址6 安装PuTTy7 安装VNC Viewwer8
  • 一文解决MySQL突击面试,关键知识点总结

    文章目录 MySQL重要知识点回顾一 索引1 为什么需要索引2 索引的结构3 避免索引失效3 1 联合索引不满足最左匹配原则3 2 隐式转换3 3 like查询3 4 索引列存在运算或者使用函数3 5 优化器 4 执行计划4 1 type4
  • 51单片机应用篇-- --数码管60秒计时,独立按键可调

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 缘由 本来按照我的学习计划 xff0c 我现在应该是单片机的学习过程 xff0
  • 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(3-多核环境下的调度)”】

    目录 1 不同核心上分别调度2 tick中断3 关于抢占4 关于同优级的任务按时间片调度5 空闲任务6 调度程序暂停7 启动和终止8 禁用中断9 总结 Vanilla FreeRTOS调度器是具有时间切片的固定优先级抢占调度器 xff0c
  • C++ STL 总结(持续更新)

    因为机试需要用c 43 43 xff0c 暴风吸入式学习 xff08 套用 xff09 它的模板 xff0c 发现还真的挺好用的 xff0c 总结一下 时间紧急 xff0c 取自各个网上的博客 xff0c 没来得及仔细整理 xff0c 都给
  • STM32F103笔记(二)——GPIO原理

    GPIO的工作原理与两个实验实例 一 STM32F103 GPIO说明1 stm32 GPIO引脚的主要功能2 GPIO相关配置寄存器的简介3 STM32F103 GPIO的8种工作方式4种输入模式4种输出模式 二 点亮LED实例 xff0
  • VINS-Fusion代码阅读(五)

    对应解析13页 xff0c 四 前端视觉处理 主要包括特征点检测和特征点跟踪两部分 xff0c 似乎是基于openCV实现的 openCV2 4官方文档 xff0c xff08 暂时未找到openCV3 4有类似的文档 xff09 这一节在
  • 利用putty在windows上通过脚本在远程Linux机器执行指令

    一 前言 借用百度百科关于putty的描述 xff1a PuTTY是一个Telnet SSH rlogin 纯TCP以及串行接口连接软件 较早的版本仅支持Windows平台 xff0c 在最近的版本中开始支持各类Unix平台 xff0c 并
  • 结构体嵌套对齐以及结构体中含有数组的对齐,也基本总结了各类结构体对齐的问题

    目录 结构体嵌套对齐以及结构体中含有数组的对齐 其余的对齐规则 基本的结构体对齐知识点击这里 结构体嵌套对齐以及结构体中含有数组的对齐 32位系统环境 规则一 xff1a 结构体中含有数组 xff0c 数组元素类型和结构中其余的最大类型取较
  • 【杂记1】PC-Ubuntu18.04.5+ROS-melodic环境下安装cartographer功能包

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 ROS下命令行安装 xff08 简单 xff0c 稍微提一下 xff09 二 源码安装cartographer xff0
  • rosdep init 错误解决方法

    遇到的错误如下 mo 64 mo span class token operator span ThundeRobot span class token operator span span class token operator spa
  • stm32+TB6612驱动直流电机

    因为单片机的不可以直接的驱动电机 xff0c 所以需要在他们之间加上一个电机的驱动模块 xff0c 之前的文章里面用过L298N电机驱动模块 xff0c 现在再给大家推荐一个新的电机驱动模块 xff0c 他比L298N好用许多 xff0c