最近在学习STM32平衡小车,最基础的就是要对电机进行驱动,电机不能直接接到GPIO口上,需要通过TB6612驱动模块进行驱动。下面对其进行一个简要的讲解

一. TB6612驱动

下图就是TB6612模块的详细原理图,这里只对如何使用进行讲解,不讲解其内部原理

  1. 可以同时驱动两个电机AB.
  2. PWMA/PWMB为两个电机提供pwm脉冲。
  3. AIN1/AIN2,BIN1/BIN2.控制电机的正反转和停止
AIN1 /BIN1 AIN2/BIN/2
0 0 停止
0 1 正转
1 0 反转
  1. STBY可以理解为一个使能端口,高电平有效。

使用方法为 : STBY高电平,提供pwm脉冲,设置A/BIN控制正反转。


二. stm32代码实现

1. 产生pwm脉冲

可以通过定时器产生,通过定时器可以产生四路pwm信号,然后通过设置CCR的值来控制占空比以控制速度的大小(和呼吸灯差不多)。

GPIO_InitTypeDef GPIO_initStructure; //输出pwm端口的GPIO初始化
TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure; //设置TIM定时器的相关参数,进行初始化
TIM_OCInitTypeDef   TIM_OCInitStructure; //但是定时器通道信息

2. 初始化其他端口

剩下的端口就是普通的GPIO端口了,只需要对其进行初始化就可以了。
然后对TIM->CCR进行赋值就可以控制电机的速度了。

复用,JTAG失能等等这些根据具体的原理图来添加。


完整代码

void pwm_init(void)
{GPIO_InitTypeDef   GPIO_initStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBase_InitStructure;TIM_OCInitTypeDef    TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);GPIO_initStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_initStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_initStructure);TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBase_InitStructure.TIM_Period = 7200-1;TIM_TimeBase_InitStructure.TIM_Prescaler = 0;TIM_TimeBaseInit(TIM2,&TIM_TimeBase_InitStructure);TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC1Init(TIM2,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);TIM_OC2Init(TIM2,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2,ENABLE);TIM_Cmd(TIM2,ENABLE);TIM2->CCR1 = 0;TIM2->CCR2 = 0;}void driver_pin_init(void)
{GPIO_InitTypeDef   GPIO_initStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_initStructure.GPIO_Pin = AIN1_pin | AIN2_pin;GPIO_Init(GPIOA,&GPIO_initStructure);GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_initStructure.GPIO_Pin = BIN1_pin | BIN2_pin;GPIO_Init(GPIOB,&GPIO_initStructure);GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_initStructure.GPIO_Pin = STBY_pin;GPIO_Init(STBY_port,&GPIO_initStructure);STBY_HIGH;AIN1_HIGH;AIN2_Low;BIN1_HIGH;BIN2_Low;}

欢迎关注 FPGA之旅 微信公众号

STM32电机TB6612驱动相关推荐

  1. STM32 电机教程 33 - 无刷电机无感控制快速实现

    前言 上一节<STM32 电机教程 32 - 基于ST X-CUBE-SPN7 无刷无感电机库的电机驱动实现>给大家分享了ST的官方的无刷电机无感控制实现方案(基于NUCLEO-F103R ...

  2. STM32 电机教程 32 - 基于ST X-CUBE-SPN7 无刷无感电机库的电机驱动实现

    前言 上一节给大家分享几篇比较好的介绍无刷电机无传感控制的文章,不知大家学习得怎么样,其实很多芯片公司(比如TI,ST,MICROCHIP,SILICON)都有推出针对他们家控制或驱动芯片的无感无刷电 ...

  3. STM32 电机教程 30 - 无刷无感入门2

    前言 无刷直流 (Brushless Direct Current, BLDC)电机是一种正快速普及的电机类型,它可在家用电器.汽车.航空航天.消费品.医疗.工业自动化设备和仪器等行业中使用.正如名称 ...

  4. STM32 电机教程 24 - ST MCLIB实战之无感变绝对式位置传感器

    前言 上一节给大讲演示了如何用ST MotorControl Workbench创建基本STM32F103C8T6芯片的FOC工程并根据实际电路成功创建了工程,但是实际电路使用的是绝对式磁编码器作为电 ...

  5. STM32 电机教程 19 - 基于ST MC Workbench 单电阻FOC

    前言 磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示: 第17及18讲成功实现了基于N ...

  6. STM32 电机教程 8 - 步进电机开环电流控制

    前言 上一讲我们已成功实现基于STM32定时器的步进电机开环速度控制,这一节将介绍步时电机的开环电流控制,步进电机内阻较大,在电机停机或堵转时其电流可近视为 I = U/R.其中R是常量,控制U就可以 ...

  7. STM32 电机教程 7 - 步进电机开环速度控制

    前言 上一讲我们已成功实现对步进电机的正反转动控制,并简单的通过调节节拍间的延时时间实现了简单的转速控制(开环),这一节将继续给大学介绍在STM32中通过定时器方式来实现节拍间的精确延时操作,并通时调 ...

  8. STM32 电机教程 6 - 步进电机转动控制

    前言 上一讲给大家介绍了步进电机的基础知识,相信大家对步进电机的基本工作原理有了一定的了解(如果没看上一节内容,可以先看一下,https://blog.csdn.net/zhanglifu360188 ...

  9. STM32之继电器驱动(上下拉电阻)

    事情的经过:今天买了一个5V继电器,商家说可以用STM32驱动,所以准备用STM32引脚直接驱动,后来,上午试了2小时,引脚一直有电平变化(配置为推挽输出),但是继电器就是没有反应,直接接上5V的电源 ...

  10. K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停

    目录 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 大功率MOS模块驱动 对应程序: 四.部分代码说明 接线说明 STC89C52RC+大功率MOS模块 STM32F103C8T6+大功率 ...

最新文章

  1. redis持久化方案比较
  2. centos 安装MySQL报错You could try using --skip-broken to work around the problem You could try running:
  3. SCCM2007系列教程之八资产管理
  4. 每次获取不同的图片按顺序从1-xxx
  5. H - Cow Contest(floyd的传递闭包性)
  6. 访问通信录 适配iOS7
  7. GDAL的一个BUG
  8. struct过滤器和拦截器的区别
  9. linux6的关机快捷键是,LINUX关机快捷键是什么?
  10. Java的冒泡排序和选择排序的实现
  11. PulseAudio 模块化实现录音和放音
  12. matlab中sum对矩阵求和以及size用法
  13. python设置代理_python使用代理proxy
  14. 网站pv和uv比例多少合适
  15. 理解以太坊 Serenity - 第二部分: Casper
  16. 提升深度学习模型的表现,你需要这20个技巧
  17. mobaxterm在线实时查看日志-命令
  18. 红蓝对抗-红队打点的那些事
  19. 解析ip到对应城市:ipdatabase
  20. 简历中的“自我评价“怎么写?记录一个满分模板

热门文章

  1. 高雅复古立式钢琴音源 Native Instruments The Gentleman Kontakt
  2. 三维计算机学校,什么是三维虚拟校园系统?
  3. python——txt文本处理
  4. 【数据压缩】H.264码流分析
  5. 黑马JavaEE云计算大数据全套视频 JavaEE云计算开发全套视频教程 超全精华班 82G
  6. 服务器远程开多个桌面,远程桌面多开,远程桌面多开的工具介绍,操作方法
  7. 网页弹出窗口代码全攻略
  8. 由于应用程序配置不正确,未能启动此应用程序
  9. flash静态的农夫走路_FLASH静态图形图像演示课件
  10. Selenium和Firefox对应版本及注意事项