步进电机实验微机原理
- 格式: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.为什么要使用驱动器来控制步进电机?答:步进电机的控制需要精确的脉冲信号来实现转动控制,而微型计算机无法直接提供这种精确的信号。
大连理工大学本科设计报告(计算机原理接口实验综合设计)题目:步进电机控制系统设计课程名称:计算机原理实验学院(系):电信专业:自动化班级:电自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的编程方法,对我们以后的工作和学习起到的积极的作用。