• 用到的模块
  1. TB6612FNG电机驱动模块
  2. stm32F103C8T6最小系统板
  3. LM2596S降压模块
  4. 直流减速电机(不涉及编码器知识)
  • 模块介绍

1.TB6612FNG电机驱动模块

(1)<概述>

TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET-H桥结构,双通道电路输出,可同时驱动两个电机。

与L298N使用基本一致。而且,相比于L298N的热耗性和外围二极管续流电路,其无需外加散热片,外围电路简单,只需接电源滤波电容就可

以直接驱动电机,利于减小系统尺寸。对于PWM信号输入频率范围,高达100kHz的频率更是可以满足我们的大部分需求。

(2)<主要参数>

最大输入电压 VM=15V
最大输出电流 Iout=1.2A(平均)
模式 正反转/短路刹车/停机功能
内置电路

过热保护,低压检测

(3)<模块接线图>

(对应口可以在模块背面看到)

解读:VM直接接电池即可,VCC是内部逻辑供电,一般给3.3V或者5V都可以,模块的三个GND接任意一个即可,因为都是导通的,STBY置高模块才能正常                            工作。

完成上面的工作之后,我们就可以开始搭载硬件电路了。

2.  LM2596S DC-DC降压电源模块

(1)<产品参数>

输入电压 3.2V~46V
输出电压 1.25V~35V
输出电流 3A以内
转换效率 92%以内
输出文波 <30mV
开关频率 65kHz
工作温度 -45℃~+85℃
尺寸大小

43.2mm*21.0mm*14.0mm

(长*宽*高)

笔者用12V电源供电,那接到单片机及电机驱动模块内部驱动口必须经过降压到3.3~5V才可以给正常供电。

话不多说,上图:

(2)<具体使用>

——可以看到模块的正面有一个蓝色的长方体,顶部有一个旋钮,可能比较难操作,我们用一字形螺丝刀(细一点的)来旋转上面的旋钮即可调节输出电压。注意降压模块的四角,我们可以看到    IN-   IN+   OUT-   OUT+    的字样。IN则为输入电压所接脚,OUT则为输出电压所接脚,外部电源就是通过这个模块于内部电路形成联系。

——指示灯亮,模块正常工作。

——IN+/-接外部电源,用万用表测量输出OUT+/-的电压值达到所需要电压为止

——长时间工作建议在2.5A以内的电流使用,同时加上散热片(10W以上输出);由于是降压模块,为了保证输出稳定,请保持最小1.5V压差

3.直流减速电机

按照惯例还是先上图介绍

                              (电机参数  ——>  购自平衡小车之家)

所以这次单纯控制电机,我们只需单纯引出两条线接到驱动模块上

  • 具体电路搭建

——电路必须依靠软件的控制前提,所以我们从软件入手

1.打开cube,输入STM32F103C8,点进去进行如图配置(PWM频率选取10kHz)

(PA1/PA2为Output模式)

(打开TIM1通道一,设为PWM输出模式)

(注意77和99)(用这个来确定PWM频率)

(时钟树设定,查表看到TIM1挂载于APB1 timer clocks)

到这,我们的cube已经配置完毕。

我们点击齿轮创建工程

2.关于程序的编写

int main(void)
{
/* USER CODE BEGIN 1 */
uint16_t pwm_val = ;
/* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET) ;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{ /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
while (pwm_val < )
{
pwm_val++;
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val);
HAL_Delay();
}
while (pwm_val)
{
pwm_val--;
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_val);
HAL_Delay();
}
/* USER CODE END 3 */
}
}

其中(1)在main函数中定义一个变量pwm_val用于控制PWM输出的占空比。

(2)HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);          //即在while(1)之前使能PWM输出通道CH1。

(3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET) ;
                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);  //定义IO

(4)在while(1)中不断改变PWM输出的占空比,控制电机的转动速度,实现一个电机转动速度由慢到快再由快到慢的的效果。周期约为5秒。要注意的是,配置的自动加载参数是99,在while(1)                  中,占空比的变化是范围是0~50。

3.关于实物的连接

用HAL库结合STM cube编写代码控制stm32f103c8t6来驱动减速电机实现慢快逐步切换转动的更多相关文章

  1. STM32使用HAL库,使用延时卡死的问题。

    之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题.发现我使用库里的延时程序HAL_Delay()时,会卡死在里面. 根据程序,进入到这个延时程序后 ,发现HAL_GetTick ...

  2. STM32,下载HAL库写的代码后J-Link识别不到芯片,必须要按住复位才能下载?

    问题描述:最近在学STM32的HAL库,据说可以统一STM32江湖,前途无量.最近一段时间参照STM32CubeMX和原子的资料自己学着建了两个HAL库的工程模板,F4的还好说,F1的出现了一个玄学问 ...

  3. STM32 软件模拟 IIC 代码,标准库、HAL库可用

    #ifndef _IIC_H #define _IIC_H #include "stdio.h" #include "stm32f1xx_hal.h" /* 定 ...

  4. STM32 之 HAL库(固件库) _

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  5. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  6. 【HAL库每天一例】freemodbus移植

    例程下载:资料包括程序.相关说明资料以及软件使用截图 百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1 360云盘:https://yunpan.cn/OcP ...

  7. (4)STM32使用HAL库实现串口通讯——理论讲解

    一.查询模式 1. 二.中断模式 1.中断接收. 1.1先看中断接收的流程(以 USART2 为例) 在启动文件中找到中断向量 USART2_IRQHandler 找到USART2_IRQHandle ...

  8. (2)STM32使用HAL库操作外部中断——理论讲解

    1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...

  9. STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)

    STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...

随机推荐

  1. hdu 1325 Is It A Tree? (树、node = edge + 1、入度 <= 1、空树)

    Is It A Tree?Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  2. nyoj 62-笨小熊(以对应数组中的ASC位 + 1)

    62-笨小熊 内存限制:64MB 时间限制:2000ms Special Judge: No accepted:15 submit:43 题目描述: 笨小熊的词汇量很小,所以每次做英语选择题的时候都很 ...

  3. nyoj 83-迷宫寻宝(二) (计算几何, 叉积)

    83-迷宫寻宝(二) 内存限制:10MB 时间限制:1000ms 特判: No 通过数:2 提交数:6 难度:5 题目描述: 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个 ...

  4. windows下安装Apache、php、mysql集成环境

    一.准备工作 本次安装的版本分别为:apache2.4  .php5.6 . mysql5.7 下载地址为:http://pan.baidu.com/s/1boQNIOn 密码:zarx 二.安装步骤 ...

  5. opencv 6 图像轮廓与图像分割修复 1 查找并绘制轮廓 寻找物体的凸包

    查找并绘制轮廓 寻找轮廓(findContours)函数 绘制轮廓(drawContours()函数) 基础实例程序:轮廓查找 #include <opencv2/opencv.hpp> ...

  6. [FPGA]Verilog实现寄存器LS374

    目录 想说的话... 正文 IC介绍 电路连接图 功能表 逻辑图 实验原理 单元实现_D触发器 整体实现(完整代码) 想说的话... 不久前正式开通了博客,以后有空了会尽量把自己学习过程中的心得或者感 ...

  7. RocketMQ一个新的消费组初次启动时从何处开始消费呢?

    目录 1.抛出问题 1.1 环境准备 1.2 消息发送者代码 1.3 消费端验证代码 2.探究CONSUME_FROM_MAX_OFFSET实现原理 2.1 CONSUME_FROM_LAST_OFF ...

  8. 聚类-DBSCAN基于密度的空间聚类

    1.DBSCAN介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度 ...

  9. CSS块级-内联元素,盒子模型

    CSS元素 元素分类和区别 常用的块状元素有: <div>.<p>.<h1>~<h6>.<ol>.<ul>.<li> ...

  10. c 程序之 最大公约数 和 最小公倍数

    1.最大公约数     30  10  -> 10 #include<stdio.h> /* 求最大公约数 辗转相减法 36 --16 4 */ int main(){ int a, ...