大家好,欢迎来到IT知识分享网。
1 前言
为了更好的对JGB37-520这款电机有个了解,这里直接上图应该会清晰些。这款电机带有霍尔编码器,方便对车轮的转速进行采集。咱们在使用的时候,需要关注六根端子线即可。颜色依次为红(电机电源+)、黑(编码器电源-)、黄(信号线)、绿(信号线)、蓝(编码器电源+)、白(电机电源-)。
另外,还有选型的问题,当时我去某鱼买的时候,店家问我需要哪一种型号的,当时直接蒙住了。原来JGB37-520电机还有不同的配置。这是一个大图,咱们只需要关注额定电压为12V的电机即可。我选择的是减速比30,空载转速200RPM的电机。我也是折中选择了一个不快也不慢的电机。
2 分析电机安装板
我花了巨资买了两个电机,但是得想办法将他们固定起来吧。等等,这不是买电机送的电机底座嘛。这个孔应该是M3的,那只需要测量出四个孔之间的距离即可。经过一顿猛如虎的操作后,最终得到距离。如果将四个孔的中心连在一起,他是一个长方形,那我们可以使用价格低廉的亚克力板来制作我们的电机安装板。咱们只需要给亚克力板厂提供CAD文件,即可以制作出属于我们自己独一无二的安装板了。
为了更换好的设计安装板,咱们先去看看其他人是怎么设计的,找找灵感。经过简短的分析,目前心里有数了,接着我们用CAD软件来制作吧。这里插一句,CAD软件和之后可能用到的solidworks软件,是电子爱好者的两大利器,做出的作品如果没有一个好看的外壳,是不是感觉缺少了点灵魂。
下面是我自己绘制的安装板。
3 介绍电机驱动板
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)0x00;//配置PC13为推挽输出,最大速度50MHz //-------------------------------------------------------------------------// RCC->APB2ENR |= (uint32_t)0x00000004;//打开GPIOA时钟 //PA4-5 GPIOA->CRL &= (uint32_t)0xFF00FFFF;//使用前清零 GPIOA->CRL |= (uint32_t)0x00;//配置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)/hz = 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
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156673.html