栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

基于51单片机+TB6600驱动板+42步进电机实现角度可调速度可调周期运动

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于51单片机+TB6600驱动板+42步进电机实现角度可调速度可调周期运动

硬件部分

1、51单片机、TB6600驱动板、42步进电机,直流电源(9~42V都可以,推荐24V)

2、实物连接图

TB6600驱动器的细分设置为6400,电流设置为1.5A(42步进电机)

本次试验采用的是共阳极的接法

 

图中那3个电阻R可以不接(单片机的电压为5V,不需要接,高于5V则需要接),使能信号接的是单片机的P10口,方向是P11,脉冲是P12。单片机的P00,P01,P02,P03,P04接5个开关。

程序部分

代码是基于C语言用keil编写的,采用定时器实现脉冲输出。



#include 
#include "utils.h"
#define uint unsigned int

sbit ENA=P1^0;
sbit DIR=P1^1;
sbit PWM=P1^2;

sbit SPEED_UP=P0^0;
sbit SPEED_DOWN=P0^1;
sbit ANGLE_UP=P0^2;
sbit ANGLE_DOWN=P0^3;
sbit RESET=P0^4;

int pause;
int reset;
unsigned int freq_t; //脉冲计数
unsigned int dir_t;  //方向控制计数
unsigned int speed;  //速度控制
unsigned int angle;  //角度范围控制
//double timer_t; 														//定时器执行时间间隔(ms)
//long   crystal_oscillator_f; 		  					//晶振频率
//long   n_period;														//每秒产生机器周期数;
//unsigned int   timer_period; 								//定时器需要的时间周期


void system_Ini()
{
  //timer_t = 0.12; 																		//定时器执行时间间隔(ms)
  //crystal_oscillator_f = 11059200; 		  							//晶振频率11.0592MHz
	//n_period = crystal_oscillator_f/12; 								//每秒产生11059200/12 = 921600个机器周期;
	//timer_period = n_period*timer_t/1000; 							//定时器需要的时间周期
	//TH0=(65536-timer_period)/256; //高8位
	//TL0=(65536-timer_period)%256; //低8位

	pause = 0;
	reset = 0;
	TMOD=0x01;
  EA=1;
  ET0=1;
  TR0=1;
	//置初值
 	TH0=(65536-80)/256; //高8位 //1,2,80
	TL0=(65536-80)%256; //低8位
	ENA = 1; //1有效,0停止
  DIR = 0; //0逆时针,1顺时针
	PWM = 1;
	speed = 5;
	angle = 3;
	freq_t = 0;
	dir_t = angle*500*speed;
}


void reset_para()
{
	dir_t = angle*500*speed;
}

void delay(unsigned int a)    //延迟函数
{
	unsigned int j,k;
	pause = 1;
	for(a;a>0;a--)
		for(j=100;j>0;j--)
			for(k=250;k>0;k--)
				freq_t=1;
	pause = 0;
}

//定时器 (大概0.06ms执行一次)
//定时器在方式1工作为16位,最大值为65536
timer () interrupt 1       
{
	//置初值
 	TH0=(65536-80)/256; //高8位  
	TL0=(65536-80)%256; //低8位

	if(!pause)
	{
		freq_t++;
		dir_t++;
	}
}

void main()
{
	system_Ini();
	while(RESET==1);
	while(1)
	{
		//复位按键
		if(RESET==0)
		{
			ENA = 0;
			delay(1);
			while(RESET==0);
			ENA = 1;
			reset_para();
		}
			
		//速度调节按键
		if(SPEED_UP==0)
		{
			pause = 1;
			delay(1);
			while(SPEED_UP==0);
			pause = 0;
			if(speed > 1)
			{
				speed--;
			}
		}
		if(SPEED_DOWN==0)
		{
			pause = 1;
			delay(1);
			while(SPEED_DOWN==0);
			pause = 0;
			if(speed < 15)
			{
				speed++;
			}
		}
		
		//角度范围调节按键
		if(ANGLE_UP==0)
		{
			pause = 1;
			delay(1);
			while(ANGLE_UP==0);
			pause = 0;
			if(angle < 15)
			{
				angle++;
			}
		}
		if(ANGLE_DOWN==0)
		{
			pause = 1;
			delay(1);
			while(ANGLE_DOWN==0);
			pause = 0;
			if(angle > 1)
			{
				angle--;
			}
		}
		
		//方向变换
		if(dir_t >= angle*1000*speed)
		{
			//delay(1);
			dir_t = 0;
			DIR = ~DIR;
		}

		//脉冲输出
		//PWM = ~PWM;
		if(freq_t >= speed*1)
		{
			freq_t = 0;
			PWM = ~PWM;
		}

	}
}
 备注:

        视频讲解:基于51单片机+TB6600驱动板+42步进电机实现角度可调速度可调周期运动_哔哩哔哩_bilibili

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号