基于红外遥控步进电机的设计
基于红外遥控步进电机的设计

基于红外遥控步进电机的设计红外遥控步进电机是一种使用红外遥控技术控制的步进电机。
步进电机是一种具有精确步进角度和良好定位特性的电机,它被广泛应用于机械、电子和自动化系统中。
红外遥控步进电机的设计主要包括以下几个方面:1.红外解码模块设计:红外解码模块用于接收红外遥控信号并解码得到相应的命令。
设计中需要考虑红外传感器的灵敏度和接收频率范围,以确保能够正确地接收和解码红外信号。
2.电机驱动电路设计:电机驱动电路用于控制步进电机的运动。
设计中应考虑步进电机的相序控制和驱动电流控制,以确保能够精确地控制步进电机的步进角度和运动速度。
3.控制电路设计:控制电路用于接收解码后的红外信号,并将其与电机驱动电路连接起来。
设计中需要考虑控制电路与红外解码模块和电机驱动电路的接口和通信协议,以确保能够准确地控制电机的运动。
4.电源电路设计:电源电路用于为红外解码模块、电机驱动电路和控制电路提供稳定的电源供应。
设计中需要考虑电源电路的稳定性和输出电流和电压的需求,以确保能够正常地供电给整个系统。
5.外壳和机械结构设计:外壳和机械结构设计主要考虑电机的安装和固定。
设计中需要考虑电机的尺寸、重量和固定方式,以确保能够有效地安装和固定电机。
在实际应用中,红外遥控步进电机可以应用于各种场景,如智能家居中的电动窗帘、电动门禁等。
通过红外遥控技术,用户可以远程控制电动装置的运动,实现自动化操作。
总结起来,基于红外遥控的步进电机设计主要包括红外解码模块设计、电机驱动电路设计、控制电路设计、电源电路设计和外壳和机械结构设计等方面。
通过这些设计,可以实现对电机的远程控制,为各种应用场景提供自动化控制的解决方案。
基于51单片机红外遥控电机课程设计说明书

课程实训报告课程名称:单片机与接口技术实训题目:红外控制直流电机正反转任务书一、实训任务设计一款基于AT89C51单片机用红外遥控控制电机的正反转加减速。
二、设计要求1. 基本要求1).用无线模块控制电机的正反转加减速,实现自动化控制。
2).通过对AT89C51单片机的编程,实现直流电机的正反转,加减速。
3).写出详细的设计报告。
4).给出全部电路和源程序。
2. 发挥部分1).可通过PC机,对系统编程,实现直流电机转速的快慢。
摘要随着科技的不断进步,人们进入了无线电时代,它为我们的生活带来了极大的方便。
像现在的移动电话,无线网络,无线鼠标,无线键盘等都已经融入了我们的生活当中。
从我们身边的电子产品就可以看出我们已经进入了无线电时代。
本设计就是一款基于AT89C51的用无线模块控制的电机的正反转以及它的加减速。
这非常适应于在工厂使用,特别是在工业控制中。
可以想象,机器在工厂运转时,我们只需要用无线遥控来控制电机的转速以及它的转向,这样我们就可以在远处来控制了,用不着再跑到电机的旁边来控制开关,为工厂生产带来了极大的方便。
软件上采用C51编程,主要编写了主程序,直流电机驱动程序,中断程序延时程序等。
经过调试,实现了对电机的控制。
关键词:AT89C51 L298 PWM 直流电机无线模块目录第一章绪论 (5)1.1 概述 (5)1.2 设计目的 (5)1.3 设计任务和内容 (5)第二章总体设计及核心器件简介 (7)2.1总体设计 (7)2.2 AT89C51 (7)2.3 L298 (9)引脚介绍: (10)2.4 伺服电机介绍 (11)2.5 PT2262/PT2272 (12)第三章单元电路模块设计 (17)3.1 复位电路 (17)3.2时钟电路 (18)3.3电机驱动电路图 (18)3.4PWM调速系统设计 (19)第四章软件编程设计 (21)4.1 设计思想 (21)4.2 流程图 (21)4.3源程序 (22)第五章设计心得和存在问题 (26)第一章绪论1.1 概述近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
红外遥控控制步进电机程式(可用于军舰设计)

红外遥控控制步进电机程式(可⽤于军舰设计)Ps:本程序是军舰前端控制炮台部分,后端雷达扫描程序可以给我私信索取#include#define uint unsigned int#define uchar unsigned charsbit BEEP = P2^7; //蜂鸣器控制端⼝P36sbit moto0_bit=P2^6;sbit moto1_bit=P2^5;sbit led=P2^3;/**********采⽤四相⼋拍时序**********/uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//电机正转时序uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//电机反转时序uchar tmp;uchar irtime;uchar startflag;uchar irdata[33];uchar bitnum;uchar irreceok;uchar ircode[4];uchar irprosok;uchar disp[8];uchar moto0_zzflag;uchar moto0_fzflag;uchar moto1_zzflag;uchar moto1_fzflag;uchar ser_flag;uchar re[5];uint sp_dis;uint sz_dis;uint re_int[4];uint moto0_count;uint moto1_count;/*****************************************************函数功能:延时1ms***************************************************/void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}/*****************************************************函数功能:延时若⼲毫秒⼊⼝参数:n***************************************************/void delay(uint n){uint i;for(i=0;idelay1ms();}/*********************************************************/ void beep() //蜂鸣器响⼀声函数{uchar i;for (i=0;i<100;i++){delay1ms();BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器delay(250); //延时}/**********步进电机0正转函数**********/ void moto0_zz(){uchar i;for(i=0;i<8;i++){P0=zz[i];delay(1);}}/**********步进电机0反转函数**********/ void moto0_fz() {uchar i;for(i=0;i<8;i++){P0=fz[i];delay(1);}}/**********步进电机1正转函数**********/ void moto1_zz() {uchar i;for(i=0;i<8;i++){P1=zz[i];delay(1);}}/**********步进电机1反转函数**********/ void moto1_fz() {uchar i;for(i=0;i<8;i++){P1=fz[i];delay(1);}}void timer0init(void){TMOD|=0x02;TH0=0x00;TL0=0x00;ET0=1;EA=1;TR0=1;}void serinit(){TMOD|=0x20;TH1=0xf3;TL1=0xf3;TR1=1;SM0=0;SM1=1;PCON=0x80;REN=1;EA=1;ES=1;}void send(uchar dat) { SBUF = dat;while(!TI);TI = 0;}void int0init(void){IT0=1;EX0=1;EA=1;}void irpros(void){uchar k,i,j;uchar value;k=1;for(j=0;j<4;j++){for(i=0;i<8;i++){value>>=1;if(irdata[k]>6){value=value | 0x80; }k++;}ircode[j]=value;}irprosok=1;}void main(){uint t;timer0init();int0init();serinit();for(t=0;t<512;t++) {if(moto0_bit==0) break;moto0_zz();}for(t=0;t<512;t++) {if(moto1_bit==0) break;moto1_fz();}while(1){。
方案设计书并实现红外遥控步进电机单片机课程方案设计书

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 设计并实现红外遥控步进电机初始条件:(1)Proteus仿真软件或XL1000综合仿真实验仪一台;(2)课程设计辅导书:1. 李群芳、张士军,单片微型计算机与接口技术, 电子工业出版社,20082.张毅刚、彭喜元、董继成,单片机原理及应用,高等教育出版社,20043. 赵晓安.,MCS-51单片机原理及应用,天津大学出版社,2001(3)先修课程:微机原理与接口技术、单片机原理。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)课程设计时间:1周;(2)本课程设计统一技术要求:按照要求对选定的设计题目进行分析,画出实现电路原理图,设计出各模块电路的功能,编写C51或汇编程序,上机调试、仿真,记录实验结果,对实验结果进行分析; (除了代码,运行结果可以打印,其他手写) (3)课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,并标明参考文献至少5篇;(4)写出本次课程设计的心得体会(至少500字)。
时间安排:课程设计时间为:6月26日至7月1日,7月2日上午答辩。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录1.设计原理及方法11.1步进电机的工作原理11.2红外遥控器的原理11.3红外遥控步进电机的设计方法22.系统硬件线路设计22.1红外遥控及LED模块22.2步进脉冲产生模块:52.3硬件线路设计图73.程序框图84.资源分配表:95.源程序:107.心得及体会:218.参考文献:219.本科生课程设计成绩评定表221.设计原理及方法1.1步进电机的工作原理步进电机是数字控制电机,它将电脉冲信号转化为角位移,实质上是一种数字/角度转换器。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。
基于单片机的红外遥控系统设计毕业设计

本科生毕业设计(论文)论文题目:基于单片机的红外遥控系统设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:本设计是基于单片机的红外遥控系统设计,设计内容包括了红外接收,红外解码和步进电机控制三大块。
如今红外遥控技术已经得到了广泛的应用;其利用红外线来传输数据,这种情况下不需要实体连线,体积小,成本低,功能强。
我们日常生活中的电视机,洗衣机,空调,航天飞机,工业现场设备等都运用了红外遥控的技术。
本设计中发射端采用专用的发射芯片来实现红外遥控码的发射,且遥控码格式是NEC标准。
接收端采用市面上流行的1838一体化红外接收头,接收到的红外信号经由1838接收头完成光/电转化和解调的工作,然后把33位的完整码发送到解码芯片中去完成解码工作。
本设计中的主芯片是STC89C52单片机,主芯片和解码芯片之间进行串行通讯。
系统启动后,解码芯片将解码后得到的8位数据码串行发送到主芯片中,然后通过主芯片来控制步进电机的正转,反转,加速,减速。
本设计中的被控对象是步进电机,步进电机最适合做数字控制。
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
红外遥控及按键控制步进电机报告

目录一、红外遥控步进电机系统设计 (1)1.1系统设计原理 (1)1.2总体设计 (1)二、系统硬件模块设计 (2)2.1 红外遥控工作模块 (2)2.2 步进电机工作模块 (3)2.2.1步进电机工作原理 (3)2.2.2步进电机的动作实现原理 (3)2.3 LED数码管模块 (5)2.4 硬件设计 (5)2.4.1 步进电机驱动电路 (5)2.4.2 红外遥控驱动电路 (6)2.4.3 系统硬件电路设计图 (6)2.4.4 在XL1000上的连线图 (7)2.4.5 系统资源分配表 (7)三、系统软件设计 (8)3.1 主程序设计 (8)3.2 中断子程序设计 (9)3.3 按键控制步进电机程序 (10)3.4 红外遥控步进电机程序 (14)四、系统调试和制作 (24)五、性能分析 (25)六、心得及体会 (26)七、参考文献 (27)一、红外遥控步进电机系统设计1.1系统设计原理利用红外遥控器控制步进电机其实和用键盘控制步进电机原理类似,只不过按键是用导线传递键是否按下的信号,而红外则是利用LED发射红外线传递按键信息。
由于红外采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”,在解码时通过判断高低电平持续时间的长短来识别发送的键值。
控制步进电机正、反方向转动、单步、连续、快慢等动作,原理其实并不困难。
步进电机将电脉冲信号转换成角位移,即给一个脉冲,步进电机就转动一个角度,转动的角度大小与施加的脉冲数成正比,因此,单步和连续的动作区别只是单片机给步进电机脉冲个数不同而已。
每按一次单步键就是给电机一个脉冲,而连续则是不断的给电机脉冲,达到连续运转的目的。
1.2总体方案设计根据该系统设计要求,需要通过红外遥控器按下按键和显示器来改变步进电机的运动状态以及显示,只需要红外遥控器中6个按键就可满足需求,外加8位LED数码显示管即可。
红外遥控控制步进电机

唐山学院毕业设计设计题目:基于单片机的步进电机控制系统设计与实现系别:信息工程系班级:姓名:指导教师:2013年6月10 日基于单片机的步进电机控制系统设计与实现摘要步进电机是一种纯粹的数字控制电动机,是一种受电脉冲信号控制的无刷式直流电动机,是现代定位驱动装置的核心,广泛应用在机械、电力、纺织、电子、仪表、印刷以及航空航天、船舶、兵器等国防工业等领域。
基于单片机的步进电机控制系统具有稳定度高、成本低、控制方便、应用范围广等特点。
本系统是由STC89C52单片机核心处理模块,遥控器命令输入模块,ULN2003及28BYJ-48步进电机组成的电机模块,12864液晶输出模块共同组成的基于单片机的步进电机控制系统。
本设计以载波为38KHZ的红外遥控器作为用户的控制端,它的功能是把用户的命令转换为红外信号。
红外信号由TL1838接收,它可以将光信号转换为电信号,并将其发送给微控制器STC89C52。
STC89C52对电信号进行相应处理即可获得用户所发出的指令,并依此来控制28BYJ48型四相八拍电机并以12864液晶作为当前状态的显示器。
用户可以对步进电机进行加速、减速、正转、反转的控制。
本步进电机控制系统具有精度高、运行稳定、控制方便、维护简单、应用范围广等特点。
关键词:STC89C52 12864液晶步进电机红外遥控Design and Implementation of Stepper Motor Control System Based on MCUAbstractStepper motor is a kind of pure digital control motor and brushless dc motor controlled by electric pulse signal type. Stepper motor is the core of the modern orientation drive, widely used in machinery, electric power, textile, electronics, instruments, printing and aerospace, ships, weapons, and other areas of the defense industry, etc. The characteristics of the stepping motor control system based on single chip microcomputer include high stability, low cost, convenient control and wide application , etc.The stepper motor control system consists of core processor using the single chip processor, command input control module using IR remote control , display module using 12864 LCD and 28BYJ48 stepping motor module which using ULN2003 as driver.The infrared remote control with carrier for 38 KHZ is used as the control end of the user, which can convert the users’ commands into the infrared signal. The TL1838 can receive the infrared signal and convert it into electrical signal, which input to tSTC89C52.The MCU can obtain instructions of users by processing the incoming signal and control stepping motor of the 28BYJ48 type, the current status can be shown by 12864 LCD. Users could control acceleration, deceleration, forward, inversion for the stepping motor. The features of the control system of stepper motor includes high precision, stable running, convenient control and simple maintenance and wide application, etc.Key word:MCU; 12864 LCD; Stepper Motor; Infrared remote control目录1 引言 (1)2 总体设计方案 (2)2.1系统设计原理 (2)2.2总体设计框图 (2)3系统硬件模块的组成 (3)3.1单片机控制模块 (3)3.1.1 STC89C52主要结构 (3)3.1.2 STC89C52功能特性描述 (3)3.1.3 时钟电路 (6)3.1.4复位电路 (6)3.2步进电机模块 (7)3.2.1 步进电机简介 (7)3.2.2步进电机的结构 (8)3.2.3 28BYJ-48步进电机工作原理 (8)3.3ULN2003芯片概述与特点 (9)3.4红外线发射接收模块 (10)3.4.1 红外线遥控的介绍 (10)3.4.2红外通信基本原理 (10)3.4.3 红外遥控发射系统 (12)3.4.4 红外遥控接收系统 (12)3.4.5 TL1838与单片机的接口 (14)3.512864显示模块 (14)3.5.1 12864液晶的特点 (14)3.5.2 12864液晶的引脚说明 (15)3.5.3 12864液晶的读写操作 (17)3.5.4 12864液晶的控制指令 (17)3.5.5 12864液晶接口电路 (20)3.6蜂鸣器模块 (20)3.6.1 蜂鸣器介绍 (20)3.6.2 蜂鸣器的接口电路 (21)4 软件设计与调试 (22)4.1主程序流程图 (22)4.2程序设计思路 (23)4.2.1 遥控器的解码 (23)4.2.2 步进电机的控制 (23)4.2.3 显示屏的控制 (24)4.2.4 蜂鸣器的控制 (24)4.2.5 模块中的通信 (24)5 编程与下载软件 (25)5.1 Keil软件 (25)5.2STC-ISP下载软件 (26)6 硬件电路制作 (27)6.1原理图的绘制 (27)6.2电路实现的基本步骤 (27)7 结论 (30)谢辞 (31)参考文献 (32)附录 (33)1 引言步进电机是一种纯粹的数字控制电动机,又称为阶跃电机或脉冲电机[1]。
基于单片机的红外遥控步进电机的设计

通过调试能实现如下功能:
-147-
制 造
中国科技信息 2009 年第 15 期 CHINA SCIENCE AND TECHNOLOGY INFORMATION Aug.2009
(1)19H键为步进电机调速控制和角位 移的切换键,16H 键为步进电机反转按键, 0AH 键为步进电机正转按键。键值 01H~ 04H 为电机的四种速度状态或四种角位移 状态,键值 0 D H 、0 E H 为速度或角位移 微调按键,键值 15H、14H 为角位移调节 按键。
2.1 硬件组成和工作原理 红外遥控器发出红外信号后,通过红 外一体化接收头进行接收。然后将接收到 的信号送入 AT89C51 单片机的 P3.2 口,通 过软件编程,对 P3.2口接收的信号进行译 码处理。这样就可以根据译出的码字对步 进电机进行正反转、调速以及角度控制,并 且可以将译出的码字值和步进电机的状态、 速度值或角度值通过 LCD 显示出来。 整个系统划分为红外线译码模块,液 晶屏显示模块,步进电机控制模块等三个 模块,三个模块之间通过红外信号译码值
图 1 系统原理框图
红外遥控信号接收器用的是 LT0038, 它是塑封一体化红外线接收头,是一种集 红外线接收、放大、整形于一体的集成电 路,不需要任何外接元件,就能完成从红 外线接收到输出与 TTL 电平信号兼容的所 有工作,没有红外遥控信号时为高电平, 收到红外信号时为低电平,而体积和普通 的塑封三极管大小一样,它适合于各种红 外线遥控和红外线数据传输。
变压器风冷控制系统形式多样、升级 改造频繁,在安装、维护工作中,必须 掌握设备的结构原理,针对设备特点和运 行状态,制定完善的检修工艺标准,及时 消除设备缺陷,保证风冷系统的安全稳定 运行。
图 4 解码子程序流程图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于红外遥控步进电机的设计班级:B140415摘要:随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。
研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。
步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。
采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。
软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。
介绍了一种基于AT89C51单片机的红外遥控步进电机的设计,系统分为红外遥控编解码、LCD显示和驱动步进电机三个模块,设计的系统能通过遥控器来控制步进电机,并且步进电机的状态能通过LCD液晶模块实时显示出来,使人们直观的看出步进电机的运行状态。
本报告对该系统的工作原理、硬件电路和软件进行了详细介绍。
关键词:红外遥控、LCD显示、步进电机、单片机一、引言本系统是基于单片机控制的综合系统,单片机通过对红外信号的解码来实现步进电机的变速及LCD实时显示步进电机的转速。
它综合了电子技术和单片机软硬件技术,本设计采用AT89c51单片机为核心包含红外接收电路、LCD显示电路和步进电机驱动电路。
通过红外遥控器发射不同的码值来控制步进电机的正转反转、加速减速以及启动停止并通过LCD显示出步进电机的状态。
二、系统功能分析根据系统要求设计各个模块。
本设计中控制芯片采用AT89c51单片机,各个功能通过不同模块来得以实现,主要有:红外接收模块、步进电机驱动和LCD显示模块。
系统基本架构原理如图1所示图一基本架构原理图各个模块具体实现方式如下:1. 红外发射模块:本设计采用的是通过遥控器发射不同的码值,红外接收电路将接收到得信号送给单片机的外部中断0,单片机接收到信号后通过解码程序对接收到得信号进行处理,使得这些信号成为相应的码值。
经过处理后这些信号就可以去控制步进电机的正转反转、加速减速以及启动停止并在LCD上显示出来。
遥控发射器采用士兰半导体的TC9012编码芯片进行红外遥控发射电路的搭建。
TC9012是一块用于红外遥控系统中的专用发射集成电路,采用CMOS工艺制造。
它可外接32个按键,其中有三组双重按键。
工作电压在2。
其编码方式采用一帧码中含有一个引导码,16位的用户码和8位的键数据码。
键数据码的反码也同时被传送,数据反码的传送可以大大减小系统的误码率。
引导码由一个9ms的载波波形和4.5ms的关断时间构成,编码采用脉冲位置调制方式(PPM)。
利用脉冲之间的时间间隔来区分“0”和“1”。
具体的遥控发射应用电路图如图2-1.图2-2所示图2-1TC9012结构框图图2-2发射器结构原理图2. 红外接收模块:本系统采用的接收模块其核心是与TC9012相对应的1308红外接收头。
1308是一颗集接收电路、调制解调电路、低通滤波、放大电路和控制电路为一体的集成接收头,一共有三个引脚输出其中一个是电源一个是接地另一个则是输出,这样就大大方便了我们的使用。
1308内部结构如图3所示图3由于1308内部集成了强大的信号处理功能,所以在本系统中使用这个1308的接收头的时候我们只需要在外部加上一个滤波电路就可以了,这个RC滤波电路是为了滤除电源端的干扰信号。
具体应用电路图如图4所示图43. 液晶显示模块在本系统中我们采用1602字符型液晶显示模块来显示步进电机的转速、起停以及正反转等步进电机的状态。
字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。
分4位和8位数据传输方式。
提供5*7点阵+光标和5*10点阵+光标的显示模式。
可以显示两行每行8个字符。
提供内部自动上电复位电路,+5V工作电压。
一共有16个引脚,其中一对电源引脚、一对LED背光电源引脚、LCD驱动电压引脚、一个模式选择引脚、一个读写操作引脚、一个使能引脚以及7个数据引脚。
其中LCD 驱动电压V0可通过滑动变阻器进行调节,一般V0为零伏。
具体应用电路图如图5所示图54. 步进电机驱动模块本系统采用额定电压为5VDC,相数为4相的步进电机,驱动方式为4相8拍。
一共有5跟线连接,其中红色的为电源线。
采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
由于单片机P口输出的电流比较弱不能驱动步进电机,所以要加一个ULN2003芯片来放大电流使之能驱动步进电机工作。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路。
ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。
步进电机驱动电路如图6所示图6三、硬件电路设计本系统采用的核心器件是AT89C51单片机,有4个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欧。
单片机时钟电路的设计。
89C51提供了外部时钟电路和内部时钟电路两种方式,本系统采用11.0592MHz晶振的外部时钟电路方式,在晶振两端接2个30pf的陶瓷电容。
这两个电容成为晶振的负载电容,它会影响晶振的谐振频率和输出幅度。
具体晶振电路如图9所示图8图9四、系统软件设计本系统的软件设计分LCD显示子程序、红外解码判断子程序、步进电机控制程序和主程序组成。
整个系统采用C语言进行编写。
1. 主程序主程序包括系统的初始化、LCD子程序的调用以及定时器中断函数和步进电机控制函数组成。
系统初始化包括对LCD显示模块数据位、命令位,红外解码标志位以及步进电机停止转动的等级的定义与初始化,定时器中断函数主要设定定时器中断间隔和步进电机转动的等级,步进电机控制函数由步进电机索引函数和对索引值的加减函数组成。
系统的主程序流程图如图10所示图102. LCD子程序LCD子程序主要实现的功能是显示步进电机的状态。
LCD第一行显示静态的“B140415 08 09 23”,这个是我组三同学的学号,第二行动态的显示静态的“RANK:”和不同速度步进电机转动的等级以及正反转的标志,正反转的标志为正转为“+”,反转为“-”。
系统LCD显示子程序流程图如图11所示图113. 红外解码判断子程序红外解码判断子程序包括对码值的判断程序和外部中断0程序,红外接收电路将接收到的信号送到外部中断0,然后红外解码程序对收到的信号进行解码,若解码失败则重新进行解码,若解码成功则判断器码值,然后调用步进电机控制和LCD显示程序实现步进电机的运转和显示。
从而实现红外遥控对步进电机的控制及显示。
系统红外解码判断子程序流程图如图12所示图12五:总结该红外遥控步进电机的制作让我学会了怎样去设计一个系统,对一个系统的基本架构有了一定的认识,在通过对红外编解码电路的设计也让我对红外遥控的基本知识有了新的认识,知道了红外发码的原理掌握了红外解码程序的编写,对LCD现实模块的使用也让我对LCD有了新的认识,交接了要调节LCD的驱动电压使其达到0V左右才能让字符显示出来,通过对步进电机驱动电路的设计也让我认识到要在步进电机的P口加上拉电阻才能驱动步进电机。
总之,这次实训让我收获了很多也为我以后的工作奠定了一定的基础。
源代码:#include <reg52.h>#include <intrins.h>#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit IR=P3^2; //红外接口标志unsigned char TempData[8]; //存储显示值的全局变量char code Tab[16]="0123456789ABCDEF",zf[2]="-+";unsigned char irtime;//红外用全局变量bit irpro_ok,irok,f;unsigned char IRcord[4];unsigned char irdata[33];sbit A1=P1^0; //定义步进电机连接端口sbit B1=P1^1;sbit C1=P1^2;sbit D1=P1^3;#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;}//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 EN_SET EN=1#define CHECK_BUSY#define DataPort P0unsigned char Speed=1;bit StartFlag,zfFlag;sbit RS = P2^4; //定义端口sbit RW = P2^5;sbit EN = P2^6;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);/*------------------------------------------------判忙函数------------------------------------------------*/ bit LCD_Check_Busy(void){#ifdef CHECK_BUSYDataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);#elsereturn 0;#endif}/*------------------------------------------------写入命令函数------------------------------------------------*/ void LCD_Write_Com(unsigned char com){// while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;/*------------------------------------------------写入数据函数------------------------------------------------*/void LCD_Write_Data(unsigned char Data){//while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;}/*------------------------------------------------清屏函数------------------------------------------------*/void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s){if (y == 0){LCD_Write_Com(0x80 + x); //表示第一行}else{LCD_Write_Com(0xC0 + x); //表示第二行}while (*s){LCD_Write_Data( *s);s ++;}/*------------------------------------------------写入字符函数------------------------------------------------*//* void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data){if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);}*//*------------------------------------------------初始化函数------------------------------------------------*/void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/}/*void speed1(void){if(Speed<14)Speed++;TempData[0]=zf[f];TempData[1]=Tab[Speed/10];TempData[2]=Tab[Speed%10];}void speed2(void){if(Speed>1)Speed--;TempData[0]=zf[f];TempData[1]=Tab[Speed/10];TempData[2]=Tab[Speed%10];}*//*------------------------------------------------主函数------------------------------------------------*/main(){unsigned int i=512;//旋转一周时间EX0init(); //初始化外部中断TIM0init();Init_Timer1();LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); //清屏LCD_Write_String(0,0,"B140415 08 09 23");LCD_Write_String(0,1,"RANK:");Coil_OFF;while(1)//主循环{if(irok) //如果接收好了进行红外处理 {Ircordpro();irok=0;}if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等{Ir_work();}}}/*------------------------------------------------定时器0初始化------------------------------------------------*/void TIM0init(void)//定时器0初始化{TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00; //重载值TL0=0x00; //初始化值 256微秒ET0=1; //开中断TR0=1;}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer1(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH1=0x00; //给定初值//TL1=0x00;EA=1; //总中断打开ET1=1; //定时器中断打开TR1=1; //定时器开关打开}/*------------------------------------------------外部中断0初始化------------------------------------------------*/void EX0init(void){IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1; //使能外部中断EA = 1; //开总中断}/*------------------------------------------------定时器0中断处理------------------------------------------------*/void tim0_isr (void) interrupt 1{irtime++; //用于计数2个下降沿之间的时间}/*------------------------------------------------定时器中断子程序------------------------------------------------*/ void Timer1_isr(void) interrupt 3{static unsigned char times,i;TH1=(65536-500)/256; //重新赋值 1msTL1=(65536-500)%256;if(StartFlag){if(zfFlag==0){if(times==(20-Speed)){times=0;switch(i){case 0:Coil_A1;i++;break;case 1:Coil_B1;i++;break;case 2:Coil_C1;i++;break;case 3:Coil_D1;i++;break;case 4:i=0;break;default:break;}}times++;}else{if(times==(20-Speed)){times=0;switch(i){case 0:Coil_D1;i++;break;case 1:Coil_C1;i++;break;case 2:Coil_B1;i++;break;case 3:Coil_A1;i++;break;case 4:i=0;break;default:break;}}times++;}}// 调用数码管扫描}/*------------------------------------------------外部中断0中断处理作用:接收信号,并存储到数组中------------------------------------------------*/void EX0_ISR (void) interrupt 0 //外部中断0服务函数{static unsigned char i; //接收红外信号处理static bit startflag; //是否开始处理标志位if(startflag){if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms i=0;irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1irtime=0;i++;if(i==33)//存储33位2个字节的用户码,1个字节数据码,一个字节数据码反码,一位同步位{irok=1;//处理完毕标志为1i=0;}}else{irtime=0;startflag=1;}}/*------------------------------------------------键值处理------------------------------------------------*/void Ir_work(void)//红外键值散转程序{switch(IRcord[2])//判断第三个数码值{case 0x40: {if(Speed<14)Speed++;TempData[0]=zf[f];TempData[1]=Tab[Speed/10];TempData[2]=Tab[Speed%10];}break;case 0x44:{if(Speed>1)Speed--;TempData[0]=zf[f];TempData[1]=Tab[Speed/10];TempData[2]=Tab[Speed%10];}break;case 0x43:{ Coil_OFF;TempData[0] = zf[f];TempData[1] = Tab[0];TempData[2] = Tab[0];StartFlag=0;LCD_Write_String(5,1,TempData);} break;case 0x09:{ TempData[0] = zf[f];TempData[1] = Tab[Speed/10];TempData[2] = Tab[Speed%10];StartFlag=1;}break;case 0x07: { if(f==1){ DelayMs(200);Coil_OFF;} f=0;TempData[0]=zf[f];zfFlag=0;}break;case 0x15: { if(f==0){ DelayMs(200);Coil_OFF;} f=1;TempData[0]=zf[f];zfFlag=1;}break;default:break;}if(StartFlag)LCD_Write_String(5,1,TempData);irpro_ok=0;//处理完成标志}/*------------------------------------------------红外码值处理------------------------------------------------*/void Ircordpro(void)//红外码值处理函数{unsigned char i, j, k;unsigned char cord,value;k=1;for(i=0;i<4;i++) //处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k];if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差value|=0x80;if(j<8){value>>=1;}k++;}IRcord[i]=value;value=0;}irpro_ok=1;//处理完毕标志位置1}void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/ void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}。