IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 遥控51单片机控制42步进电机(TB6600驱动)控制方向、速度 -> 正文阅读

[嵌入式]遥控51单片机控制42步进电机(TB6600驱动)控制方向、速度

遥控51单片机控制步进电机控制方向、速度


大二在做srtp时做到了这部分内容,感觉C51控制起来挺简单的,之后有做关于MSP430的魂斗罗游戏和stm32的示波器,有时间也整理上来。
程序流程图:
在这里插入图片描述

控制开发板自带步进电机

最开始的时候想自己搭电路,还用protues画了仿真
在这里插入图片描述
但是后来综合考虑还是选了开发板,直接用开发板还是能省不少事。当时会的太少,代码写的很乱,参考着开发板的教程写的控制程序。原理就是通过改变电机相序来改变转动方向,延时控制速度,缺点就是无法精确控制。

void  motor_ffw(unsigned int dir,unsigned int speed)//电机控制函数
 { 
   unsigned int i;
      for (i=0; i<8; i++)      
        {
          if(dir==1)
					{P1 = FFW[i]&0x1f;} 
					else if(dir==2) 
					{P1 = FFZ[i]&0x1f;}
          delay(speed);                 
        }
 }
 //部分主函数,当红外信号为1时进入以下情况
			case(0x06):                 //1
			LcdInit();
			for(i=0;i<11;i++)
			{
				LcdWriteData(Disp1[i]);	
			}
			K=1;
			for(m=0;m<512;m++)
			{
				DisplayData[2] = smgduan[IrValue[2]];
				if(DisplayData[2]==0x3f)
				{
					goto switchcase;
				}
				motor_ffw(K,500); 
			}
			K=2;
			for(n=0;n<512;n++)
			{
				DisplayData[2] = smgduan[IrValue[2]];
				if(DisplayData[2]==0x3f)
				{
					goto switchcase;
				}
				motor_ffw(K,500);
			}
			break;

遥控控制

遥控控制使用红外控制,也是开发板自带的模块。可以用华为手机的手机遥控app进行红外控制。在app里面自定义一个波长一致的遥控器就行。
在这里插入图片描述

void ReadIr() interrupt 0 //红外
{
		u8 j,k;
		u16 err;
		Time=0;					 
		delay(700);	
		if(IRIN==0)		
		{	 
			err=1000;				
			while((IRIN==0)&&(err>0))		
			{			
				delay(1);
				err--;
			} 
			if(IRIN==1)		
			{
				err=500;
				while((IRIN==1)&&(err>0))		 
				{
					delay(1);
					err--;
				}
				for(k=0;k<4;k++)		
				{				
					for(j=0;j<8;j++)	
					{

						err=60;		
						while((IRIN==0)&&(err>0))
						{
							delay(1);
							err--;
						}
						err=500;
						while((IRIN==1)&&(err>0))	 
						{
							delay(10);	 //0.1ms
							Time++;
							err--;
							if(Time>30)
							{
							return;
							}
						}
						IrValue[k]>>=1;	
						if(Time>=8)			
						{
							IrValue[k]|=0x80;
						}
						Time=0;						
					}
				}
			}
		if(IrValue[2]!=~IrValue[3])
		{
			return;
		}
	}			
}

控制42步进电机

在进一步做项目时。发现自带的步进电机无法实现所要求的扭矩,改用42步进电机,采用TB6600驱动器控制。改用42步进电机好处是能提供足够的扭矩,控制器也可以精确控制速度和转动角度,只需要改中断和控制电平就能实现,接线图如下
在这里插入图片描述

void Timer0() interrupt 1  //中断
{
	TH0=(65536-cycle)/256; 
	TL0=(65536-cycle)%256;
	CLK=~CLK;
	count++;
	DisplayData[2] = smgduan[IrValue[2]];
	if(DisplayData[2]==0x3f)
	{
		count=2*step;
	}
	if(count==step)
	{
		DIR=~DIR;
	}
	if(count==2*step)
	{
		count=0;
		TR0=0;
		ENA=0;
	}	
}
//部分主函数,当红外信号为6时进入以下情况
			case(0x7d):                 //6
			LcdInit();
			for(i=0;i<11;i++)
			{
				LcdWriteData(Disp6[i]);	
			}
			count=0;
			DIR=0;
			ENA=1;
			cycle=5000;
			Timer0Init();
			DisplayData[2] = smgduan[IrValue[2]];
			if(DisplayData[2]==0x3f)
			{
				goto switchcase;
			}
			break;

当时做得比较简陋,但也算是第一个独立完成的项目吧。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 12:03:02  更:2021-10-19 12:03:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:55:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码