51单片机控制TB6600驱动器驱动42步进电机

  • 第一次
    • 功能实现目标
    • 硬件简介
    • 硬件连接
    • 程序代码

第一次

以前总是看别人写的博客,通过别人的博客解决了我很多问题,从中也学到了各种知识,虽然不是很系统,但也比较有针对性。所以本次我将我这两天做的东西写成了博客,毕竟水平有限还需学习,所以此文仅供参考,但倘若能帮助到别人解决某些问题,明白某些知识那我将甚感欣慰。
这是我第一次写博客,难免有很多不足之处,如有意见敬请发表评论 甚是感谢!

功能实现目标

  1. 控制电机停止与启动。
  2. 控制电机正反转。
  3. 控制电机旋转速度。
  4. 能按一定角度进行步进。

硬件简介

本次采用的就是最最最简单的51单片机(不要问我后面程序为什么是reg52.h,问一次打一次)没有外接任何外围器件(除了按键)。只是单纯的控制I/O口,关于单片机的硬件结构就不讲了(其实我也不懂,只会控制下I/O口)。
TB6600驱动器怎么说呢,我觉的它最大的优势就是性价比吧,几十块钱就可以买一个,而且也能实现要求不是很高的实验,对于学生党来说再合适不过了。输出电流和细分都可以通过拨片按需选择,最高细分可达1/32。电源:要求9-42V直流开关电源。电流的话自己看你的电机功率选择就行。
-------------此处省略一万字-------------其他的我就不讲了自行百度下使用手册就行了,相信读懂这种简单的使用手册就不在话下了。

硬件连接

----先说说驱动器和电机的连接----

我此次选用的是两相四线的步进电机,把它的4根线按照电机给的说明书分别接到驱动的的A+,A-,B+,B-即可,驱动器的电源接线就不用说了吧!
接下来重点来了,因为控制器与驱动器有两种接法,如下图


虽然我们可以每一种都试一下也不耽误时间,但我还是要在这里讲解下为什么我选择了共阳而不选共阴。看过TB6600驱动器说明书的童靴,应该知道它与控制器(就是本文的单片机)的连接有两种方式,即共阴或者共阳,此刻有没有想到数码管的共阴共阳哈哈。其实都是一样的概念。我一看说明书毫不犹豫的就按照共阴的接法接好电路,结果一试,电机它丝毫不动。后来我看了下驱动器的接口是光驱动的,而选择共阴接法的话,就意味着我们得靠单片机I/0口的电流来驱动里面的发光二极管,我们都知道单片机I/o口的驱动能力非常小,查看手册可知I/O口的拉电流只有几uA根本不足以驱动发光二极管,的而它的灌电流可达15mA,此时足以驱动发光二极管,这就是为什么要选择共阳接法。

程序代码

// An highlighted block
/*******************程序功能*********************1.控制电机停止与启动2.控制电机正反转3.控制电机转速3.控制电机按一定角度步进
************************************************/
#include<reg52.h>
//电机控制引脚
sbit CLK  = P1^0;
sbit ENA  = P1^1;
sbit DIR  = P1^2;
//按键控制端
sbit P_TS  = P2^0;        //正转控制端
sbit N_TS  = P2^1;        //反转控制端
sbit P_ADJ = P2^2;         //调速+
sbit N_ADJ = P2^3;         //调速-
sbit StopStart  = P2^4;       //停止与启动
sbit P_Step = P2^5;
sbit N_Step = P2^6;
sbit SS_Step = P2^7;unsigned int Tspeed[3]={20,4000,10000};          //调速等级表
unsigned int StepAngle[4]={100,200,400,800};   //步进角度表--90度/180度/360度/720度
bit Run_Status=0;
bit CY_status=0;
unsigned int CYCLE=20;
unsigned int cy_count=0;
unsigned PWM_count=0;void Init_time();
void Key_scan();
void Step(unsigned int step_count);
/*void delay()                //延时函数
{unsigned int i = 200;while (i--);
} */
void main()
{ENA=1;CLK=0;DIR=0;         //初始化电机Init_time();   //初始化定时器      while(1){Key_scan();}
}
void Init_time()                 //初始化定时器
{TMOD |= 0x01;TH0=(65536-CYCLE)/256;       //给time0装初值TL0=(65536-CYCLE)%256;//TH1=(65536-2000)/256;      //给time1装初值//TL1=(65536-2000)%256;IE = 0x82;//PT1=1;                       //使得time1的优先级高于time0TR0=1;                       //打开两个中断//TR1=1;
}
void Enter_Timer0() interrupt 1             //进入定时器中断
{TH0=(65536-CYCLE)/256; TL0=(65536-CYCLE)%256;CLK=~CLK;PWM_count++;if(PWM_count==(2*cy_count)&&CY_status){PWM_count=0;TR0=0;ENA=0;}
}
/*void Enter_timer1() interrupt 3
{TH1=(65536-2000)/256;      //给time1装初值TL1=(65536-2000)%256;Key_scan();
} *//************************按键扫描程序************************功能:读取各按键值,判断是否按下,再处理相应事件注:按键控制程序,由于按键中断优先级高,且每个按键都设计为弹起有效, 所以长时间按住不放会导致电机减速甚至停止直至放开按键
*************************************************************/
void Key_scan()
{static char i=0,j=0;if(P_TS==0)                       //正反转切换{//delay();                  //按键消抖if(P_TS==0){while(!P_CW);               //按键按下直到放开DIR=1;}}if(N_TS==0)                    //正反转切换{//delay();                  //按键消抖if(N_TS==0){while(!N_CW);               //按键按下直到放开DIR=0;}}if(P_ADJ==0)                   //加速{//delay();          if(P_ADJ==0){while(!P_ADJ);i--;if(i<1)i=0;CYCLE=Tspeed[i];       }}if(N_ADJ==0)                   //减速{//delay();if(N_ADJ==0){while(!N_ADJ);i++;if(i>2)i=2;CYCLE=Tspeed[i];}}if(StopStart==0){//delay();if(StopStart==0){while(!StopStart);Run_Status=~Run_Status;if(Run_Status){ENA=1;       //启动电机TR0=1;       //开启中断产生脉冲信号}else{ENA=0;       //关闭电机TR0=0;       //关闭中断停止脉冲信号CY_status=0;  //刷新步进标志位}}}if(P_Step==0){//delay();if(P_Step==0)        //步进角度+{while(!P_Step);j++;if(j>3)j=3;Step(StepAngle[j]);          }}if(N_Step==0)             //步进角度-{//    delay();if(N_Step==0){while(!N_Step);j--;if(j<1)j=0;Step(StepAngle[j]);           }}if(SS_Step==0)   //按一定步进角度步进,每按下一次转动一定步进角后停止{//delay();if(SS_Step==0){while(!SS_Step);Step(StepAngle[j]);}}
}
/***********************角度控制函数*************************/
void Step(unsigned int step_count)
{PWM_count=0;CY_status=1;cy_count=step_count;ENA=1;TR0=1;
}

51单片机控制TB6600驱动器驱动42步进电机相关推荐

  1. 【STM32】实战3.1—用STM32与TB6600驱动器驱动42步进电机(一)

    目录 0 参考资料出处 1 实验预期效果 2 硬件学习 2.1 TB6600驱动器 2.1.1 通过拨码开关设定细分与电流 2.1.2 共阴共阳接线法 2.2 开关电源(AC转DC变压器)& ...

  2. 【51单片机】 A4988驱动模块驱动四线步进电机

    A4988是控制双极步进电机的驱动模块,在本文中,我们学习如何使用它控制步进电机. A4988的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达2A,在没有配备散热器的情况下,每相 ...

  3. 遥控51单片机控制42步进电机(TB6600驱动)控制方向、速度

    遥控51单片机控制步进电机控制方向.速度 控制开发板自带步进电机 遥控控制 控制42步进电机 大二在做srtp时做到了这部分内容,感觉C51控制起来挺简单的,之后有做关于MSP430的魂斗罗游戏和st ...

  4. 51单片机控制步进电机-电路连接

    51单片机控制步进电机-电路连接 概要:本案例讲解的内容是51单片机控制步进电机硬件连接部分.后续会分别讲解单片机程序,S曲线加减速方法,上位机等相关内容 硬件清单: 1.51单片机控制板一个 2.二 ...

  5. 51单片机控制二相四线步进电机

    步进电机按定子上绕组来分,有二相.三相和五相等系列.最受欢迎的是两相混合式步进电机,约占97%以上的市场份额,其原因是性价比高,配上细分驱动器后效果良好.该种电机的基本步距角为1.8°/步,配上半步驱 ...

  6. Arduino-TB6600驱动42步进电机

    设计者:STCode (公众号同名) Arduino控制42 步进电机 串口控制旋转位置 1)描述 42步进电机的驱动方式有多种,例如用A4988步进电机模块,这次我们使用TB6600驱动器驱动一个4 ...

  7. 51单片机控制DHT11温湿度传感器,并使用OLED屏幕显示

    目录 前言 一.MCU主控选型 二.DHT11温湿度传感器 1.模块介绍 2.软件实现 DHT11.c DHT11.h 三.OLED显示屏 1.模块介绍 2.软件实现 OLED.c OLED.h OL ...

  8. TB6600驱动器调试42电机(stm32)

    TB6600驱动器调试42电机 耗材 1 TB6600驱动器 2 sl42sth34-1504a电机 3 J-LINK 4.24v电池 接线 一般是使用共阳极接法.其中ENA+,DIR+,PUL+连接 ...

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

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

最新文章

  1. linux的根文件系统中的proc文件夹详解
  2. 请你要幸福 这是 你唯一能为我做到的
  3. swift_024(Swift 的构造过程)
  4. icon-font与svg
  5. 机器学习入门-决策树算法
  6. c语言flash里能存文件吗,STM32内部FLASH打包读写
  7. Android开发中手机存储路径问题
  8. [MySQL] mysql地理位置服务geometry字段类型
  9. 使用Shell脚本查询服务器硬件信息
  10. Redis进阶之内存模型
  11. 【iOS - 周总结】开发中遇到的小知识点(2018.12.10-2018.12.15)
  12. if函数python作用_if __name__== __main__ 的意思(作用)python代码复用
  13. AngularJS----服务,表单,模块
  14. EasyUI:中datagrid数据表格的删除、编辑、保存、撤销功能实现
  15. 十、IO输入输出流,装饰模式
  16. JavaScript(十二)常见js特效
  17. macbook蓝牙pan未连接_蓝牙自动重连机制
  18. 学习arduino esp32相关例程(1)深度睡眠与唤醒
  19. python 提取元组中的值_如何从Python元组中提取数据?
  20. 地表温度lst数据的下载【国家青藏高原科学数据中心】

热门文章

  1. 钟汉良日记:凡夫俗子一定要眼见为实,菩萨才能见因知果!
  2. ToothFairy for Mac(一键连接蓝牙设备软件) v2.4.5免激活版
  3. 操作系统原理,物理内存“扩充”技术,内存紧缩,覆盖,交换,虚拟内存思想
  4. 新建vue-cli项目body与页面边框存在间隙
  5. python爬取当当图片和信息
  6. 504服务器无响应,什么是504网关超时错误(以及如何解决)? | MOS86
  7. dom4j解析xml错误-version 后面跟随的值必须是用引号括起来的字符串
  8. 『牛角书』基于JS实现的鸿蒙游戏——二十四点纸牌
  9. opencv normalize blur medianBlur
  10. 解决Apple Watch 更新时出现红色感叹号「!」的问题