最专业的微特电机产品发布平台
用户名: 密码: 注册
设为首页 加入收藏 联系我们
免费注册 企业免费建站
新技术论坛 会员产品发布
TB6600QQ群:70241714   步进电机论文   六轴工业机器人解决方案  
步进电机     驱动器     控制器     马达IC     伺服电机     无刷直流电动机     微特电机文献     工控器件     运动控制新产品     六轴工业机器人    
 当前位置:首页--控制器--
89C51单片机控制TB6600 实现正反转调速控制 CK
2017年12月27日

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

89C51的最小系统:

timg.jpg

因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。用单片机来产生这个脉冲信号,通过单片机的P1口输出脉冲信号。

TB6600原理图:

附录:程序实例

***********************************************

* 测试说明

*1、MCU:STC89C52RC

*2、测试频率:12Mhz

*2、编程语言:C51

*2、编译环境:Keil C

*2、功能:全速正转、全速反转、停止、调速运行

***************************************************************

<reg52.h> //TB6560输入控制端定义 

sbit CLK = P1^0;

sbit ENA = P1^1; 

sbit DIR = P1^2; sbit CW = P3^0; //正转运行按键

sbit STOP = P3^1; //停止运行按键

sbit CCW = P3^2; //反转运行按键

sbit ADJ1 = P3^3; //调速运行按键

sbit ADJ2 = P3^4; //调速运行按键

bit Run_Status; //运行状态位标志,

//=0表示电机在停止状态,可以按键正转、反转均可

//=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向

带来的电流过大。 unsigned char Run_Dir; //电机运行方向 #define 

F_DIR 0 //正转

#define B_DIR 1 //反转 unsigned int CYCLE; //周期变量 

/**************************************************************

**********************************

** 函数名称: void Delay(unsigned int cnt)

** 功能描述: 简单的延时函数

** 输  入: cnt:0-65535之间的任意整数

** 输  出: 无

***************************************************************

**********************************/

void Delay(unsigned int cnt) 

{

while(--cnt);

}

/**************************************************************

**********************************

** 函数名称: void main(void)

** 功能描述: 主函数

** 输  入: 无

** 输  出: 无

***************************************************************

**********************************/

void main(void)

Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可

CLK = 0;

ENA = 0; 

while(1)

{

if(!STOP) //任何时候按停止键,电机停止运行

{

Delay(1000); //延时去抖动

if(!STOP) 

{

Run_Status=0; //电机正在停止的状态标志

CLK = 0;

ENA = 0; 

TR0=0;

}

if(!CW&&!Run_Status) //按正转键同时电机不是正在运行时,电机正转运

{

Delay(1000); //按下延时去抖动

if(!CW&&!Run_Status) 

{

Run_Status=1; //电机正在运行的状态标志

DIR = 0; //正转

ENA = 1; 

CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz 

TMOD |=0x01; 

TH0=(65536-CYCLE)/256; 

TL0=(65536-CYCLE)%256;

IE= 0x82; //打开中断 

TR0=1;

Run_Dir=F_DIR; //电机运行方向正转  

}

}

if(!CCW&&!Run_Status) //按反转键同时电机不是正在运行时,电机反转

运行

{

Delay(1000); //延时去抖动

if(!CCW&&!Run_Status) 

{

Run_Status=1; //电机正在运行的状态标志

DIR = 1; //反转

ENA = 1; 

CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz

TMOD |=0x01; 

TH0=(65536-CYCLE)/256; 

TL0=(65536-CYCLE)%256;

IE= 0x82; //打开中断 

TR0=1;

Run_Dir=B_DIR; //电机运行方向反转

}

}

if(!ADJ1)

{

Delay(5000); //延时去抖动

if(!ADJ1)

{

if(CYCLE<20000) CYCLE+=2000;

else CYCLE=1000; 

Run_Status=1;

TR0=1;

}

}

// if(!ADJ2)

// {

// Delay(5000); //延时去抖动

// if(!ADJ2)

// {

// if(CYCLE>2000) CYCLE-=2000; 

// Run_Status=1;

// TR0=1;

// 

}

// 

}

}

}

/*************************************************************

**********************************

** 函数名称: Timer0_ISR

** 功能描述: 定时器0中断处理函数

** 输  入: 无

** 输  出: 无

***************************************************************

**********************************/

void Timer0_ISR(void) interrupt 1 using 1

{

TH0=(65536-CYCLE)/256; 

TL0=(65536-CYCLE)%256;

CLK = ~CLK; 

}



有需要 LV8731 、 LV8728 、 LV8729 、 LV8727 、 LV8726 、STK682、 TB67S109 、TB6600 、TB6560 步进电机驱动器 芯片的 可以找我 、  技术 问题随时可以交流  

  联系电话:陈工  18010107259   15311412871  Q:2539844470



设为首页   |   加入收藏   |   联系我们   |   站长留言   |   广告服务   |   友情链接   |   免费展示
网站实名:步进电机网 步进电机驱动器网 微特电机网 网站地图 新闻中心
版权所有:北京时代四维科技有限公司
© Copyright By www.zgbjdj.com
京ICP备11042559号-1