《基于红外遥控步进电机的设计.doc》由会员分享,可在线阅读,更多相关《基于红外遥控步进电机的设计.doc(20页珍藏版)》请在金锄头文库上搜索。
1、基于红外遥控步进电机的设计班级:B140415摘要:随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。介绍了一种基于AT89C5
2、1单片机的红外遥控步进电机的设计,系统分为红外遥控编解码、LCD显示和驱动步进电机三个模块,设计的系统能通过遥控器来控制步进电机,并且步进电机的状态能通过LCD液晶模块实时显示出来,使人们直观的看出步进电机的运行状态。本报告对该系统的工作原理、硬件电路和软件进行了详细介绍。关键词:红外遥控、LCD显示、步进电机、单片机一、引言本系统是基于单片机控制的综合系统,单片机通过对红外信号的解码来实现步进电机的变速及LCD实时显示步进电机的转速。它综合了电子技术和单片机软硬件技术,本设计采用AT89c51单片机为核心包含红外接收电路、LCD显示电路和步进电机驱动电路。通过红外遥控器发射不同的码值来控制步
3、进电机的正转反转、加速减速以及启动停止并通过LCD显示出步进电机的状态。二、系统功能分析根据系统要求设计各个模块。本设计中控制芯片采用AT89c51单片机,各个功能通过不同模块来得以实现,主要有:红外接收模块、步进电机驱动和LCD显示模块。系统基本架构原理如图1所示图一 基本架构原理图各个模块具体实现方式如下: 1. 红外发射模块: 本设计采用的是通过遥控器发射不同的码值,红外接收电路将接收到得信号送给单片机的外部中断0,单片机接收到信号后通过解码程序对接收到得信号进行处理,使得这些信号成为相应的码值。经过处理后这些信号就可以去控制步进电机的正转反转、加速减速以及启动停止并在LCD上显示出来。
4、遥控发射器采用士兰半导体的TC9012编码芯片进行红外遥控发射电路的搭建。TC9012是一块用于红外遥控系统中的专用发射集成电路,采用CMOS工艺制造。它可外接32个按键,其中有三组双重按键。工作电压在2。其编码方式采用一帧码中含有一个引导码,16位的用户码和8位的键数据码。键数据码的反码也同时被传送,数据反码的传送可以大大减小系统的误码率。引导码由一个9ms的载波波形和4.5ms的关断时间构成,编码采用脉冲位置调制方式(PPM)。利用脉冲之间的时间间隔来区分“0”和“1”。具体的遥控发射应用电路图如图2-1.图2-2所示图2-1TC9012结构框图图2-2发射器结构原理图2. 红外接收模块:
5、 本系统采用的接收模块其核心是与TC9012相对应的1308红外接收头。1308是一颗集接收电路、调制解调电路、低通滤波、放大电路和控制电路为一体的集成接收头,一共有三个引脚输出其中一个是电源一个是接地另一个则是输出,这样就大大方便了我们的使用。1308内部结构如图3所示图3由于1308内部集成了强大的信号处理功能,所以在本系统中使用这个1308的接收头的时候我们只需要在外部加上一个滤波电路就可以了,这个RC滤波电路是为了滤除电源端的干扰信号。具体应用电路图如图4所示 图43. 液晶显示模块 在本系统中我们采用1602字符型液晶显示模块来显示步进电机的转速、起停以及正反转等步进电机的状态。字符
6、型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5*7点阵+光标和5*10点阵+光标的显示模式。可以显示两行每行8个字符。提供内部自动上电复位电路,+5V工作电压。一共有16个引脚,其中一对电源引脚、一对LED背光电源引脚、LCD驱动电压引脚、一个模式选择引脚、一个读写操作引脚、一个使能引脚以及7个数据引脚。其中LCD驱动电压V0可通过滑动变阻器进行调节,一般V0为零伏。具体应用电路图如图5所示图54. 步进电机驱动模块 本系统采用额定电压为5VDC,相数为4相的步进电机,驱动方式为4相8拍。一共有5跟线连接,其中红色的为电源线。采用单极性直流
7、电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。由于单片机P口输出的电流比较弱不能驱动步进电机,所以要加一个ULN2003芯片来放大电流使之能驱动步进电机工作。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。步进电机驱动电路如图6所示图6三、硬件电路设计 本系统采用的核心器件是AT89C51单片机,有4
8、个P口,其中P1 P2 P3内部含有上拉电阻,P0口内部不含上拉电阻。在本系统中用P0口来控制LCD液晶显示模块,p1口来控制步进电机的驱动,外部中断0(P3.2)来接3收红外控制信号。AT89C51单片机引脚图如图7所示图7单片机复位电路的设计。当AT89C51单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。89C51单片机提供了上电复位和按键复位两种方式,本系统中采用按键复位电路。具体复位电路如图8所示,其中C4是104陶瓷电容,C3是22uf/25V的电解电容,R1的阻值为10K欧。 单片机时
9、钟电路的设计。89C51提供了外部时钟电路和内部时钟电路两种方式,本系统采用11.0592MHz晶振的外部时钟电路方式,在晶振两端接2个30pf的陶瓷电容。这两个电容成为晶振的负载电容,它会影响晶振的谐振频率和输出幅度。具体晶振电路如图9所示 图8图9四、系统软件设计 本系统的软件设计分LCD显示子程序、红外解码判断子程序、步进电机控制程序和主程序组成。整个系统采用C语言进行编写。 1. 主程序 主程序包括系统的初始化、LCD子程序的调用以及定时器中断函数和步进电机控制函数组成。系统初始化包括对LCD显示模块数据位、命令位,红外解码标志位以及步进电机停止转动的等级的定义与初始化,定时器中断函数
10、主要设定定时器中断间隔和步进电机转动的等级,步进电机控制函数由步进电机索引函数和对索引值的加减函数组成。系统的主程序流程图如图10所示图102. LCD子程序 LCD子程序主要实现的功能是显示步进电机的状态。LCD第一行显示静态的“B140415 08 09 23”,这个是我组三同学的学号,第二行动态的显示静态的“RANK:”和不同速度步进电机转动的等级以及正反转的标志,正反转的标志为正转为“+”,反转为“-”。系统LCD显示子程序流程图如图11所示图113. 红外解码判断子程序 红外解码判断子程序包括对码值的判断程序和外部中断0程序,红外接收电路将接收到的信号送到外部中断0,然后红外解码程序
11、对收到的信号进行解码,若解码失败则重新进行解码,若解码成功则判断器码值,然后调用步进电机控制和LCD显示程序实现步进电机的运转和显示。从而实现红外遥控对步进电机的控制及显示。系统红外解码判断子程序流程图如图12所示图12五:总结该红外遥控步进电机的制作让我学会了怎样去设计一个系统,对一个系统的基本架构有了一定的认识,在通过对红外编解码电路的设计也让我对红外遥控的基本知识有了新的认识,知道了红外发码的原理掌握了红外解码程序的编写,对LCD现实模块的使用也让我对LCD有了新的认识,交接了要调节LCD的驱动电压使其达到0V左右才能让字符显示出来,通过对步进电机驱动电路的设计也让我认识到要在步进电机的
12、P口加上拉电阻才能驱动步进电机。总之,这次实训让我收获了很多也为我以后的工作奠定了一定的基础。源代码:#include #include #define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换sbit IR=P32; /红外接口标志unsigned char TempData8; /存储显示值的全局变量char code Tab16=0123456789ABCDEF,zf2=-+;unsigned char irtime;/红外用全局变量bit irpro_ok,irok,f;unsigned char IRcord4;unsigned char i
13、rdata33;sbit A1=P10; /定义步进电机连接端口sbit B1=P11;sbit C1=P12;sbit D1=P13; #define Coil_AB1 A1=1;B1=1;C1=0;D1=0;/AB相通电,其他相断电#define Coil_BC1 A1=0;B1=1;C1=1;D1=0;/BC相通电,其他相断电#define Coil_CD1 A1=0;B1=0;C1=1;D1=1;/CD相通电,其他相断电#define Coil_DA1 A1=1;B1=0;C1=0;D1=1;/D相通电,其他相断电#define Coil_A1 A1=1;B1=0;C1=0;D1=0;
14、/A相通电,其他相断电#define Coil_B1 A1=0;B1=1;C1=0;D1=0;/B相通电,其他相断电#define Coil_C1 A1=0;B1=0;C1=1;D1=0;/C相通电,其他相断电#define Coil_D1 A1=0;B1=0;C1=0;D1=1;/D相通电,其他相断电#define Coil_OFF A1=0;B1=0;C1=0;D1=0;/全部断电#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define
15、EN_SET EN=1#define CHECK_BUSY#define DataPort P0unsigned char Speed=1;bit StartFlag,zfFlag;sbit RS = P24; /定义端口 sbit RW = P25;sbit EN = P26;void DelayUs2x(unsigned char t);void DelayMs(unsigned char t);void Ir_work(void);void Ircordpro(void);void TIM0init(void);void Init_Timer1(void);void EX0init(void);/*- 判忙函数-