目录

一、概述

二、目的

三、关键词

四、内容

1.项目用到的器件及参数

1)器件

2)步进电机参数

2.步进电机驱动器的使用

1)步进电机驱动器的介绍

2)步进电机鉴相以及接线

3.驱动函数的讲解

1)理论介绍,参数选取

2)驱动程序的书写


一、概述

步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电机又称脉冲步进电机。

二、目的

今天主要讲诉一下使用STM32驱动步进电机(文中采用的是STM32F103VET6)、步进电机的驱动方法,普通步进电机驱动器的使用方法,STM32相关引脚和定时器的配置,如何进行调速。

三、关键词

STM32, 步进电机, 步进电机驱动器, 调频;

四、内容

1.项目用到的器件及参数

1)器件

STM32F103VET6系统板、57HS7630A4D8步进电机1个、两相混合步进电机驱动器1个,开关电源(调至24V)、导线(A/B两相4根,电源2根,信号线4根“含一根脉冲信号线和一根换向线”)

2)步进电机参数

2.步进电机驱动器的使用

1)步进电机驱动器的介绍

拿到一个步进电机驱动器,首先要知道每个区域的功能,如图,共有8个拨动开关,对应的组合表示对应的功能:

  • SW1、SW2和SW3是设置驱动器输出的电流大小
  • Peak:峰值电流;
  • RMS current:均方根电流;
  • 我们的步进电机额定电流3A,这里选择Peak  为3.32,也就是SW1、SW2和SW3打到ON/OFF/ON;
  • SW4表示没有脉冲的情况下电流是全电流还是半电流。这里拨动到OFF,如果开启的是full current模式,那电机待机时不会电流自动减半,一直保持全电流。在使用时,如果是在需要保持力矩比较大的地方,那么一般不开启half current模式,以防电机失位,其他一般情况下开启half current为好;
  • SW5、SW6、SW7和SW8表示细分值;Pulse/rev:每转一圈需要的步数;
  • 对于步距角1.8°的步进电机,则旋转一圈对应的步数为:360/1.8=200,对应的细分就是1。所以当Pulse/rev为400档是,也即SW5、SW6、SW7和SW8表示OFF/ON/ON/ON时,系分数为400/200=2,也就是说转一圈需要400步,那么对应的步距角相当于1.8/2=0.9°,也就是2细分;
  • 以此类推,800对应4细分、1600对应8细分、3200对应16细分;
  • 值得注意的是,细分越大精度的确可以提高,并且电机运行更平稳,但是相对的来说脉冲频率就变大,所以一些控制器的脉宽不够,导致电机失步、堵转,所以选择细分要根据实际来调,不是越大越好。能大则大。

2)步进电机鉴相以及接线

先上接线图!!!!

鉴相:

对于两相步进电机,AB两相总共四条线,怎么才能区分那两条对应的是同一相呢,有两种常用方法:

  • 第一种是用万用表测量,当两根相线相通时为一相,那么另外两根就是另一相啦;
  • 第二种是不需要任何辅助工具,更加方便,只需要任意两个线接触在一起,然后实在拧电机的转轴,如果拧不动或者有明显的阻力感那么这两根线就是同一相啦。

鉴相完毕!下面开始接线:

对应的相线接到驱动板上,DC+和DC-接到电源的正负两极,注意电压要求以及正负极不要接反了,接下来开始接信号线。

步进电机驱动器EN是和控制器之间连接的使能信号接口,大部分情况下不需要使用使能信号,如果使用,就是让步进电机完全悬空,这里我们悬空EN端,DIR是方向线,不接也是可以的,不过不能改变旋转方向,只需要在对应的端输入相反的电位就能改变电机旋转的方向。

        我们注意到DIR和PUL都有两根,分别是正和负,我们统一接正或者负然后引出来即可。这里将PUL+和DIR+并联引出接到STM32的+5V引脚,这样的话我们只需要在PUL对应的另一个端口PUL-输入脉冲即可驱动,最终驱动板收到的脉冲信号是PUL+和PUL-之间的脉宽,因为我们已经将PUL+接好,这样的话PUL-端输入的脉冲就是驱动板收到的脉冲,同理DIR-上面给不同的电平就会改变方向;接线完成,我们开始写控制程序;

3.驱动函数的讲解

1)理论介绍,参数选取

首先将SW开关拨动到对应的位置,这里Peak为3.32,SW4为OFF,Pulse为6400;通过前面的介绍,此时细分为32细分,所以有公式

这里对应有N=1.8,X=32,

如果想要转速n=1rad/s,即每秒转1圈,则有 f=32*360/1.8=6400,仔细看会发现,选择的细分数下对应的驱动器上面的Peak值就是对应的脉冲频率。

2)驱动程序的书写

使用定时器8的通道一,产生PWM波形    详情可以看之前的博客内容,驱动舵机的那一篇,驱动步进电机与舵机用到的都是同一个定时器的配置

对于STM32F103VET6,主频为72MHZ,使用定时器产生脉冲,f=6400,对应的周期就是1/6400=0.00015625,所以此时ARR与PSC的乘积应该为0.00015625*72000000=11250,设置

TIMx->PSC寄存器设置为72-1,则TIMx->ARR寄存器值为156,这样定时器的频率就是6400HZ。定时器初始化函数如下:(注解很详细!)

void Init_Configuration1(u16 per,u16 psc)     //步进电机初始化参数配置
{GPIO_InitTypeDef   GPIO_InitStructrue;    //GPIO结构体定义TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructrue;    //时钟结构体定义TIM_OCInitTypeDef  TIM_OCInitStructrue;                //中断通道结构体定义RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    //开启GPIO端口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8 , ENABLE);    //开启定时器时钟GPIO_InitStructrue.GPIO_Mode=GPIO_Mode_AF_PP;            //引脚定义设置GPIO_InitStructrue.GPIO_Pin    =GPIO_Pin_6;                //引脚定义设置GPIO_InitStructrue.GPIO_Speed =   GPIO_Speed_50MHz;        //引脚定义设置GPIO_Init(GPIOC, &GPIO_InitStructrue);                    //引脚定义设置TIM_TimeBaseInitStructrue.TIM_ClockDivision=0;                //定时器初始化设置TIM_TimeBaseInitStructrue.TIM_CounterMode=TIM_CounterMode_Up;//定时器初始化设置TIM_TimeBaseInitStructrue.TIM_Period=per;                    //定时器初始化设置TIM_TimeBaseInitStructrue.TIM_Prescaler=psc;                  //定时器初始化设置TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStructrue);            //定时器初始化设置TIM_OCInitStructrue.TIM_OCMode=TIM_OCMode_PWM1;                //PWM1模式TIM_OCInitStructrue.TIM_OCPolarity=TIM_OCPolarity_High;        //设置PWM输出极性highTIM_OCInitStructrue.TIM_OutputState=TIM_OutputState_Enable;    //PWM比较输出使能TIM_OCInitStructrue.TIM_Pulse=0;                                //初始化脉宽为0TIM_OC1Init(TIM8,&TIM_OCInitStructrue);                        //初始化通道一TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_ENable);  //使能TIM8在CCR1上的预装载寄存器TIM_CtrlPWMOutputs(TIM8,ENABLE);     //高级定时器输出PWM必须MOE主输出使能  TIM_ARRPreloadConfig(TIM8,ENABLE);    //使能TIM8在ARR上的预装载寄存器TIM_Cmd(TIM8,ENABLE);                 //开启定时器}

PWM模式1下,只需要TIM8->CCR1寄存器的值取TIM8->ARR值的二分之一,就可以产生一个标准的方波,这里TIM8->ARR为156,TIM8->PSC为72-1,脉冲频率为6400HZ,这样通过映射到PC6管脚输出,因为STM32的标准输出电压为3.3V,所以要利用外部电路放大产生幅值为5V的脉冲,这样就可以驱动步进电机每秒旋转一圈了,如果要更改速度,只需要改变脉冲频率,也就是TIM8->ARR的值,比如此时TIM8->ARR=156,如果TIM8->ARR=100,则电机旋转速度增加,TIM8->ARR=200电机转速减小,TIM8->ARR的值越大对应的脉冲频率越小,速度就降低,反之则会速度越快。

extern int pul =156;    //默认32细分下每秒一圈,对应TIM8->ARR的值
//按键更改脉冲频率调速
//button_num为按键
//pul为脉冲宽度
void change_pulse()    //更改脉冲频率函数
{if (button_num == 4)     //减{if(Show_Send_Tag==1){pul+=10;TIM8->ARR=pul;    //TIM8->ARR的值决定脉冲频率}}else if (button_num == 3)    //加{if(Show_Send_Tag==1){pul-=10;if(pul<=5)pul=5;TIM8->ARR=pul;    //TIM8->ARR的值决定脉冲频率}}   pulse(pul/2);            //脉冲宽度为0.5,输出标准方波button_num = 0;
}
//设置脉冲宽度
void pulse(int angle)
{TIM8->CCR1=angle;
} 

STM32驱动步进电机;步进电机的驱动;步进电机驱动板的使用;STM32输出不同频率的波形;相关推荐

  1. 57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯

    57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯. 板子上面有电位器可电流设定或者485改电流设定. 最大电流支持4.5A,如果需要更大电流需要改元器件参数. 有启停和方向按键 ...

  2. matlab步进电机半步控制器,步进电机驱动模式:整步、半步、细分

    步进电机驱动模式:整步.半步.细分 步进电机驱动器有三种基本的步进电机驱动模式:整步.半步.细分.其主要区别在于电机线圈电流的控制精度(即激磁方式). 1.整步驱动 在整步运行中,同一种步进电机既可配 ...

  3. 镜头上的四线电机怎么驱动_MS3988/N双路步进电机驱动MS4982内置16细分单路步进电机驱动MS41908M摄像机用镜头聚焦、变倍、自动...

    马达驱动直流马达 型号描述通道数供电电压输出电流封装 MS3122 两个独立全桥 2CH 1.8V - 12V 1A TSSOP16 MS3111D 单个独立全桥 1CH 1.8V - 6.0V 0. ...

  4. python控制步进电机_MicroPython TPYBoard v102 驱动28BYJ-48步进电机

    TPYBoard v102 驱动28BYJ-48步进电机 实验目的 了解步进电机的工作原理 学习步进电机的驱动方法 实验器材 TPYBoard v102 1块 微型步进电机(28BYJ-48) 1个 ...

  5. arduino 步进电机驱动库_一文看懂arduino驱动uln2003操作步进电机的方法

    arduino驱动uln2003操作步进电机的方法 1.网上买的步进电机,很多接线顺序都不对.经过不懈努力查资料,终于找到了能用的接线方式: 电机上的12345针脚,对应着接线端子的42135. 2. ...

  6. Arduino CNC电机扩展板详解(A4988驱动42步进电机)

    原文地址:http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-cnc-shield/ ...

  7. A4988驱动NEMA步进电机(42步进电机)

    A4988驱动NEMA步进电机(42步进电机) 原文地址:http://www.taichi-maker.com/homepage/reference-index/motor-reference-in ...

  8. TPYBoard v102 驱动28BYJ-48步进电机

    为什么80%的码农都做不了架构师?>>> TPYBoard v102 驱动28BYJ-48步进电机 实验目的 了解步进电机的工作原理 学习步进电机的驱动方法 实验器材 TPYBoar ...

  9. DRV8825步进电机驱动详细说明书————含接线图

    最近玩步进电机时候,发现步进电机驱动种类多:A4988,drv8825,tb6600,lv8731--:tb6600驱动电流可达4A,1600细分,十分强大,但是体积大,用在平衡车上不太合适. drv ...

  10. 大牛的学习笔记:步进电机驱动在3D打印应用

    本文参考以下网友的文章,然后自行补充了一些内容,算是自己学习过程的积累. http://www.log4cpp.com/diy/3dprinter/46.html 1.3D打印机计算步进电机脉冲的网址 ...

最新文章

  1. Azure正式对外发布容器服务,支持Swarm和Mesos
  2. golang中的strings.LastIndexAny
  3. AndroidStudio直接通过gradle无mk编译生成so
  4. n-sphere计算方法-
  5. 项目: 用Easyx绘制围棋和象棋的棋盘
  6. mac支持NVDANV顯卡型號持列表
  7. 有什么办法动态更改yml的值吗_基于Redis实现Spring Cloud Gateway的动态管理
  8. sqlalchemy limit_SQLAlchemy 数据库方言(dialect)是什么?
  9. oracle 事务_从Oracle到PG-PostgreSQL的MVCC机制简介
  10. JAVA常用的环境变量配置
  11. 常用的数据交换格式有哪些_高程数据格式介绍
  12. 秀操作 | 函数宏的三种封装方式
  13. zabbix客户端掉线查看进程time_wait过多
  14. php中图片怎么加样式,html5实现各种图片样式实例用法汇总
  15. 被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
  16. str_pos php,关于php中str_replace替换漏洞的分析
  17. 【扩频通信】基于matlab直接序列扩频系统仿真【含Matlab源码 1529期】
  18. 射雕英雄传ol显示服务器断开,射雕英雄传OL6月18日维护更新内容
  19. 计算机连不了无线网络,如何解决电脑连接不上家里路由器的无线网
  20. matlab矩阵学习—郭彦甫老师笔记

热门文章

  1. 程序大师的方天画戟 - vicc
  2. mysql 误删表怎么恢复_怎么恢复navicat删除的表
  3. 计算机cad比例尺1 150,CAD图纸里面 1:50 和:1:100和1:150三个比例分别怎么换算...
  4. 三目运算(三目表达式)是什么?
  5. 为啥好多公司面试程序员用纸写代码?不会是因为缺少笔记本电脑吧
  6. 安居客数据的爬取并保存到MySQL
  7. 微信小程序退出到微信
  8. 打印机扫描计算机远程扫描仪,怎么用打印机扫描文件-彩色网络打印机扫描设置FTP版...
  9. 为何公众号推送会延迟发送_微信公众号客服消息群发和推送功能如何实现?
  10. 微信公众号注册认证流程