购物网站 购物车界面如何做,wordpress背景插件,不想用wordpress,seo零基础培训一#xff1a;步进电机简介 步进电机又称为脉冲电机#xff0c;简而言之#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩#xff0c;步进电机的角位移量与输入的脉冲个数严格成正比…一步进电机简介 步进电机又称为脉冲电机简而言之就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩步进电机的角位移量与输入的脉冲个数严格成正比,而且在时间上与脉冲同步因而只要控制脉冲的数量、频率和电机绕组的相序,即可获得所需的转角、速度和方向。 1.1 步进电机主要分类 目前市面上主要的步进电机按照绕组来分的话共有二相、三相和五相等系列最受欢迎的是两相混合式步进电机约占97%以上的市场份额其原因是性价比高配上细分驱动器后效果良好。 该种电机的基本步距角为1.8°/步配上半步驱动器后步距角减少为0.9°配上细分驱动器后其步距角可细分达256倍0.007°/微步由于摩擦力和制造精度等原因实际控制精度略低同一步进电机可配不同细分的驱动器以改变精度和效果。 目前主流的步进电机一般是42步进电机和57步进电机42步进电机的42是指长宽各42mm而不是其它含义。高一点的力矩大一些。 步距角为1.8° 。42步进电机在3D打印、网友DIY的各种写字机中用的非常多。
42步进电机 57步进电机 1.2 步进电机结构拆解 实际上步进电机内部的结构主要是由很多小齿交错而成的每交错一次步距角就可以缩小一倍步距角越小则步进电机越精密旋转一圈所需要的脉冲也就越多。目前市面上不管是42电机还是57电机亦或者是86电机步距角一般都是1.8°。
混合式42步进电机爆炸视图 42步进电机实物拆卸图 42步进电机内部齿图 二TB6600驱动器简介 步进电机驱动器有很多就比如说28步进电机驱动器ULN2003A4988以及我们使用的TB6600等等。 2.1 TB6600驱动器原理介绍 额说实话驱动器的原理十分复杂以我的能力我也讲不清楚你也听不明白所以还是搬出来最权威的手册吧
TB6600驱动器手册地址20161012102520yg1obn.pdf (dfrobot.com.cn)
虽然驱动器原理咱看不明白但是不妨碍我们使用啊
我们只要知道每一个端口分别是什么功能怎么接完全就可以了。 三电路接线图示
3.1 TB6600驱动器端口功能讲解 如下图所示TB6600驱动器一共有12个端口以及一排小开关。12个端口分别为电机使能信号ENEN-、方向控制信号DIRDIR-、步进脉冲信号PILPUL-、电机两相AA-BB-、驱动电源-。一排小开关分别是细分设置和电流设置sw1-sw3是细分设置sw4-sw6是电流设置。 ①电机使能信号ENEN-电机使能信号全名enable。顾名思义就是让电机有旋转的能力和失去旋转的能力他就相当于一个软件开关只需要通过代码设计就可以实现步进电机使能或者失能在失能的状态下无论做何种操作电机都不会有反应。
②方向控制信号DIRDIR-方向控制信号全名direction。顾名思义就是可以通过控制这个端口的高低电平进而控制电机的旋转方向。后续我们可以使用这个驱动器的特性实现按键控制电机旋转方向或者其他一些操作。
③步进脉冲信号PILPUL-步进脉冲信号全名pulse。步进脉冲信号是控制步进电机的灵魂信号简而言之控制步进电机使能信号端口可以不接顶多就让电机一直转呗。方向信号也可以不接顶多步进电机无法改变方向。但是脉冲信号一定要接根据目前对驱动器的了解驱动器内部的芯片会根据你的脉冲信号转换成能让步进电机旋转的信号具体怎么做的还是去看驱动器技术文档哈。
④电机两相AA-BB-按照目前的步进电机来说市场上目前现行的步进电机一般都是二相步进电机因为这样做在保证精度的情况下更省成本。
⑤拨码开关拨码开关的sw1-sw3是细分设置sw4-sw6是电流设置。像42电机我们假设采用8细分转一圈需要1600个脉冲。他的额定电流是1.5A那么我们就需要根据电流设定表给他设定成 SW4 ON ,SW5 ON ,SW6 OFF。 至于怎么设置拨码开关 在驱动器背部都写的明明白白的按照上面写的来做就行了。
3.2 步进电机接线示意图 想要实现控制必须有控制器、驱动器和控制对象。控制器我们就选用STM32F407单片机进行控制至于为什么选这个因为我只有这个用STM32F103单片机也不是不可以。驱动器我们就选用TB6600步进电机驱动器控制对象就是我们的42步进电机。 3.3.1 驱动器接线 驱动器接线一般有两种共阴极接法和共阳极接法。其实本质上都是一致的共阴极即是把EN-、DIR-、PUL-全部都接到控制器上面的GND也就是把他们全部接为低电位其他端口只要设置为高电平就可以实现功能共阳极也就是反过来接线EN-、DIR-、PUL-全部都接到控制器上面的VCC也就是把他们全部接为高电位其他端口只要设置为低电平就可以实现功能。本质上都是检测到电位差实现相关功能。我们在此采用共阴极的接法。 先凑合看一下吧本人画图能力实在有限。 注意到驱动器能够接受的输入电压在直流9-42V左右最合适的还是在24V。注意驱动器VCC和GND不要接反了接反了驱动器就要抽烟抽死了。 剩下的A、B两相AA-BB-你不用担心步进电机的四根线到底谁是A相谁是B相。电机内部结构特性决定了谁是都可以只是旋转方向会有差别而已好像是这样。教你一个小妙招电机上面一共四根线从中找出两根只要这样根线碰在一起步进电机手动旋转起来有阻力那就说明这是同一相不需要管是A相B相暂定是A相那另外两根线就是B相了。 3.3.2 控制器接线 控制器接线很简单接那个I/O口全看自己的设置就像我的话我设置的PB3是控制步进电机旋转的I/O口PB4是控制步进电机方向的I/O口接线时只需要将PUL接到PB3DIR接到PB4即可这点没有什么可说的。
四代码编写思路 下面就是紧张又刺激的代码编写阶段了。在这里我说一下主要最为重要的代码怎么编写想要全套源码的uu们可以在文档结尾下载工程源码。 其实在代码里面注释已经写得很清楚了基本上不需要再怎么介绍了直接上代码。
Motor.c
#include Motor.h
#include Delay.h
#include led.h#define TotalNulses 1600 //设置步进电机为8细分脉冲总数为1600脉冲// Motor 配置
void Motor_Init(void)
{ //首先打开准备输出引脚的时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//紧接着初始化对应的GPIO端口进行相应的参数配置GPIO_InitTypeDef GPIO_InitStructure; //创建GPIO_InitStructure结构体GPIO_InitStructure.GPIO_Mode GPIO_Mode_OUT; //设置引脚模式为输出模式GPIO_InitStructure.GPIO_OType GPIO_OType_PP; //设置为推挽输出GPIO_InitStructure.GPIO_Pin GPIO_Pin_3 | GPIO_Pin_4; //设置引脚为PB3和PB4引脚GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_DOWN; //设置为下拉输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //设置为输出速度为50MHzGPIO_Init(GPIOB,GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_3 | GPIO_Pin_4); //设置引脚的初始状态为高电位状态
}void Motor_Start(void)
{LED_BLUE_OFF; //宏定义蓝灯打开LED_RED_ON; //宏定义红灯熄灭Delay_ms(1000);GPIO_SetBits(GPIOB,GPIO_Pin_4);for(int i 0; i TotalNulses*2; i) //模拟PWM控制步进电机{GPIO_SetBits(GPIOB,GPIO_Pin_3);Delay_us(500); //可以修改延时函数里面的参数更改步进电机旋转的速度。本质上是模拟改变了PWM的频率进而改变了速度GPIO_ResetBits(GPIOB,GPIO_Pin_3);Delay_us(500);}LED_BLUE_ON;LED_RED_OFF;Delay_ms(1000);GPIO_ResetBits(GPIOB,GPIO_Pin_4); //置PB4为低电位改变旋转方向for(int i 0; i TotalNulses*2; i) //跟上文一样不过是改变了步进电机旋转的方向{GPIO_SetBits(GPIOB,GPIO_Pin_3);Delay_us(500);GPIO_ResetBits(GPIOB,GPIO_Pin_3);Delay_us(500);}
} 这段代码主要配置了控制步进电机脉冲和方向的两个端口引脚然后自定义了一个电机控制函数在函数里面模仿了PWM波形进行步进电机的控制。
Main.c
#include stm32f4xx.h
#include led.h
#include Delay.h
#include usart.h
#include Motor.h
#include stm32f4xx_tim.huint16_t speed500;// 程序入口主函数
int main(void)
{USART1_Init(115200); // 初始化USART1; 注意, 在bsp_USART.c文件底部printf已重定向到usart1, 可用于与电脑上位机通信;Led_Init(); // LED 初始化Motor_Init(); // 配置TIMwhile (1) // while函数死循环作用不能让main函数运行结束否则会产生硬件错误{Motor_Start();}
}// 每个代码文件的末尾注意要加两个空行 还有其他例如通信USARTLED模块在mian函数里面运行移植时可能会出现灯不亮等情况只需要简单的修改参数就可以了。至于工程源码大家可以到文章结尾进行下载。
五实操效果展示 当然是可以旋转的更快的只需要修改Motor,c里面的模拟PWM波形函数里面的Delay_us()的参数即可本质上是修改了模拟PWM的频率频率越高电机旋转的就越快。 文件源码分享02-1 Simple IO Port Control Of Stepper Motor.zip - 蓝奏云 关于后续的PWM控制将会在后面进行讲解。看在码字不易用的不是某盘的份上uu们可以点个赞嘛谢谢。 与君共勉 დ关注我持续更新中~