步进电机实验微机原理
- 格式:doc
- 大小:199.50 KB
- 文档页数:13
1、设计目的培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。
让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
2、设计内容编程实现步进电机的控制,能够实现开关控制步进电机的正反转功能。
3、设计要求实现步进电机的正、反转功能4、设计原理与硬件电路按下图连接线路,利用8255输出(通过PA0~PA3)的脉冲序列, K(通过PC7)控制步进电机转向。
8255的选片信号CS接0200H~0206H。
PA0~PA3接步进电机。
跳转到zhuan1A 口送信号03H 送A 口信号06H 送信号0CH 送信号03H 送信号09H 延时 送信号0CH 延时 延时 延时 送信号09H 送信号06H 跳转到zhuan2 延时 延时 延时 延时 开始8255初始化,A 输出C 输入 A 口置零读取开关状态 K=0?a_port equ 0200hb_port equ 0202hc_port equ 0204hctrl_port equ 0206h code segmentassume cs:codestart: mov al,10001001b mov dx,ctrl_port out dx,almov al,0hmov dx,a_portout dx,alk1: mov dx,c_portin al,dxtest al,80hjz k2call zhuan2jmp k1k2: call zhuan1jmp k1zhuan1 procmov al,06hmov dx ,a_port out dx,alcall delaymov al,0chout dx,alcall delayout dx,alcall delaymov al,03hout dx,alcall delayretzhuan1 endpzhuan2 procmov al,03hmov dx,a_portout dx,alcall delaymov al,09hout dx,alcall delaymov al,0chout dx,alcall delaymov al,06hout dx,alcall delayretzhuan2 endpdelay procmov cx,0ff00hl1:loop l1retdelay endpmov ah,4chint 21hcode endsend start7 程序及硬件系统调试情况该部分记录测试数据、调试结果及调试过程中遇到的主要问题和解决办法。
第1篇一、实验目的1. 熟悉步进电机的工作原理和特性。
2. 掌握步进电机的驱动方式及其控制方法。
3. 学会使用常用实验设备进行步进电机的调试和测试。
4. 了解步进电机在不同应用场景下的性能表现。
二、实验设备1. 步进电机:选型为双极性四线步进电机,型号为NEMA 17。
2. 驱动器:选型为A4988步进电机驱动器。
3. 控制器:选型为Arduino Uno开发板。
4. 电源:选型为12V 5A直流电源。
5. 连接线、连接器、电阻等实验配件。
三、实验原理步进电机是一种将电脉冲信号转换为角位移或线位移的电机。
它具有以下特点:1. 转动精度高,步距角可调。
2. 响应速度快,控制精度高。
3. 结构简单,易于安装和维护。
4. 工作可靠,寿命长。
步进电机的工作原理是:通过控制驱动器输出脉冲信号,使步进电机内部的线圈依次通电,从而产生步进运动。
四、实验步骤1. 搭建实验电路(1)将步进电机连接到驱动器上,确保电机线序正确。
(2)将驱动器连接到Arduino Uno开发板上,使用连接线连接相应的引脚。
(3)连接电源,确保电源电压与驱动器要求的电压一致。
2. 编写控制程序(1)使用Arduino IDE编写程序,实现步进电机的正转、反转、调速等功能。
(2)通过串口监视器观察程序运行情况,调试程序。
3. 调试步进电机(1)测试步进电机的正转、反转功能,确保电机转动方向正确。
(2)调整步进电机的转速,观察电机运行状态,确保转速可调。
(3)测试步进电机的步距角,确保步进精度。
4. 实验数据分析(1)记录步进电机的正转、反转、调速等性能参数。
(2)分析步进电机的运行状态,评估其性能。
五、实验结果与分析1. 正转、反转测试步进电机正转、反转功能正常,转动方向正确。
2. 调速测试步进电机转速可调,调节范围在1-1000步/秒之间。
3. 步距角测试步进电机的步距角为1.8度,与理论值相符。
4. 实验数据分析步进电机的性能指标符合预期,可满足实验要求。
第1篇一、实验目的1. 了解步进电机的工作原理和驱动方式。
2. 掌握步进电机的控制方法,包括正反转、速度调节和方向控制。
3. 通过实验验证步进电机的性能和稳定性。
二、实验原理步进电机是一种将电脉冲信号转换为角位移的电动机,其特点是控制精度高、响应速度快、易于控制。
步进电机的工作原理基于电磁感应原理,通过控制电流的通断,使电机绕组产生磁场,从而驱动转子旋转。
三、实验仪器与设备1. 步进电机实验平台2. 电脑3. 步进电机驱动器4. 步进电机5. 电源6. 接线端子四、实验内容1. 步进电机驱动电路搭建2. 步进电机正反转控制3. 步进电机速度调节4. 步进电机方向控制5. 步进电机性能测试五、实验步骤1. 步进电机驱动电路搭建(1)将步进电机驱动器与电脑连接,并确保电源连接正常。
(2)根据步进电机驱动器的说明书,将步进电机、电源和连接端子连接到相应的接口。
(3)检查电路连接是否正确,确保无误。
2. 步进电机正反转控制(1)编写程序实现步进电机正反转控制。
(2)在电脑上运行程序,观察步进电机正反转是否正常。
3. 步进电机速度调节(1)编写程序实现步进电机速度调节。
(2)在电脑上运行程序,调整速度参数,观察步进电机转速是否改变。
4. 步进电机方向控制(1)编写程序实现步进电机方向控制。
(2)在电脑上运行程序,观察步进电机旋转方向是否改变。
5. 步进电机性能测试(1)测试步进电机的空载转速和负载转速。
(2)测试步进电机的步距角和定位精度。
(3)测试步进电机的稳定性。
六、实验结果与分析1. 步进电机正反转控制实验结果显示,步进电机正反转控制正常,转速和方向可调。
2. 步进电机速度调节实验结果显示,步进电机速度调节正常,转速可调。
3. 步进电机方向控制实验结果显示,步进电机方向控制正常,旋转方向可调。
4. 步进电机性能测试(1)空载转速:步进电机空载转速为300转/分钟。
(2)负载转速:步进电机负载转速为200转/分钟。
大连理工大学本科设计报告(计算机原理接口实验综合设计)题目:步进电机控制系统设计课程名称:计算机原理实验学院(系):电信专业:自动化班级:电自1301学号:201382062学生姓名:宁博成绩:2015年12月26 日题目:步进电机1. 设计要求利用实验台上的开关K7控制步进电机的转向,利用电位器控制步进电机的转速。
具体要求如下:1.利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作,相序之间的时间决定着步进电机的转速,而间隔时间由延时程序中的CX寄存器的初值决定。
2.利用D8255A的PB7做输入控制转向,与K7连接。
其中K7做步进电机的转向控制,用ADC0809实现AD转换,利用电位器控制转速,程序运行时通过K7和电位器对步进电机实施动态控制;3.利用8253做秒脉冲发生器,产生约2秒的周期性方波信号。
其中CNT0做分频器:将1MHZ信号分频为100HZ;CNT1做秒脉冲输出(0.5HZ);4.利用386模块的主8259的MIR5做中断请求输入,将CNT1的OUT1秒信号方波作为中断请求信号,引发中断服务ISR;5.在中断服务程序中实现对步进电机的转速、转向实时控制。
方法如下:在ISR中,对D8255A的PB口进行一次输入操作,并根据输入的数据:1)对D7(与K7对应)位的数据为步进电机的转向控制;2)ADC0809读入的数据为步进电机的转速控制。
2 .设计分析及系统方案设计1.使用“寄存器间接寻址”的方式输出相序信号:将步进电机的相序数据定义在数据段当中,使用SI查表(间接寻址)获取相序数据。
其中查表顺序决定着电机转动方向;2.对8253进行编程,使OUT1输出2秒周期的脉冲方波信号。
为了便于调试,建议使用逻辑笔监测OUT1的输出;3.编制与中断相关的程序。
包括中断屏蔽字的设定、中断向量表的创建以及开中断的操作。
上述这些操作都应当加到程序的初始化中;4.编写中断服务程序ISR。
实验四步进电机原理及应用一、实验内容1.编制MCS-51程序使步进电机按照规定的转速和方向进行旋转,并将已转动的步数显示在数码管上。
2.步进电机的转速分为两档,当按下S1开关时,加速旋转,速度从10转/分加速到60转/分。
当松开开关时,减速旋转,速度恢复为10转/分。
当按下S2开关时,按照逆时针旋转;当松开时,按照顺时针旋转。
3.本程序要求使用定时器中断来实现,不准使用程序延时的方式。
二、步进电机工作原理本实验使用简单的双四拍工作模式即可,这也是FAN8200比较方便的工作方式。
只要将CE1和CE2分别置为高,然后IN1和IN2按照预定的脉冲输出,即01->11->10->00->01这个循环构成一个方向旋转的输出脉冲,将此序列翻转,就是相反方向的输出脉冲。
三、实验流程图1.main函数流程图2.顺/逆时针旋转函数流程图3.定时中断函数流程图四、程序源代码a)S1\S2在main函数中进行判定:1.#include<reg52.h>2.sfr P4 = 0xC0;3.sfr P4SW = 0xBB;4.sbit CE1 = P1^1;5.sbit CE2 = P1^4;6.sbit IN1 = P3^2;7.sbit IN2 = P1^0;8.sbit DATA = P4^5;9.sbit CLK = P4^4;10.sbit S1 = P3^6;11.sbit S2 = P3^7;12.13.int ssymbol = 0;14.int step = 0;15.int delay = 1;16.int flag1 = 1;17.int flag2 = 1;18.unsigned int code tab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};19.int main()20.{21. CE1 = 1;22. CE2 = 1;23. P4SW = 0x70;24. TMOD = 0x01;25. EA = 1;26. TR0 = 1;27. ET0 = 1;28. TH0 = 0x3C;29. TL0 = 0xB0;30.while(1)31. {32.if(S1 == 1)33. { flag1 = 1;34.if(S2 == 1)35. flag2 = 1;36.else37. flag2 == 0;38. }39.else if(S1 == 0)40. { flag1 = 0;41.if(S2 == 1)42. flag2 = 1;43.else44. flag2 = 0;45. }46. }47.48.}49.50.void clockwise(int symbol)51.{52.if (symbol == 0)53. {54. IN1 = 0;55. IN2 = 1;56. }57.else if(symbol == 1)58. {59. IN1 = 1;60. IN2 = 1;61. }62.else if(symbol == 2)63. {64. IN1 = 1;65. IN2 = 0;66. }67.else if(symbol == 3)68. {69. IN1 = 0;70. IN2 = 0;71. }72.}73.void counter_clockwise(int symbol)74.{75.if(symbol == 0)76. {77. IN1 = 0;78. IN2 = 0;79. }80.else if(symbol == 1)81. {82. IN1 = 1;83. IN2 = 0;84. }85.else if(symbol == 2)86. {87. IN1 = 1;88. IN2 = 1;89. }90.else if(symbol == 3)91. {92. IN1 = 0;93. IN2 = 1;94. }95.}96.void display_func(unsigned int num)97.{98. unsigned int n,m,c;99. m = tab[num];100.for(n = 0; n < 8; n++)101. {102. c = m & 0x80;103. CLK = 0;104. DATA = c;105. CLK = 1;106. m = m << 1;107. }108.}109.void show(unsigned int count)110.{111. display_func(count%10);112. display_func((count/10)%10);113. display_func(count/100);114.}115.116.void time() interrupt 1117.{118.if(flag1 == 1)119. {120. TH0 = 0x3C;121. TL0 = 0xB0;122.if(delay != 5)123. delay++;124.else125. {126.if(flag2 == 1)127. clockwise(ssymbol);128.if(flag2 == 0)129. counter_clockwise(ssymbol); 130. delay = 1;131.132. ssymbol++;133. step ++;134. show(step);135.if(ssymbol >3)136. {137. ssymbol = 0;138. }139. }140. }141.else if(flag1 == 0)142. {143. TH0 = 0x5B;144. TL0 = 0xF0;145.if(flag2 == 1)146. clockwise(ssymbol);147.if(flag2 == 0)148. counter_clockwise(ssymbol); 149. ssymbol++;150. step ++;151. show(step);152.if(ssymbol >3)153. {154. ssymbol = 0;155. }156. }157.158.159.}b)S1\S2在中断服务程序中进行判定1.#include<reg52.h>2.sfr P4 = 0xC0;3.sfr P4SW = 0xBB;4.sbit CE1 = P1^1;5.sbit CE2 = P1^4;6.sbit IN1 = P3^2;7.sbit IN2 = P1^0;8.sbit DATA = P4^5;9.sbit CLK = P4^4;10.sbit S1 = P3^6;11.sbit S2 = P3^7;12.13.int ssymbol = 0;14.int step = 0;15.int delay = 1;16.int flag;17.unsigned int code tab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};18.int main()19.{20. CE1 = 1;21. CE2 = 1;22. P4SW = 0x70;23. TMOD = 0x01;24. EA = 1;25. TR0 = 1;26. ET0 = 1;27. TH0 = 0x3C;28. TL0 = 0xB0;29.while(1);30.31.}32.33.void clockwise(int symbol)34.{35.if (symbol == 0)36. {37. IN1 = 0;38. IN2 = 1;39. }40.else if(symbol == 1)41. {42. IN1 = 1;43. IN2 = 1;44. }45.else if(symbol == 2)46. {47. IN1 = 1;48. IN2 = 0;49. }50.else if(symbol == 3)51. {52. IN1 = 0;53. IN2 = 0;54. }55.}56.void counter_clockwise(int symbol)57.{58.if(symbol == 0)59. {60. IN1 = 0;61. IN2 = 0;62. }63.else if(symbol == 1)64. {65. IN1 = 1;66. IN2 = 0;67. }68.else if(symbol == 2)69. {70. IN1 = 1;71. IN2 = 1;72. }73.else if(symbol == 3)74. {75. IN1 = 0;76. IN2 = 1;77. }78.}79.void display_func(unsigned int num)80.{81. unsigned int n,m,c;82. m = tab[num];83.for(n = 0; n < 8; n++)84. {85. c = m & 0x80;86. CLK = 0;87. DATA = c;88. CLK = 1;89. m = m << 1;90. }91.}92.void show(unsigned int count)93.{94. display_func(count%10);95. display_func((count/10)%10);96. display_func(count/100);97.}98.99.void time() interrupt 1100.{101.if(S1 == 1)102. {103. TH0 = 0x3C;104. TL0 = 0xB0;105.if(delay != 5)106. delay++;107.else108. {109.if(S2 == 1)110. clockwise(ssymbol);111.if(S2 == 0)112. counter_clockwise(ssymbol);113. delay = 1;114.115. ssymbol++;116. step ++;117. show(step);118.if(ssymbol >3)119. {120. ssymbol = 0;121. }122. }123. }124.else if(S1 == 0)125. {126. TH0 = 0x5B;127. TL0 = 0xF0;128.if(S2 == 1)129. clockwise(ssymbol);130.if(S2 == 0)131. counter_clockwise(ssymbol);132. ssymbol++;133. step ++;134. show(step);135.if(ssymbol >3)136. {137. ssymbol = 0;138. }139. }140.141.142.}五、思考题1、如采用单四拍工作模式,每次步进角度是多少,程序要如何修改?每次步进角度为15度,程序需要进行如下调整:IN1->IN2->!IN1->!IN2->IN12、如采用单双八拍工作模式,每次步进角度是多少,程序要如何修改?每次步进角度为7.5度,程序需要进行如下调整:IN1->IN1IN2->IN2->IN2!IN1->!IN1->!IN1!IN2->!IN2->!IN2IN13、步进电机的转速取决于那些因素?有没有上、下限?步进电机转速取决于输入脉冲变化的频率,频率越高,电机旋转越快,频率越低,电机旋转越慢。
微机原理上机实验报告实验八:8086中断实验实验十二:步进电机实验微机原理上机实验(八)实验报告实验八:8086中断实验一、实验目的1、了解8086内部响应中断的机制;掌握中断向量的作用。
2、利用实验仪上单脉冲、74HC244电路,不使用8259,实现一个中断实例。
3、复习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。
二、实验内容1、编制程序:拨动单脉冲开关,“”送给8086的INTR,触发中断;8086通过INTA信号,读取中断向量;8086计数中断次数,显示于F5区的数码管上注意:给INTR高电平信号,8086就会相应中断,所以实验开始前,保证单脉冲开关给8086低电平;中断程序中,加一个较长的延时程序,在中断结束前,有时间拨动单脉冲开关,恢复给8086低电平。
三、实验原理图本实验,通过F4区的8个拨动开关,给74HC244设定中断向量;本实验的中断向量是08H,即IN7-IN0位数据是00001000。
同学可以自定义中断向量,实验程序中处理中断向量部分程序作相应调整四、实验步骤1、连线说明:B4区:CS244、BLE ——C1区:GNDB4区:RD(IO区)——A3区:INTAA3区:INTR ——B2区:单脉冲B4区:JP57(D0..D7) ——A3区:JP41B4区:JP52(IN0..7) ——F4区:JP27(1..8)D3区:CS、A0、A1 ——A3区:CS1、A0、A1D3区:PC0、PC1 ——F5区:KL1、KL2D3区:JP20、B、C ——F5区:A、B、C2、运行程序3、实验开始前,保证单脉冲开关给8086低电平;运行程序;向下拨动开关(触发中断),立即向上拨动开关,产生一个“”,观察结果,数码管上显示的次数与拨动开关次数是否对应。
五、实验代码EXTRN InitKeyDisplay:NEAR, Display8:NEAR_STACK SEGMENT STACKDW 100 DUP(?)_STACK ENDS_DATA SEGMENT WORD PUBLIC 'DATA'BUFFER DB 8 DUP(?)Counter DB ?ReDisplayFlag DB 0_DATA ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA, SS:_STACKMOV AX,_DATAMOV DS,AXMOV ES,AXNOPCALL InitKeyDisplay ;对键盘、数码管控制器8255初始化CALL WriIntverMOV Counter,0 ;中断次数MOV ReDisplayFlag,1 ;需要显示STI ;开中断START1: LEA SI,BufferCALL Display8CMP ReDisplayFlag,0JZ START1CALL LedDisplayMOV ReDisplayFlag,0JMP START1WriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,INT_0STOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPLedDisplay PROC NEARMOV AL,CounterMOV AH,ALAND AL,0FHMOV Buffer,ALAND AH,0F0HROR AH,4MOV Buffer + 1,AHMOV Buffer + 2,10H ;高六位不需要显示MOV Buffer + 3,10HMOV Buffer + 4,10HMOV Buffer + 5,10HMOV Buffer + 6,10HMOV Buffer + 7,10HRETLedDisplay ENDPINT_0: PUSH DXPUSH AXMOV AL,CounterADD AL,1DAAMOV Counter,ALMOV ReDisplayFlag,1CALL LedDisplayDELAY: PUSH BXPUSH CXPUSH DIPUSH SIMOV CX,20DELAY1: LEA SI,BufferCALL Display8loop DELAY1POP SIPOP DIPOP CXPOP BXPOP AX六、实验思考题1.绘制本实验的详细实验电路图?微机原理上机实验(十二)实验报告实验十二:步进电机实验一、实验目的1、了解步进电机的基本原理,掌握步进电机的转动编程方法2、了解影响电机转速的因素有那些二、实验内容编写程序:使用F5区的键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;将相应的数据显示在F5区的数码管上。
步进电机的控制实验报告一、实验目的本实验旨在深入了解步进电机的工作原理,掌握其控制方法,并通过实际操作和测量,验证控制策略的有效性和准确性。
二、实验原理步进电机是一种将电脉冲信号转换为角位移或线位移的开环控制电机。
它通过按一定顺序依次给电机的各相绕组通电,使电机转子逐步转动。
其转动的角度与输入的脉冲数成正比,转速与脉冲频率成正比。
常见的步进电机控制方式有全步驱动、半步驱动和细分驱动。
全步驱动时,每输入一个脉冲,电机转子转动一个固定的角度(通常为 18°或 09°);半步驱动时,电机转子转动的角度为全步驱动的一半;细分驱动则通过控制各相电流的大小和相位,实现更精细的角度控制。
三、实验设备1、步进电机一台2、驱动控制器3、电源4、示波器5、数字万用表6、计算机及控制软件四、实验步骤1、连接实验设备将步进电机与驱动控制器正确连接,注意相序的对应。
给驱动控制器和电机接通电源。
将示波器和数字万用表分别连接到合适的测量点,以监测电机的电流、电压和脉冲信号。
2、设定控制参数在计算机控制软件中,设置电机的运行模式(全步、半步或细分)、脉冲频率、转动方向等参数。
3、启动电机点击控制软件中的启动按钮,观察电机的转动情况。
4、测量电机性能使用示波器测量电机的驱动脉冲信号,观察其波形和频率。
用数字万用表测量电机的相电流和相电压,记录数据。
5、改变控制参数调整脉冲频率,观察电机转速的变化。
改变转动方向,验证电机转向控制的正确性。
6、重复实验多次改变控制参数,进行重复实验,以获取更准确和可靠的数据。
五、实验数据及分析1、全步驱动模式下脉冲频率为 100Hz 时,电机转速约为 60r/min,相电流平均值为_____A,相电压为_____V。
脉冲频率提高到 500Hz 时,电机转速约为 300r/min,相电流平均值增加到_____A,相电压基本不变。
分析:在全步驱动模式下,脉冲频率越高,电机转速越快,但相电流也会相应增加,可能导致电机发热加剧。
步进电机微机实验报告步进电机微机实验报告引言:步进电机是一种特殊的电动机,它可以根据输入的电脉冲信号精确地控制转动角度和速度。
在本次实验中,我们使用了微机控制步进电机的转动,通过编写程序和控制电路,实现了步进电机的正转、反转和定位功能。
本报告将详细介绍实验的目的、原理、实验过程和结果,并对实验中遇到的问题进行分析和解决。
一、实验目的本次实验的目的是通过微机控制步进电机的转动,掌握步进电机的工作原理和控制方法。
具体目标包括:1. 理解步进电机的工作原理和结构特点;2. 掌握步进电机的控制方式和驱动电路设计;3. 通过编写程序实现步进电机的正转、反转和定位功能;4. 分析实验中可能遇到的问题,并提出解决方案。
二、实验原理步进电机是一种将电脉冲信号转化为机械转动的电动机。
它由定子、转子和驱动电路组成。
定子上有多个绕组,每个绕组上有若干个磁极。
转子上有多个磁极,与定子的磁极相对应。
通过改变绕组的通电顺序,可以使转子按一定的步距转动。
步进电机有两种常见的控制方式:全步进和半步进。
全步进模式下,每个步进脉冲使电机转动一个步距角度;半步进模式下,每个步进脉冲使电机转动半个步距角度。
在实验中,我们将使用全步进模式进行控制。
三、实验过程1. 设计驱动电路:根据步进电机的额定电流和电压,设计合适的驱动电路。
选择合适的功率晶体管和电流限制电阻,确保电机能够正常工作。
2. 连接电路:按照驱动电路的设计连接步进电机和微机。
注意接线的正确性和稳定性。
3. 编写控制程序:使用合适的编程语言编写步进电机的控制程序。
程序需要实现电机的正转、反转和定位功能。
4. 调试程序:通过调试程序,确保电机能够按照预期的方式工作。
可以通过改变电脉冲的频率和脉冲数来调整电机的转速和转动角度。
5. 实验结果记录:记录电机的转动角度、转速和实际运行情况。
分析实验结果,验证实验的准确性和可行性。
四、实验结果与分析经过实验,我们成功实现了步进电机的正转、反转和定位功能。
一、实验目的1. 熟悉步进电机的工作原理和特性。
2. 掌握通过微机控制步进电机的基本方法。
3. 了解步进电机在微机控制下的应用。
二、实验原理步进电机是一种将电脉冲信号转换为角位移或线位移的电机,其特点是步进角固定,控制精度高,响应速度快。
步进电机的工作原理是:当给步进电机输入一定频率的脉冲信号时,电机就会以一定的步进角进行旋转。
步进电机的控制方式主要有以下几种:1. 单相控制:将步进电机绕组分为A、B、C、D四相,每相依次通电,实现电机的旋转。
2. 双相控制:将步进电机绕组分为A、B两相,通过改变A、B两相的通电顺序,实现电机的旋转。
3. 四相控制:将步进电机绕组分为A、B、C、D四相,通过改变A、B、C、D四相的通电顺序,实现电机的旋转。
三、实验设备1. 微机:一台2. 步进电机驱动器:一台3. 步进电机:一台4. 编程软件:例如Keil、IAR等5. 连接线:若干四、实验内容1. 步进电机基本特性测试(1)观察步进电机在不同脉冲频率下的转动情况。
(2)观察步进电机在不同脉冲数下的转动角度。
2. 步进电机单相控制(1)编写程序,实现步进电机单相控制。
(2)测试步进电机单相控制下的转动情况。
3. 步进电机双相控制(1)编写程序,实现步进电机双相控制。
(2)测试步进电机双相控制下的转动情况。
4. 步进电机四相控制(1)编写程序,实现步进电机四相控制。
(2)测试步进电机四相控制下的转动情况。
5. 步进电机转速控制(1)编写程序,实现步进电机转速控制。
(2)测试步进电机在不同转速下的转动情况。
6. 步进电机转向控制(1)编写程序,实现步进电机转向控制。
(2)测试步进电机正转和反转的情况。
五、实验步骤1. 连接步进电机驱动器和步进电机。
2. 在微机上编写程序,实现步进电机的基本控制。
3. 编写程序,实现步进电机单相、双相、四相控制。
4. 编写程序,实现步进电机转速和转向控制。
5. 运行程序,观察步进电机的转动情况。
微型计算机原理步进电机实验一、实验目的掌握步进电机的基本工作原理和控制方法,理解步进电机与微型计算机的接口原理。
二、实验器材1.电脑2.步进电机3.驱动器电路板4.接口电缆5.实验面包板6.杜邦线7.电源三、实验步骤1.搭建电路连接:将步进电机与驱动器电路板连接,然后将驱动器电路板与微型计算机的接口电缆连接。
2.编写控制程序:使用任何一种编程语言,编写通过微型计算机控制步进电机的程序。
3.载入程序:将编写好的控制程序载入微型计算机。
4.运行程序:执行控制程序,观察步进电机的运动情况。
四、实验内容1.观察步进电机是否正常运转。
2.改变控制程序中的参数,例如步进角度和转速,观察步进电机的运动情况。
3.尝试通过控制程序改变步进电机的运动方向。
4.尝试同时控制多个步进电机。
五、实验原理步进电机是一种能够按照指令进行旋转的电机。
它可以精确控制转动角度和转速,适用于需要精确定位的应用场景。
步进电机的控制通常使用驱动器来实现。
驱动器接受来自微型计算机的指令,然后根据指令来控制步进电机的转动。
步进电机的控制方法有多种,常见的有脉冲信号控制方法和磁场控制方法。
脉冲信号控制方法是通过给步进电机的控制端口发送不同的脉冲信号来实现转动控制;磁场控制方法是通过改变电磁铁的磁场来使步进电机转动。
在本实验中,我们使用脉冲信号控制方法来控制步进电机。
步进电机的转动是按照一定的角度来进行的,这个角度叫做步角。
步进电机通常有两种类型:单圈步进电机和多圈步进电机,它们的步角不同。
每接收到一个脉冲信号,步进电机就会转动一定的步角。
驱动器电路板通常有多个控制端口,用来接收控制信号。
控制信号可以是高电平或低电平的脉冲信号,通过给这些控制端口发送不同的脉冲信号,就可以控制步进电机的转动方向和转动步数。
六、实验问题与解答1.为什么要使用驱动器来控制步进电机?答:步进电机的控制需要精确的脉冲信号来实现转动控制,而微型计算机无法直接提供这种精确的信号。
一、实验目的1. 了解步进电机的工作原理,掌握其控制方式和调速方法。
2. 学习使用微机对步进电机进行控制,提高微机应用能力。
3. 培养实验操作和数据分析能力。
二、实验设备及器件1. 微机一台2. 步进电机驱动器一台3. 步进电机一台4. 电源一个5. 连接导线若干三、实验原理步进电机是一种将电脉冲信号转换为角位移或线位移的电机,具有定位精度高、响应速度快、控制简单等优点。
步进电机的工作原理是利用电机的磁极与定子磁极之间的磁力相互作用,通过控制脉冲信号的输入,使电机产生相应的角位移。
步进电机的控制方式主要有以下几种:1. 单拍控制:每输入一个脉冲信号,电机转动一个步距角。
2. 双拍控制:每输入两个脉冲信号,电机转动一个步距角。
3. 四拍控制:每输入四个脉冲信号,电机转动一个步距角。
步进电机的调速方法主要有以下几种:1. 脉冲频率调速:通过改变脉冲信号的频率,实现电机转速的调节。
2. 脉冲宽度调速:通过改变脉冲信号的宽度,实现电机转速的调节。
3. 脉冲分配调速:通过改变脉冲信号的分配方式,实现电机转速的调节。
四、实验步骤1. 将步进电机驱动器连接到微机,确保连接正确。
2. 将步进电机连接到驱动器,确保连接牢固。
3. 将电源连接到驱动器,确保电源电压符合要求。
4. 编写程序,实现步进电机的控制功能。
5. 调试程序,观察步进电机的转动情况。
6. 分析实验结果,总结实验经验。
五、实验程序以下是一个简单的步进电机控制程序,实现单拍控制方式:```c#include <reg51.h>#define STEP_PIN P2 // 定义步进电机控制端口void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void main() {while (1) {STEP_PIN = 0x01; // 输入第一个脉冲信号delay(100); // 延时STEP_PIN = 0x00; // 清除脉冲信号delay(100); // 延时}}```六、实验结果与分析1. 在实验过程中,通过改变脉冲信号的频率,实现了步进电机的调速。
湖南工程学院课程设计课程名称微机原理与应用课题名称步进电机控制系统设计专业电子科学与技术班级0801班学号姓名指导教师李晓秀老师2011年07月06日湖南工程学院课程设计任务书课程名称微机原理与应用课题步进电机控制系统设计专业班级电子科学与技术学生姓名学号指导老师李晓秀老师审批任务书下达日期2011年06月27日任务完成日期2011年07月06日设计内容与设计要求设计内容:以单片机为核心设计一个步进电机控制系统,要求能够通过键盘设置步进电机的转向和转速,并在4位LED显示器上显示步进电机转速或工作状态。
设计要求:1)确定系统设计方案;2)进行系统的硬件设计;3)完成应用程序设计;4)硬件电路及应用程序的调试。
主要设计条件本课题以单片机为核心,设计并制作出步进电机控制系统,设计要求:1. 按下不同的键,分别使步进电机实现顺时针和逆时针旋转;2. 步进电机可实现正、反转,加速、减速等工作状态;3. 通过LED数码管显示步进电机运行速度或工作状态;说明书格式1.课程设计任务书2.目录3.总体方案确定4.各单元硬件电路设计说明及计算方法5.软件设计与说明(包括流程图)6.调试结果与必要的调试说明7.使用说明8、总结9、参考文献附录附录A 系统原理图附录B 程序清单目录1 设计总体思路 (5)方案思路与总框图 (5)2 步进电机的原理介绍 (6)2.1 步进电机的工作原理 (6)2.2 步进电机转向与转速制 (6)3 硬件设计 (7)3.1 步进电机选取 (7)3.2 单片机的选取 (8)3.4 硬件的连接 (9)4 程序设计 (10)4.1 主程序 (10)4.2 显示子程序 (11)4.3 键盘扫描子程序 (12)5 调试与故障分析 (13)5.1 软件部分 (13)5.2 硬件部分 (13)5.3 故障分析及解决 (14)6总结 (15)7 参考文献 (16)附件 (17)1系统原理图 (17)2源程序 (18)1 设计总体思路方案思路与总框图步进电机的控制是通过脉冲信号来控制的,脉冲由键盘给予,连接图如图1-1所示,把编好的C 语言程序下载到单片机中,单片机就具备了实现程序指示的功能,通过键盘控制正转、反转、加速、减速、复位等功能,数码管显示转速,LED 灯显示正反转。
微机原理步进电机控制微机原理步进电机控制实验报告实验步进电机控制⼀、实验内容l、⽤8255的PA0,PA3输出脉冲信号,驱动步进电机转动,通过键盘设定来控制步进电机正转、反转、停⽌。
2、实验预备知识,步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机作步进式旋转。
驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速,⽤微电脑控制步进电机最适合。
⼆、实验步骤1、在系统处于命令提⽰符“P.”态下,按SCAL键。
2、按图6,9连好实验线路图,8255的PA0,PA3依次连到HA-HD插孔。
3、运⾏实验程序。
在系统处于命令提⽰符“P.”态下,输⼊1630,按EXEC键,显⽰BJ?,按“1”键正转;按“2”键反转;按“3”停⽌。
4、观察步进电机转动情况。
三、实验原理图, 实验接线图:四(实验程序清单CODE SEGMENT ;BJ.ASM ASSUME CS: CODE IOCONPT EQU 0FF2BH IOBPT EQU 0FF29H IOAPT EQU 0FF28HPA EQU 0FF20H ;字位⼝PB EQU 0FF21H ;字形⼝PC EQU 0FF22H ;键⼊⼝ORG 1630HSTART: JMP START0 BUF DB ?,?,?,?,?,? KZ DB ?ltime db ?lkey db ?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F1HSTART0: CALL BUF1 ;写显⽰缓冲区初值MOV AL,88H ;MOV DX,IOCONPTOUT DX,AL ;写命令字redikey: call dispkey ;调⽤显⽰键扫cmp KZ,01h ;是1键正转JZ ZZcmp KZ,02h ;是2键反转JZ STXJMP REDIKEY ;继续读键JMP ST ;转停⽌ STX:ZZ: CALL BUFZ ;显⽰正转值ZZ1: MOV DX,IOAPT ;PA⼝MOV AL,03H ;MOV DX,IOAPTOUT DX,AL ;驱动步进电机,A.B两相CALL DELPZ ;延时,读键MOV AL,06HMOV DX,IOAPTOUT DX,AL ;驱动步进电机,A.d两相CALL DELPZ MOV AL,0CHMOV DX,IOAPTOUT DX,AL ;驱动步进电机,C.D两相CALL DELPZ MOV AL,09H ;驱动步进电机,B.C两相MOV DX,IOAPT OUT DX,ALCALL DELPZMOV AL,03HMOV DX,IOAPTOUT DX,ALCALL DELPZMOV AL,06HMOV DX,IOAPTOUT DX,ALCALL DELPZMOV AL,0CHMOV DX,IOAPTOUT DX,ALCALL DELPZMOV AL,09HMOV DX,IOAPTOUT DX,AL;------------------------- FZ: CALL BUFF ;反转⼊⼝FZ1: MOV DX,IOAPTMOV AL,0CHOUT DX,ALCALL DELPFMOV AL,06HMOV DX,IOAPTOUT DX,ALCALL DELPFMOV DX,IOAPTMOV AL,03HOUT DX,ALCALL DELPFMOV AL,09HMOV DX,IOAPTOUT DX,ALCALL DELPFMOV AL,0CHMOV DX,IOAPTOUT DX,ALCALL DELPFMOV AL,06HMOV DX,IOAPTOUT DX,ALCALL DELPFMOV AL,03HMOV DX,IOAPTOUT DX,ALCALL DELPFMOV AL,09HMOV DX,IOAPTOUT DX,ALCALL DELPFMOV AL,00HOUT DX,ALST1: call dispkey cmp KZ,01hJZ ZZMONcmp KZ,02hJZ FZMONJMP ST1delpZ: mov cx,02h con1: push cx CALL dispkey pop cxcmp KZ,02hJZ FZMONcmp KZ,03hJZ STMONloop con1RETdelpF: mov cx,02h con2: push cx CALL dispkey pop cxcmp KZ,01hJZ ZZMONcmp KZ,03hJZ STMONloop con2RETZZMON: POP CXJMP ZZFZMON: POP CXJMP FZSTMON: POP CXJMP ST;-------------------------dispkey: call disp ;键盘显⽰⼦程序,见前注释call key mov ah,al ;newkeymov bl,ltime ;ltimemov dx,PA ;0ff21hout dx,alcmp ah,bhmov bh,ah ;bh=new keymov ah,bl ;al=timejz disk4mov bl,88hmov ah,88hdisk4: dec ahcmp ah,82hjz disk6cmp ah,0ehjz disk6cmp ah,00hjz disk5mov ah,20hdec bljmp disk7disk5: mov ah,0fhdisk6: mov bl,ahmov ah,bhdisk7: mov ltime,blmov lkey,bhmov KZ,bhmov al,ahretkey: mov al,0ffh ;键扫⼦程序mov dx,PB out dx,almov bl,00hmov ah,0fehmov cx,08hkey1: mov al,ahmov dx,PAmov ah,alnopnopnopnopnopnopmov dx,PCin al,dxnot alnopnopand al,0fhjnz key2inc blloop key1jmp nkeykey2: test al,01h je key3 mov al,00hjmp key6key3: test al,02h je key4 mov al,08hjmp key6key4: test al,04h je key5 mov al,10hjmp key6key5: test al,08hje nkeymov al,18hkey6: add al,blcmp al,10hjnc fkeymov bl,almov al,[bx+si]retnkey: mov al,20h fkey: retdata2: db 07h,04h,08h,05h,09h,06h,0ah,0bh DB 01h,00h,02h,0fh,03h,0eh,0ch,0dh DISP: MOV AL,0FFH ;显⽰⼦程序 ,5ms MOV DX,PAOUT DX,ALMOV CL,0DFH ;20HMOV BX,OFFSET BUF DIS1: MOV AL,[BX]MOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,[BX]POP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,0a0HLOOP $POP CXCMP CL,0FEHJZ LX1INC BXROR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BUF,0BH ;写”BJ----” MOV BUF+1,019HMOV BUF+4,17HMOV BUF+5,17HRETBUFZ: MOV BUF,0BH ;写”BJ---F” MOV BUF+1,19HMOV BUF+2,17HMOV BUF+3,17HMOV BUF+4,17HMOV BUF+5,0FHRETBUFF: MOV BUF,0BH ;写”BJ---r” MOV BUF+1,19HMOV BUF+2,17HMOV BUF+3,17HMOV BUF+4,17HMOV BUF+5,18HRETBUFS: MOV BUF,0BH ;写”BJ---S” MOV BUF+1,19HMOV BUF+2,17HMOV BUF+3,17HMOV BUF+4,17HMOV BUF+5,05HRETCODE ENDSEND START五、实验总结1、通过实验进⼀步了解8086的使⽤,学习汇编语⾔编程⽅法及调试技巧。
华北科技学院计算机系综合性实验实验报《微机原理与接口技术A》课程综合性实验报告图1驱动方式为二相激磁方式,各线圈通电顺序如下表:表1中首先向Φ1-Φ2线圈输入驱动电流,接着依次向Φ2-Φ3,Φ3-Φ4,Φ4-Φ1输入驱动电流,最后再返回到Φ1-Φ2,按这种顺序切换可使步进电机实现顺时针方向旋转。
实验中可通过不同的时间延时来得到不同频率的步进电机输入脉冲,从而得到各种不同的电机转速。
8255A 芯片一般占用四个连续的口地址,按照从高高到低分别为:控制口、C 口、B 口、A 口。
8255共有三种工作方式: 方式0:基本输入输出; 方式1:中断工作方式;方式2:双通输入输出,仅有A 口。
图(4 )8255A 芯片简介实验执行流程图:图3表1汇编源程序(部分,多了发不出来)P55A EQU 288H ;8255 A PORT OUTPUT P55C EQU 28AH ;8255 C PORT INPUTP55CTL EQU 28BH ;8255 COUTRL PORT stack segment stackstack endsDATA SEGMENTBUF DB 0......START: MOV AX,CSMOV DS,AXMOV AX,DATAMOV DS,AXMOV DX,OFFSET MESMOV AH,09INT 21HMOV DX,P55CTLMOV AL,8BHOUT DX,AL ;8255 C INPUT, A OUTPUTMOV BUF,33HOUT1: MOV AL,BUFMOV DX,P55AOUT DX,ALpush dxMOV AH,06hmov dl,0ffhINT 21H ;ANY KEY PRESSEDpop dxJE IN1MOV AH,4CHINT 21HIN1: MOV DX,P55CIN AL,DX ;INPUT SWITCH VALUETEST AL,01HJNZ K0TEST AL,02HJNZ K1TEST AL,04HJNZ K2TEST AL,08HJNZ K3TEST AL,10HJNZ K4TEST AL,20HJNZ K5TEST AL,40HJNZ K6STOP: MOV DX,P55AMOV AL,0FFHJMP OUT1K0: MOV BL,10HSAM: TEST AL,80H步进电机原理及使用说明步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
大连理工大学本科设计报告(计算机原理接口实验综合设计)题目:步进电机控制系统设计课程名称:计算机原理实验学院(系):电信学院专业:电子信息工程班级:学号:学生姓名:成绩:2015 年月日题目:步进电机控制系统设计1 设计要求利用实验台上的电位器,实现步进电机的转速、转向控制。
具体要求如下:1.利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作(使用四个LED监视步进电机的相序信号),相序之间的时间决定着步进电机的转速,而间隔时间由延时程序中的CX寄存器的值决定。
2.利用电位器做输入,将电位器与ADC0809的IN0口相连,通过ADC0809将读取到的电压值转化为8位二进制值,根据这个8位二进制值的不同来实现对步进电机的转速、转向控制3.利用8254做秒脉冲发生器,产生约10Hz方波信号。
其中CNT0做分频器:将1MHz信号分频为100Hz;CNT1做秒脉冲输出(10Hz);4.利用386模块的主8259的MIR5做中断请求输入,将CNT1的OUT1秒信号方波作为中断请求信号,引发中断服务ISR;5.在中断服务程序中实现对步进电机的转速、转向实时控制。
方法如下:在ISR中,读取ADC0809转换得到的8位二进制值,并根据此值做如下处理:1)当转换值为00h~7fh时,逆时针旋转,00h时转速最大;2)当转换值为81h~0ffh时,顺时针旋转,0ffh时转速最大;3)当转换值为80h时,停止旋转。
2 设计分析及系统方案设计整个设计是在使用8255输出相序控制步进电机转动的基础上,利用中断实时调整输出相序的时间间隔以及顺序,起到控制步进电机转速和转向的效果。
程序的结构类型属于循环结构。
基础程序部分:该部分是利用8255 A口循环输出8个相序,在循环体中条用子程序delay控制时间间隔,延迟量由CX值决定。
中断程序部分:先安装中断向量,由于386EXCPU的8259初始化的程序已经固化在系统的ROM BIOS中,所以只要把中断类型码35H对应的内存位置上装上中断服务程序的段地址和偏移地址。
步进电机实验微机原理步进电机是一种特殊类型的电动机,可以将输入的电信号转化为机械运动。
它具有先进的控制技术和广泛的应用领域,特别是在微机控制系统中。
本文将介绍步进电机的原理和在微机控制系统中的实验。
步进电机的原理是利用电磁场的磁力作用产生力矩,从而使电机转动。
步进电机是依靠控制电机驱动器对电机的每一个步进角度进行控制,从而实现精确的定位和运动控制。
步进电机通常由一个转子和一个定子组成。
转子是由一系列的磁极组成,而定子则是由一对电磁线圈组成,称为相。
根据电磁线圈的激励方式,步进电机可以分为单相和双相两种。
通过对不同相的激励,可以实现电机转动和定位控制。
在微机控制系统中,步进电机通常与微控制器或PLC(可编程逻辑控制器)等设备相结合,通过输出脉冲信号来控制电机的运动。
为了实现步进电机的精确定位和运动控制,需要将运动要求转化为脉冲信号,并通过控制器将脉冲信号发送给电机驱动器。
电机驱动器接收到脉冲信号后,根据脉冲信号的频率和方向来控制电机转动的角度和速度。
步进电机实验可以通过搭建简单的电路和编程控制来实现。
首先,需要选购适当的步进电机、电机驱动器和微控制器等设备。
然后,将步进电机和电机驱动器连接起来,确保电路正确连接,并通过编程控制器来控制电机的运动。
在步进电机实验中,可以进行一些常见的实验项目,如定向旋转、正反转、加减速运动等。
为了能够准确控制电机的运动,需要设置合适的脉冲频率和方向。
脉冲频率决定了电机的转速,而脉冲方向决定了电机的转动方向。
通过不同的脉冲频率和方向组合,可以实现各种精确的运动控制。
除了基本的实验项目,还可以根据实际需求进行更复杂的步进电机实验。
例如,可以将步进电机与传感器相结合,实现闭环控制。
通过读取传感器的反馈信号,可以实现电机的位置闭环控制,从而实现更高精度的运动控制。
此外,还可以通过与其他设备的联动控制,实现更复杂的自动化系统。
步进电机实验微机原理实验旨在通过搭建实际电路和编程控制来了解步进电机的工作原理和应用。
大连理工大学本科设计报告(计算机原理接口实验综合设计)题目:步进电机控制系统设计课程名称:计算机原理实验学院(系):电信专业:自动化班级:电自1301学号:201382062学生姓名:宁博成绩:2015年12月26 日题目:步进电机1. 设计要求利用实验台上的开关K7控制步进电机的转向,利用电位器控制步进电机的转速。
具体要求如下:1.利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作,相序之间的时间决定着步进电机的转速,而间隔时间由延时程序中的CX寄存器的初值决定。
2.利用D8255A的PB7做输入控制转向,与K7连接。
其中K7做步进电机的转向控制,用ADC0809实现AD转换,利用电位器控制转速,程序运行时通过K7和电位器对步进电机实施动态控制;3.利用8253做秒脉冲发生器,产生约2秒的周期性方波信号。
其中CNT0做分频器:将1MHZ信号分频为100HZ;CNT1做秒脉冲输出(0.5HZ);4.利用386模块的主8259的MIR5做中断请求输入,将CNT1的OUT1秒信号方波作为中断请求信号,引发中断服务ISR;5.在中断服务程序中实现对步进电机的转速、转向实时控制。
方法如下:在ISR中,对D8255A的PB口进行一次输入操作,并根据输入的数据:1)对D7(与K7对应)位的数据为步进电机的转向控制;2)ADC0809读入的数据为步进电机的转速控制。
2 .设计分析及系统方案设计1.使用“寄存器间接寻址”的方式输出相序信号:将步进电机的相序数据定义在数据段当中,使用SI查表(间接寻址)获取相序数据。
其中查表顺序决定着电机转动方向;2.对8253进行编程,使OUT1输出2秒周期的脉冲方波信号。
为了便于调试,建议使用逻辑笔监测OUT1的输出;3.编制与中断相关的程序。
包括中断屏蔽字的设定、中断向量表的创建以及开中断的操作。
上述这些操作都应当加到程序的初始化中;4.编写中断服务程序ISR。
在ISR中读取D8255A的PB口数据和AD转换的数据,然后进行数据分析、根据数据来调整CX寄存器中的数据,因而改变步进电机的转速和转向。
3.系统电路图1MHZ 脉冲 图 1 .1 实验参考逻辑电路4 .外围接口模块硬件电路功能描述8253具有三个独立的16位减法计数器,每个计数器可按照二进制或十进制计数,每个通道都有六种不同的工作方式。
8255有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为主机与多种外设连接时的中间接口电路。
ADC0809 是8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D 转换,具有转换起停控制端。
模拟输入电压范围0~+5V,不需零点和满刻度校准。
5 主程序中主要变量说明6.系统软件中各个子程序的功能描述7.主程序程序流程图(a)主程序流程图(b)中断服务程序流程图图 1.2 程序流程图8.程序清单IO_ADDRESS equ 200htime equ 210had_io equ 220hdata segmentorder1 db 01h,03h,02h,06h,04h,0ch,08h,09horder2 db 09h,08h.0ch,04h,06h,02h,03h,01hFLAG db ?speed dw 0300h,0380h,0480h,0580h,0680h,0780h,0880hSD dw 0280h ;默认转速data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,IO_ADDRESSadd dx,03mov al,82h ;B端口输入,A、C输出,方式0 out dx,alclimov FLAG,00h ;标志位置0in al,021h ;设置中断屏蔽字and al,11011111b ;IR5out 021h,alpush ds ;设置中断向量表mov ax,0mov ds,axmov si,35hadd si,siadd si,simov ax,offset servicemov [si],axpush cspop axmov [si+2],axpop dsmov dx,time ;分频得到0,5s脉冲add dx,03mov al,37h ;计数器0,方式3,BCD码计数,先低后高 out dx,almov dx,time ;计数器0设初值mov al,0out dx,alout dx,al ;写初值10000mov dx,timeadd dx,03mov al,56h ;计数器1,方式3,二进制计数,低8位 out dx,almov dx,time ;设计数器1初值为200inc dxmov al,200 ;产生0.5s脉冲out dx,alstispeedin:cmp FLAG,01h ;转向,转速jz cccmov dx,IO_ADDRESSmov cx,08lea si,order1aaa: mov al,[si]out dx,alcall delayinc siloop aaajmp speedinccc: mov dx,IO_ADDRESSmov cx,08lea si,order2ddd: mov al,[si]out dx,alcall delayinc siloop dddjmp speedinservice proc far ;中断服务子程序push axpush dxpush sipush bxmov dx,IO_ADDRESSinc dxin al,dxmov bl,alshl bl,1jnc mmm ;CF=0,则跳转mov FLAG,01Hmov dx,ad_io ;ADC启动转换地址out dx,al ;启动ADCmov dx,ad_io ;获取ADC EOC状态地址 add dx,2L1: in al,dxtest al,01h ;测试EOC=1?jz L1mov dx,ad_io ;读数据地址inc dxin al,dxcmp al,00Hjnz cmp11mov SD,0280hjmp endsercmp11:cmp al,10Hjnc cmp12mov si,WORD PTR speed[0] mov SD,sijmp endsercmp12:cmp al,20Hjnc cmp13mov si,WORD PTR speed[2] mov SD,sijmp endsercmp13:cmp al,30Hjnc cmp14mov si,WORD PTR speed[4] mov SD,sijmp endsercmp14:cmp al,40Hjnc cmp15mov si,WORD PTR speed[6] mov SD,sijmp endsermmm: jmp cmp20cmp15:cmp al,50Hjnc cmp16mov si,WORD PTR speed[8] mov SD,sijmp endsercmp16: cmp al,60Hjnc cmp17mov si,WORD PTR speed[10] mov SD,sijmp endsercmp17:mov si,WORD PTR speed[12] mov SD,sijmp endsercmp20: mov dx,ad_ioout dx,almov dx,ad_ioadd dx,2L2: in al,dxtest al,01hjz L2mov dx,ad_ioinc dxin al,dxmov FLAG,00Hcmp al,00Hjnz cmp21mov SD,0280Hjmp endsercmp21:cmp al,10Hjnc cmp22mov si,WORD PTR speed[0]mov SD,sijmp endsercmp22:cmp al,20Hjnc cmp23mov si,WORD PTR speed[2]mov SD,sijmp endsercmp23:cmp al,30Hjnc cmp24mov si,WORD PTR speed[4]mov SD,sijmp endsercmp24:test al,40Hjnc cmp25mov si,WORD PTR speed[6]mov SD,sijmp endsercmp25:cmp al,50Hjnc cmp26mov si,WORD PTR speed[8]mov SD,sijmp endsercmp26:cmp al,60Hjnc cmp27mov si,WORD PTR speed[10]mov SD,sijmp endsercmp27:mov si,WORD PTR speed[12]mov SD,siendser: ;发EOI命令 mov al,20hout 20h,alpop bxpop sipop dxpop axstiiretservice endpdelay proc ;延时程序push axpush cxpush dxmov dh,6x1: mov cx,SDx2: loop x2dec dhjnz x1pop dxpop cxpop axretdelay endpcode endsend start9.系统调试运行结果说明、分析所出现得问题,设计体会与建议运行结果说明:基本完成了任务要求,可以控制步进电机的转速和旋转方向。
问题:通过寄存器间接寻址的方法使电机旋转,在此程序中电机运行状态的改变稍有延迟,原因是在主程序中,状态的改变是在一个完整的相序周期结束后才发生的,可能需要等待循环的过程,稍有延迟。
结论及设计体会:微机原理实验的学习使我对对汇编语言有更加进一步的了解,从理论到实际的应用。
并且通过本实验让我对汇编语言产生很大的兴趣,让我掌握了汇编编程的总体思路。
课程设计对我是一次很好的锻炼,综合运用所学的芯片,我进一步的掌握了对8255A,8253以及ADC0809的编程方法,对我们以后的工作和学习起到的积极的作用。