TB6612模块驱动JGB37-520编码电机并测速(基于STM32F103C8T6)

前言

学习笔记!!!若有侵犯或错误,请告知删改,谢谢大佬指点!!!
我的购买链接(无广):JGB37-520编码器电机 智能小车电机 DC12V小马达小车套件测速电机-淘宝网
视频参考:3.1.【电机】电机调速原理_哔哩哔哩_bilibili
                [6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机_哔哩哔哩_bilibili
文章参考:【一文搞懂】—带霍尔编码器的直流有刷减速电机-CSDN博客

硬件介绍

JGB37-520编码电机

组成结构

外观(带 霍尔传感器相位90°放置编码电机

转子(线圈)
换向器
定子(磁瓦)
减速齿轮

性能参数

本人购买的是333转每分钟的DC12V版本,为下图黄色部分数据所示参数。看图得出什么结论呢?

直流有刷电机工作原理

 看不懂没关系,本来什么都不懂,还要学习,会用就行。究极原理:电压越高,空载转速越大;电流越大输出扭矩越大。符合安培力左手定则产生力,从而产生转动

直流有刷电机等效电路以及工作原理

参数图像

霍尔传感器

         霍尔传感器和磁性编码盘组成,编码盘上安装有磁极,当盘旋转时,磁极的位置发生变化,经检测后可得到转子位置和转速等信息。按照工作原理,可以分为增量式编码器和绝对式编码器,绝对式编码器对应的每一个位置对应一个确定的二进制数字码。增量式编码器就是每转过单位的角度就发出一个脉冲信号。    

TB6612FNG模块

        这芯片大家肯定比较熟悉了,TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流 MOSFET-H 桥结构,双通道电路输出,可以同时控制两路输出。输出电流IOUT = 1.2 A(平均值)/3.2 A (峰值)

TB6612引脚功能
PWMA控制电机A路的转速
AIN1控制电机A路的转动方向
AIN2控制电机A路的转动方向
PWMB控制电机B路的转速
BIN1控制电机B路的转动方向
BIN2控制电机B路的转动方向
STBY待机控制,一般接高电平3.3V,可以单独接单片机引脚控制启动关闭
VCC逻辑电源(2.7-5.5V)
GND接地
VM电机电源,VMmax = 15 V

双H桥正反转控制


调速原理

内部结构

双H桥左右一致

方向控制****

控制图(CCW为逆时针旋转,全称:Counter Clock Wise
TIM内部通道

需配置部分

联合硬件接线:

    接线:    PWMA-PA8,PWMB-PA11--->AF_PP
                    AIN1-PB12,AIN2-PB13---->Out_PP
                    BIN1-PB14,BIN2-PB15---->Out_PP

实现效果:

nice!!!

代码在代码 · 亿只搞学习的空大白/STM32F103C8T6平衡车 - 码云 - 开源中国

霍尔传感器测速

 测速原理

        可以检测单位时间内产生的脉冲数来确定电机转速。由于电机转动一圈产生的脉冲数是确定的。比如我们有一个减速比为1:30的减速电机,霍尔编码器的线数为11。那么霍尔码盘旋转一圈,产生11个脉冲,霍尔码盘旋转30圈,电机主轴旋转一圈。综上所述,电机主轴旋转一圈会产生11 * 30 = 330个脉冲。注意,这里是只检测A相的上升沿脉冲,电机旋转一圈有390个脉冲。

        使用的是 JGB37-520电机内置霍尔编码器,其码盘每旋转一圈产生11个脉冲(单相) 。由于A、B两相存在90°相位差,通过四倍频技术(检测A、B相的上升沿和下降沿,可设置)可将每圈有效脉冲数提升至44个,从而提高测速精度 。总脉冲数=11(线数)×4(四倍频)×30(减速比)=1320脉冲/圈,脉冲数由测量所得,采样周期编程设定,即可得出转速

判断方向

        对脉冲信号进行采集,转动一圈会产生几个脉冲,取决于编码器的线数。JGB37-520编码电机线数为11。霍尔编码器的码盘旋转一圈,会产生11个脉冲。 通过检测霍尔编码器输出的脉冲信号来测速。通常会有三相输出,A、B和Z。A和B的输出是正交的。Z是用来标记旋转一周的起始位置,通常不使用。

以下是一个用STM32F103C8T6编码电机JGB37-520测速的基本代码框架: ```c #include "stm32f10x.h" /* 定义编码器引脚 */ #define ENCODER_GPIO_PORT GPIOA #define ENCODER_GPIO_PIN GPIO_Pin_0 /* 定义PWM输出引脚 */ #define PWM_GPIO_PORT GPIOB #define PWM_GPIO_PIN GPIO_Pin_0 /* 定义计器 */ uint32_t encoder_counter = 0; /* 定义速度 */ float speed = 0; /* 定义定时器中断处理函 */ void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { /* 读取计器值计算速度 */ uint32_t counter_value = TIM_GetCounter(TIM2); speed = (float)counter_value / (float)2000; encoder_counter = counter_value; /* 重置计器 */ TIM_SetCounter(TIM2, 0); /* 清除中断标志位 */ TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } } /* 主函 */ int main(void) { /* 初始化编码器引脚 */ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = ENCODER_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(ENCODER_GPIO_PORT, &GPIO_InitStructure); /* 初始化PWM输出引脚 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = PWM_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PWM_GPIO_PORT, &GPIO_InitStructure); /* 配置定时器 */ TIM_TimeBaseInitTypeDef TIM_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_InitStructure.TIM_Period = 0xFFFF; TIM_InitStructure.TIM_Prescaler = 71; TIM_InitStructure.TIM_ClockDivision = 0x0; TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_InitStructure); /* 配置定时器中断 */ NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* 启动定时器 */ TIM_Cmd(TIM2, ENABLE); /* 主循环 */ while(1) { /* 控制PWM输出,这里使用占空比为50%的PWM波 */ TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 499; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); /* 延时一段时间 */ delay_ms(1000); } } ``` 在这个代码中,我们使用STM32的定时器来测量编码器的脉冲量,计算出电机的速度。我们还使用PWM输出来控制电机的转速。 需要注意的是,这个代码只是一个基本的框架,还需要根据实际情况进行调试和优化。同时,编码器和PWM输出的引脚连接需要根据具体的硬件设计进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值