小兴教你做平衡小车-JGB37-520电机介绍

1 前言

为了更好的对JGB37-520这款电机有个了解,这里直接上图应该会清晰些。这款电机带有霍尔编码器,方便对车轮的转速进行采集。咱们在使用的时候,需要关注六根端子线即可。颜色依次为红(电机电源+)、黑(编码器电源-)、黄(信号线)、绿(信号线)、蓝(编码器电源+)、白(电机电源-)。
在这里插入图片描述
在这里插入图片描述
另外,还有选型的问题,当时我去某鱼买的时候,店家问我需要哪一种型号的,当时直接蒙住了。原来JGB37-520电机还有不同的配置。这是一个大图,咱们只需要关注额定电压为12V的电机即可。我选择的是减速比30,空载转速200RPM的电机。我也是折中选择了一个不快也不慢的电机。
在这里插入图片描述

2 分析电机安装板

我花了巨资买了两个电机,但是得想办法将他们固定起来吧。等等,这不是买电机送的电机底座嘛。这个孔应该是M3的,那只需要测量出四个孔之间的距离即可。经过一顿猛如虎的操作后,最终得到距离。如果将四个孔的中心连在一起,他是一个长方形,那我们可以使用价格低廉的亚克力板来制作我们的电机安装板。咱们只需要给亚克力板厂提供CAD文件,即可以制作出属于我们自己独一无二的安装板了。
在这里插入图片描述
在这里插入图片描述
为了更换好的设计安装板,咱们先去看看其他人是怎么设计的,找找灵感。经过简短的分析,目前心里有数了,接着我们用CAD软件来制作吧。这里插一句,CAD软件和之后可能用到的solidworks软件,是电子爱好者的两大利器,做出的作品如果没有一个好看的外壳,是不是感觉缺少了点灵魂。
在这里插入图片描述
下面是我自己绘制的安装板。
在这里插入图片描述

3 介绍电机驱动板

之前我画了一块TB6612电机驱动板,目前已经焊接完成了,下面给大家介绍下。有人或许会问,你干啥要额外绘制一块电机驱动验证板呢,因为有时候,我觉得在开发一个系统的时候,我们考虑问题有时候不全面,这样设计一块板子后发现会出现各种各样的问题,做一块验证板就显得尤为必要。再比如,面对一个不太熟悉的芯片,比如一块flash芯片,如果直接根据datasheet绘制原理图直接接入系统中,不一样能保证一次成功。
此外,从成本考虑,做小小的验证板成本很便宜,这样可以大大的减少一个完整项目的开销。

3.1 电机驱动板原理图

在这里插入图片描述

3.2 电机驱动板PCB图

在这里插入图片描述
在这里插入图片描述

3.3 电机驱动板3D效果图

在这里插入图片描述
当我画出驱动验证板后,就发现了一个问题。在绘制验证板的时候,电机接口选择的是XH2.54mm-LI-6P
在这里插入图片描述
在这里插入图片描述
线则是买的与之匹配的XH2.54 6P,显然这两个期间均考虑出错,还好咱们只是制作的测试板,方便我们进行修改。
在这里插入图片描述
但是经过询问后得知,电机的接口是PH2.0接口。
在这里插入图片描述

3.4 TB6612芯片分析

TB6612芯片用于驱动电机使用,快速了解一个芯片的最好的办法就是查看数据手册。
在这里插入图片描述
咱们从半导小芯下载电机驱动芯片手册。
在这里插入图片描述
可见VM最大输入电压为15V。
在这里插入图片描述
在这里插入图片描述
芯片每个脚的功能见下图所示。
在这里插入图片描述
下图所示的引脚电压输入容忍值也需要大家关注。一旦高于这个电压有风险损伤芯片。对于下图所示的VIN,本次是使用的stm32单片机,单片机引脚输出的高电平电压为3.3V,低电平电压为0V,符合要求。
在这里插入图片描述
输入引脚和输出引脚的内部图见下图,可以看出使用最多的是二极管和MOS管。
在这里插入图片描述
下图咱们主要了解电机正转和反转即可。下图其实对于OUT1和OUT2来说,L通常是代表0V,但是H的具体代表多少需要根据PWM波的占空比来进行确定,一般来说占空比越小,H表示的电压也就越小(0V),占空比越大,H表示的电压也就越大(极限值等于VM)。
我们一般让STBY引脚接入3.3V即可。
在这里插入图片描述
参考电路如下图所示。
在这里插入图片描述
通过原理图发现自己设计的测试板少了4个电容,之后设计中可以考虑加上。有人说下图的LM1084那边不是有电容可以拿来直接使用吗,其实那些电容都是需要紧紧靠着LM1084芯片的,如果想要TB6612芯片输入电压更加稳定,就需要在其附近放上电容即可。
在这里插入图片描述

4 相关程序介绍

main.c文件。

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "pwm.h"
int main(void)
{
	//-------------------------------------------------------------------------//
	RCC->APB2ENR |= (uint32_t)0x00000010;//打开GPIOC时钟
	GPIOC->CRH   &= (uint32_t)0xFF0FFFFF;//使用前清零
	GPIOC->CRH   |= (uint32_t)0x00300000;//配置PC13为推挽输出,最大速度50MHz
	//-------------------------------------------------------------------------//
	RCC->APB2ENR |= (uint32_t)0x00000004;//打开GPIOA时钟
	//PA4-5
	GPIOA->CRL   &= (uint32_t)0xFF00FFFF;//使用前清零
	GPIOA->CRL   |= (uint32_t)0x00330000;//配置PA4-5为推挽输出,最大速度50MHz
	GPIOA->BSRR  =  (uint32_t)0x00000010;//PA4引脚输出高电平
	GPIOA->BRR  =   (uint32_t)0x00000020;//PA5引脚输出低电平
	//GPIOA->BSRR  =  (uint32_t)0x00000020;//PA5引脚输出高电平
	//GPIOA->BRR  =   (uint32_t)0x00000010;//PA4引脚输出低电平
	PWM_Init(899,0);  //(7199+1)*(0+1)/72000000hz =  0.0001s  换成频率为10khz
	TIM_SetCompare1(TIM3,450);//设置PWM占空比
	//-------------------------------------------------------------------------//
	while(1)
	{ 		
		GPIOC->BSRR  =  (uint32_t)0x00002000;//PC13引脚输出高电平
		Delay_ms(1800);                       //延时1800ms	
		GPIOC->BRR  =   (uint16_t)0x2000;    //PC13引脚输出低电平
		Delay_ms(1800);                       //延时1800ms	
	}
}

pwm.c文件。

#include "stm32f10x.h"
#include "pwm.h"

void PWM_Init(uint16_t per,uint16_t psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定义定时器的结构体
	GPIO_InitTypeDef GPIO_InitStruct;    //定义GPIO的结构体
	TIM_OCInitTypeDef TIM_OCInitStruct;  //定义输出比较结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//打开GPIOA的时钟、复用时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//打开定时器3时钟
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; //PA6
	GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;//速度为50mhz
	GPIO_Init(GPIOA, &GPIO_InitStruct);//对PA6引脚进行初始化
	
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseInitStruct.TIM_Period = per;  //自动装载值
	TIM_TimeBaseInitStruct.TIM_Prescaler =	psc;//预分频值
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);//对TIM3进行初始化
	
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;   //PWM1模式
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCNPolarity_Low;//输出比较极性低
	TIM_OCInitStruct.TIM_OutputState =  TIM_OutputState_Enable;//输出状态使能
	TIM_OCInitStruct.TIM_Pulse = 0;//初始化占空比为0
	TIM_OC1Init(TIM3, &TIM_OCInitStruct);//输出比较初始化
	
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//输出比较1预装载寄存器使能
	TIM_Cmd(TIM3,ENABLE);//TIM3使能
}

main.h文件。

#ifndef __PWM_H
#define __PWM_H

#include "stm32f10x.h"

void PWM_Init(uint16_t per,uint16_t psc);

#endif
  • 17
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值