根据8086的直流电机的控制
单片机驱动直流电机原理

单片机驱动直流电机原理
单片机驱动直流电机的原理是利用单片机的输出口来控制直流电机的启停、速度和转向。
具体实现的步骤如下:
1. 连接硬件:将单片机的输出口与直流电机的驱动模块连接。
驱动模块通常由一对电晶体三极管(BJT)或金属氧化物半导
体场效应管(MOSFET)构成。
2. 编写驱动代码:使用单片机的编程语言(如C语言)编写
程序,配置输出口的工作模式和控制寄存器,以便控制电平。
根据需要,编写控制逻辑,来实现电机启停、调速和转向控制。
3. 控制电平信号:根据控制逻辑,通过单片机的输出口给驱动模块发送控制信号。
根据不同的控制信号,驱动模块会相应地控制电机的工作状态。
4. 控制电流:驱动模块通过调节输出口的电平,来控制电机所需的电流。
当输出口为高电平时,驱动模块会导通电源与电机之间的通路,使电流流过电机,从而启动电机;当输出口为低电平时,驱动模块会断开通路,停止电流流动,从而停止电机。
5. 控制转向:通过控制输出口的电平,驱动模块可以控制电机的转向。
具体方法是交换电机两个端子的接线,使其转向相反。
通过以上步骤,单片机可以有效地控制直流电机的启停、调速和转向,并实现各种应用需求。
8086微机应用DAC0832控制小直流电机转速的设计

课程设计任务书2009~2010学年第1学期一、设计题目8086微机应用DAC0832控制小直流电机转速的设计二、设计目的巩固“微机原理”课程学过的知识,加强理论与实践的联系。
通过本课程设计,使学生初步了解8086系列微机系统的硬件设备,学会8086系列编程指令的基本功能。
三、设计内容与要求1、内容采用8086CPU构建微机系统,扩展4K EPROM和2K静态RAM作为存储系统,采用最小模式,利用DAC0832,编制程序输出双极性模拟电压驱动小直流电机,使电机能以不同转速正反向运行。
2、设计要求(1)、查阅文献资料,了解DAC0832双极性电压输出控制原理,并在报告书中综述之。
(2)、设计系统的硬件连接原理图,对原理图加以说明。
(3)、画出程序框图,并说明。
(4)、编写应用程序,并注解程序。
(5)、提交课程设计说明书。
四、设计资料与参数1、电机转速由8个按钮开关以补码形式给定输入,并以发光二极管形式显示出来。
电机的转速变化范围为反向500 rpm~正向500rpm;2、DAC0832双极性电压输出控制原理,控制小直流电机以不同转速运行。
3、小直流电机额定电压为5V。
电源:5V由外部提供。
五、设计前准备DAC0832双极性电压输出控制原理自学DAC0832 是电流形式输出,当需要电压形式输出时,必须外接运算放大器。
根据输出电压的极性不同,DAC0832 又可分为单极性输出和双极性输出两种输出方式。
(1) 单极性输出。
DAC0832 的单极性输出电路如图一所示。
VREF 可以接±5V 或±10V 参考电压,当接+5V 时,输出电压范围是0V~-5V;当接-5V 时,输出电压范围是0V~+5V;当接+10V 时,输出电压范围是0V~-10V ;当接-10V 时,输出电压范围是0V~+10V。
若输入数字为0~255 ,则输出为:Uout =-VREF×D/256。
式中D为输入DAC0832的十进制数,因为转换结果Ioutl 接运算放大器的反相端,所以,式中有一个负号。
基于8086的小型直流电机闭环调速系统PID控制设计

微机原理课设报告目录一、需求分析与解决方案 (4)1.1 需求分析 (4)1.1.1实验题目 (4)1.1.2 实验题目问题分析 (4)1.2 解决问题的思路 (4)1.2.1 总体思路 (4)1.2.2 硬件设计器件选择 (4)1.2.3 软件整体思路 (6)二、硬件设计详解 (6)2.1 片选模块 (6)2.2 中断定时模块 (8)2.3 PWM发生模块 (9)2.4 调速模块 (10)2.5 测速模块 (11)2.6 参数显示模块 (11)2.7 电机驱动模块 (12)2.8 参数调整模块 (12)2.9串口通信模块 (13)三、软件设计详解 (13)3.1 下位机程序流程图 (13)3.2 下位机程序清单 (14)3.2.1宏定义 (14)3.2.2全局变量声明 (14)3.2.3 系统初始化 (15)3.2.4 主函数 (15)3.2.5 中断服务子程序 (16)3.2.6 显示子程序 (16)3.3 PID简介 (16)3.4 labview上位机制作 (17)3.5 辅助软件选择 (18)四、实验条件 (18)五、模块调试 (18)5.1 片选模块调试 (18)5.2 中断定时模块调试 (18)5.3 PWM发生模块调试 (19)5.4 调速模块调试 (20)5.5 测速模块调试 (20)5.6 参数显示模块调试 (21)5.7 电机驱动模块调试 (21)5.8 参数调整模块调试 (21)5.9 串口通信模块调试 (22)5.10 labview上位机的调试 (22)六、实验结果讨论及改进措施 (23)6.1实验结果讨论 (23)6.2 改进措施 (23)七、实验心得体会 (24)八、参考文献 (24)九、附录一(硬件电路图) (25)十、附录二(软件源代码) (25)小型直流电机闭环调速系统PID控制设计一、需求分析与解决方案1.1 需求分析1.1.1实验题目(1)、设计基于80x86微机接口控制电路;(2)、分别用C语言或汇编语言或VC++编程完成硬件接口功能设计;(3)、程序功能要求:电机速度由按键分段给定或电位器连续给定,计算机屏幕和数码管同步跟踪显示当前给定速度和电机实际运行速度,实现PID参数在线显示和修改。
直流电机调速程序c语言,以及电路

直流电机调速程序c语言,以及电路摘要:一、直流电机调速程序的概念和基本原理二、C 语言编写直流电机调速程序的步骤三、直流电机调速电路的设计和连接四、直流电机调速程序和电路的应用实例五、直流电机调速技术的发展趋势正文:一、直流电机调速程序的概念和基本原理直流电机调速程序是指通过改变电机供电电压或电流,从而实现直流电机转速调节的一种技术。
它主要基于电机转速与电压、电流之间的关系,通过改变电压或电流的大小,进而调整电机的转速。
这种技术广泛应用于各种电机控制系统中,具有重要的实用价值。
二、C 语言编写直流电机调速程序的步骤1.确定电机参数:首先需要了解电机的额定电压、额定电流、额定转速等参数。
这些参数可以从电机铭牌上获得,或者通过实验测量得到。
2.选择调速方式:直流电机调速方式主要有两种,一种是改变电压,另一种是改变电流。
可以根据实际需求和硬件条件选择合适的调速方式。
3.编写程序:根据所选调速方式,编写C 语言程序。
程序中需要包含对电机电压或电流的调节,以及对电机转速的检测和控制。
4.调试程序:将编写好的程序下载到控制器中,并连接到电机。
通过调整电压或电流,观察电机转速的变化,验证程序的正确性。
三、直流电机调速电路的设计和连接1.设计电路:根据所选调速方式,设计直流电机调速电路。
主要包括电源、电机、调速器等部分。
2.连接电路:将电源、电机、调速器等部分按照设计好的电路图连接起来。
注意接线顺序和极性,确保电路连接正确。
四、直流电机调速程序和电路的应用实例以改变电压调速为例,假设我们有一个额定电压为6V、额定电流为3A 的直流电机,可以通过以下步骤实现调速:1.根据电机参数,编写C 语言程序,实现对电机电压的调节。
2.设计电路,将电源、电机、调速器连接起来。
3.将编写好的程序下载到控制器中,并连接到电机。
4.通过调整控制器输出电压,观察电机转速的变化,实现对电机转速的控制。
五、直流电机调速技术的发展趋势随着科技的发展,直流电机调速技术也在不断进步。
直流电机的控制方法

直流电机的控制方法直流电机作为一种常见的电机类型,广泛应用于工业和家用电器中,其控制方法多种多样。
下面我将详细介绍主要的直流电机控制方法,包括直流电机的速度控制和转矩控制。
一、直流电机的速度控制方法:1. 电压控制法:直流电机的速度与电枢电压成正比,因此可以通过改变电枢电压来实现电机的速度控制。
常见的实现电压控制法的方法有以下几种:- 稳压变频:利用能量转换设备将电网的交流电转换为直流电,并通过逆变器将直流电转换为交流电,再将其输出到直流电机上。
通过改变逆变器的输出频率和电压大小来控制直流电机的转速。
- 变阻控制:通过改变电枢电路中的电阻来改变电枢电压,从而实现直流电机的速度控制。
这种方法简单易行,但效率较低,能耗较大。
- 自励电压反馈控制:利用自励电压的反馈信号将直流电机的转速控制在设定值范围内,采用PID控制或者模糊控制的方法进行调节。
2. 电流控制法:直流电机的速度与电枢电流成反比,因此可以通过改变电枢电流来实现电机的速度控制。
常见的实现电流控制法的方法有以下几种:- 稳流变频:通过改变逆变器输出电压的频率和幅值,从而控制直流电机的电流大小,从而达到控制速度的目的。
- 直流电机与电阻串联:通过在直流电机的电枢电路中串联一个可变电阻,调节电压大小以改变电枢电流,进而控制电机的速度。
- 直流电机与电压反馈:通过检测电机的电压,利用电压反馈控制方法调节输出的电流,从而实现速度控制。
二、直流电机的转矩控制方法:1. 电枢电压控制法:直流电机的转矩与电枢电压成正比,因此可以通过改变电枢电压来实现电机的转矩控制。
常见的实现电枢电压控制法的方法有以下几种:- 稳压变频:通过改变逆变器的输出频率和电压大小,从而控制直流电机的转矩。
- 电压比例控制:利用直流电机的转矩与电枢电压成正比的特性,在控制系统中设定一个电压转矩比例,根据系统的需求调节电枢电压。
2. 电流控制法:直流电机的转矩与电枢电流成正比,因此可以通过改变电枢电流来实现电机的转矩控制。
基于8086的计算机+步进电机控制

课程设计课程名称题目名称步进电机的角度控制(1)学生学院专业班级学号学生姓名指导教师2009年 6 月25日题目1:按要求控制步进电机,使步进电机每转360度停5秒;程序如下:#include<conio.h>#define CON 0x63#define PA 0x60#define PB 0x61#define PC 0x62#define uchar unsigned char#define uint unsigned intuchar step[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};void delay(uint zz){uint x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--);}void main(){int,I,j;outp(CON,0x81);while(1){for(j=0;j<12;j++){for(i=0;i<8;i++){outp(PC,step[i]);delay(5);}delay(200);}delay(5000);}}题目2:按要求实现键盘显示程序设计的程序如下:#include<conio.h>#define CON 0x63#define PA 0x60#define PB 0x61#define PC 0x62#define uchar unsigned char#define uint unsigned intuchar table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xfb}; uchar xuan[]={0x7f,0xbf,0xdf,0xef};uchar temp,flag,num,key;uchar jiou;uchar a1,a2,a3,a4;void delay(uint zz);void display(uchar w4,uchar w3,uchar w2,uchar w1);uchar keyscan();void main(){flag=0;jiou=0;outp(CON,0x81);while(1){display(a4,a3,a2,a1);key=keyscan();if(flag==1){flag=0;a4=a2;a3=a2;a2=a1;a1=key;}}}void display(uchar w4,uchar w3,uchar w2,uchar w1) {outp(PA,table[w1]);outp(PB,xuan[0]);delay(5);outp(PA,table[w2]);outp(PB,xuan[1]);delay(5);outp(PA,table[w3]);outp(PB,xuan[1]);delay(5);outp(PA,table[w4]);outp(PB,xuan[1]);delay(5);}uchar keyscan(){outp(PB,0xef);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){flag=1;temp=inp(PC);temp=temp&0x03;switch(temp){case 0x02:num=9;break;case 0x01:num=5;break;}while(temp!=0x03){outp(PB,0xef);temp=inp(PC);temp=temp&0x03;display(a4,a3,a2,a1);}}}outp(PB,0xdf);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){flag=1;temp=inp(PC);temp=temp&0x03;switch(temp){case 0x02:num=0;break;case 0x01:num=6;break;}while(temp!=0x03){outp(PB,0xdf);temp=inp(PC);temp=temp&0x03;display(a4,a3,a2,a1);}}}outp(PB,0xbf);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){flag=1;temp=inp(PC);temp=temp&0x03;switch(temp){case 0x02:num=1;break;case 0x01:num=7;break;}while(temp!=0x03){outp(PB,0xbf);temp=inp(PC);temp=temp&0x03;display(a4,a3,a2,a1);}}}outp(PB,0x7f);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){flag=1;temp=inp(PC);temp=temp&0x03;switch(temp){case 0x02:num=2;break;case 0x01:num=8;break;}while(temp!=0x03){outp(PB,0x7f);temp=inp(PC);temp=temp&0x03;display(a4,a3,a2,a1);}}}return num;}void delay(uint zz){uint x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--);}题目3:测试AD转换器的性能程序如下:#include<conio.h>#define CON 0x63#define PA 0x60#define PB 0x61#define PC 0x62#define uchar unsigned char#define uint unsigned intuchar table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xfb}; uchar xuan[]={0x7f,0xbf,0xdf,0xef};uchar temp,flag,num,key;uchar jiou;uchar a1,a2,a3,a4;void delay(uint zz);void display(uchar w4,uchar w3,uchar w2,uchar w1);void main(){outp(CON,0x81);while(1){uint dat;outp(0x00,0x0d);dat=inp(0x00);a3=dat/16;a4=dat%16;display(0,0,a3,a4);dat=inp(0x00);}}void display(uchar w4,uchar w3,uchar w2,uchar w1){outp(PA,table[w1]);outp(PB,xuan[0]);delay(5);outp(PA,table[w2]);outp(PB,xuan[1]);delay(5);outp(PA,table[w3]);outp(PB,xuan[1]);delay(5);outp(PA,table[w4]);outp(PB,xuan[1]);delay(5);}void delay(uint zz){uint x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--); }题目四:步进电机的角度控制(1)设计的程序如下:#include<conio.h>#define CON 0x63#define PA 0x60#define PB 0x61#define PC 0x62#define uchar unsigned char#define uint unsigned intuchar step[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};uchar table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xfb}; uchar xuan[]={0x7f,0xbf,0xdf,0xef};uchar temp,num,key;uchar jiou;int max;uchar set,clr,start;uchar ge,shi,bai;int ge1,shi1,bai1;int xianshi;int adc();void clear();void dianji(int degree);void delay(uint zz);void display(uchar w4,uchar w3,uchar w2,uchar w1);void keyscan();void main(){int tt,kk,chazhi;max=0;xianshi=0;tt=0;kk=0;chazhi=0;xianshi=0;jiou=0;ge=0;shi=0;bai=0;ge1=0;shi1=0;bai1=0;outp(CON,0x81);while(1){keyscan();if(set==1){ge=0;shi=0;bai=0;while(1){display(0,bai,shi,ge);keyscan();if(clr==1){clear();break;}if(start==1)break;}if(start==1){max=bai*100+shi*10+ge;while(clr!=1){kk=max/15*(adc())/0xff; //下一次的角度;tt=kk-(xianshi/15);//和上一次相差的度數;if(tt!=0)dianji(tt);keyscan();}clear();}}display(0,0,0,0);}}void display(uchar w4,uchar w3,uchar w2,uchar w1){bai1=xianshi/100;shi1=xianshi%100/10;ge1=xianshi%10;outp(PA,table[w1]);outp(PB,xuan[0]);delay(5);outp(PA,table[w2]);outp(PB,xuan[1]);delay(5);outp(PA,table[w3]);outp(PB,xuan[1]);delay(5);outp(PA,table[w4]);outp(PB,xuan[1]);delay(5);}void keyscan(){outp(PB,0xef);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){temp=inp(PC);temp=temp&0x03;switch(temp){case 0x02:set=1;break;case 0x01:break;}while(temp!=0x03){outp(PB,0xef);temp=inp(PC);temp=temp&0x03;display(0,bai,shi,ge);}}}outp(PB,0xdf);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){temp=inp(PC);temp=temp&0x03;if(set==1){switch(temp){case 0x02:clr=1;break;case 0x01:if(start==0){shi++;if(shi>9)shi=0;}break;}}while(temp!=0x03){outp(PB,0xdf);temp=inp(PC);temp=temp&0x03;display(0,bai,shi,ge);}}}outp(PB,0xbf);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){temp=inp(PC);temp=temp&0x03;if(set==1){switch(temp){case 0x02:if(start==0){ge++;if(ge>9)ge=0;}break;case 0x01:start=1;break;}}while(temp!=0x03){outp(PB,0xbf);temp=inp(PC);temp=temp&0x03;display(0,bai,shi,ge);}}}outp(PB,0x7f);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){delay(5);temp=inp(PC);temp=temp&0x03;while(temp!=0x03){temp=inp(PC);temp=temp&0x03;if(set==1){switch(temp){case 0x02:break;case 0x01:if(start==0){bai++;if(bai>9)bai=0;}break;}}while(temp!=0x03){outp(PB,0x7f);temp=inp(PC);temp=temp&0x03;display(0,bai,shi,ge);}}}}void dianji(int degree) //电机程序,精度为15度{int i,j,k,l;if(degree>0){for(i=degree;i>0;i--){if(jiou==0){for(j=0;j<4;j++){outp(PC,step[j]);display(0,bai1,shi1,ge1);}jiou=1;goto loop_1;}if(jiou==1){for(k=4;k<8;k++){outp(PC,step[k]);display(0,bai1,shi1,ge1);}jiou=0;goto loop_1;}loop_1: xianshi=xianshi+15;display(0,bai1,shi1,ge1);}}if(degree<0){for(i=-(degree);i>0;i--){if(jiou==0){for(j=7;j>3;j--){outp(PC,step[j]);display(0,bai1,shi1,ge1);}jiou=1;goto loop_2;}if(jiou==1){for(k=3;k>-1;k--){outp(PC,step[k]);display(0,bai1,shi1,ge1);}jiou=0;goto loop_2;}loop_2: xianshi=xianshi-15;display(0,bai1,shi1,ge1);}}}void clear(){int huiwei;huiwei=-xianshi;huiwei=huiwei/15;if(huiwei!=0)dianji(huiwei);ge=0;bai=0;shi=0;xianshi=0;start=0;set=0;clr=0;}int adc() //ad转换函数{uint dat;outp(0x00,0x0d);dat=inp(0x00);display(0,bai1,shi1,ge1);dat=inp(0x00);return dat;}void delay(uint zz){uint x,y;for(x=zz;x>0;x--)for(y=110;y>0;y--);}系统设计说明:此系统运行后,如果没有按set键,按其他键不起任何作用;当按下set后,可以由相应的个位键、十位键、百位键,以每按一次加一的形式输入任意三位数。
单片机直流电机控制

单片机直流电机控制直流电机是一种常见的电机类型,广泛应用于各种工业和消费电子设备中。
而单片机作为一种集成电路,可以通过编程控制直流电机的运转。
本文将介绍单片机直流电机控制的基本原理和实现方法。
一、直流电机的工作原理直流电机是一种将直流电能转化为机械能的电动机。
它由电枢、电磁铁和换向器组成。
电枢是直流电机的转子,由通电的线圈组成。
电磁铁则是直流电机的定子,也是由线圈组成。
换向器负责调整电流的流向,使电枢在不同的位置上受到不同的磁极引力,从而实现电机的运转。
二、单片机控制直流电机的方法单片机控制直流电机的基本原理是通过改变电机电源的电压和极性来控制电机的运转方向和速度。
具体的控制方法有以下几种:1. 接口电路控制法通过使用单片机的IO引脚和一些外部元件(如晶体管、继电器等),可以实现对电机的启动、停止和转向控制。
通过改变IO口的电平状态,控制外部元件的通断来控制电机的运转。
2. PWM控制法脉宽调制(PWM)是一种通过改变电源的占空比来控制电机转速的方法。
单片机可以产生一定频率的PWM信号,并通过控制占空比的大小来控制电机转速。
较大的占空比可以使电机产生较大的平均电压,从而提高电机的转速。
3. PID闭环控制法PID控制是一种根据反馈信号调整输出的控制方法。
通过接入编码器等反馈装置,单片机可以实时获取电机的转速反馈信号,并与设定值进行比较,通过调整PWM信号来控制电机的转速,使其达到设定值。
三、单片机直流电机控制的应用单片机直流电机控制技术在自动化控制系统中有着广泛的应用。
以下是一些常见的应用场景:1. 工业生产线中的自动化机械设备,如流水线、机械臂等,通过使用单片机直流电机控制技术可以实现对设备的精准控制和调节。
2. 智能家居中的窗帘、门锁等设备,可以通过单片机直流电机控制实现对它们的开闭和转动。
3. 机器人和智能车辆中的运动控制系统,通过单片机直流电机控制技术可以实现对机器人的移动和动作的精确控制。
单片机控制直流电机调速汇编

单片机控制直流电机调速汇编单片机是一种集成电路芯片,具有微处理器的所有功能,并可用于嵌入式系统中。
直流电机是一种常见的电动机,其转速与电压成正比。
通过单片机控制直流电机调速可以实现对电机转速的精确控制,广泛应用于机械、电子、自动化等领域。
单片机控制直流电机调速的基本原理是通过改变电压和脉宽调制(PWM)信号的占空比来控制直流电机的电压和转速。
实现这一控制的关键是编写相关的汇编程序。
编写汇编程序前,首先需要了解单片机的输入输出口、定时器和中断控制等相关知识。
使用合适的端口初始化函数,将所需的引脚配置为输出模式。
接下来,需要使用定时器来产生所需的PWM信号。
可以选择合适的定时器模式,并设置相关的定时器计数值和预分频系数,以得到所需的PWM频率和占空比。
通过改变PWM信号的占空比,可以控制直流电机的电压和转速。
占空比为高电平时间占总周期时间的比例。
通过改变占空比的大小,可以调整输出电压的大小,进而控制电机转速。
编写汇编程序时,可以使用定时器中断来控制PWM信号的占空比改变。
在中断服务子程序中,可以根据所需的转速和占空比设定,改变输出口的状态,从而改变PWM信号的占空比。
为了实现精确的调速控制,还可以在汇编程序中加入PID控制算法。
PID控制是一种经典的控制算法,可以根据实际转速和目标转速之间的差异,自动调整PWM信号的占空比,实现闭环控制。
在编写汇编程序时,需要仔细考虑程序执行的时间和顺序。
可以使用延时循环来控制程序的执行时间,以保证定时器和PWM信号的稳定性。
总之,单片机控制直流电机调速的汇编程序编写需要对单片机的输入输出口、定时器和中断控制等相关知识有一定的了解。
通过合理设置定时器和PWM信号的占空比,以及加入PID控制算法,可以实现精确的调速控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、直流电机控制的设计思路: (2)
二、直流电机控制的硬件框图: (2)
2.1并行I\O口输入、输出 (2)
2.2输出锁存 (3)
2.3电机驱动模块 (4)
2.4仿真模拟图 (5)
三、软件设计 (6)
3.1程序流程图 (6)
3.2程序代码 (7)
四、项目体会 (9)
一、直流电机控制的设计思路:
1)通过按键改变电动机的启动与停止,当启动后再由按键选择工作方式。
2)通过改变pwm的极性从而改变电机的转向,实现正反转。
3)可实现顺、逆旋转的直接切换,不用按下停止后再启动反向运转。
二、直流电机控制的硬件框图:
通过按钮来控制电机的顺、逆时针转,并且可以实现顺、逆旋转直接切换,无需中间停顿。
2.1并行I\O口输入、输出
采用8255A作为信号的输入与输出接口,使用前需设置芯片的控制
字来确定其工作方式,以及端口的使用。
本次采用的控制字为90H,即A组工作在方式0,作为输入接口,连接按钮,B组工作在方式0,作为输出接口连接电机驱动模块。
8255AI\O接口使用
2.2输出锁存
使用常见的74HC373芯片来实现输出锁存,由于按钮具有复位功能,当按钮按下后的一瞬间才产生输入,所以需要输出锁存来保持电机的连续运转,本次采用两块74HC373,一块与8255A的A0、A1口连接作为电机运行信号的控制,另一块与3-8译码器74H138相连,接入8255A的片选信号输入端,选中8255A运行。
74H373接口使用
2.3电机驱动模块
通过对IN1、IN2的状态改变来控制L293D芯片的输出,从而实现电机的顺、逆时针转动
电机驱动模块
2.4仿真模拟图
三、软件设计
3.1程序流程图
当按下按键时,检测A口是否为01H,若是即跳转到子程序MOT1,实现电机顺时针旋转,否则检测A口是否为02H,若是即跳转到子程序MOT2,实现电机逆时针旋转,否则检测A口是否为04H,若是即跳转到子程序MOT3,使电机停止转动。
再进入循环。
3.2程序代码
CODE SEGMENT 'CODE'
ASSUME CS:CODE,SS:STACK,DS:DATA ;定义数据段
IOCON EQU 8006H
IOA EQU 8000H
IOB
EQU 8002H 定义端口的地址 IOC EQU 8004H
START:
MOV AX, DA TA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV AX, TOP1
MOV SP, AX
MOV AL,90H A 口为输入,B 口为输出 MOV DX,IOCON 控制字设置,AB 端口为“0”方式下,控制字10010000B OUT DX,AL NOP NOP TEST_BU:
MOV DX,IOA IN AL,DX 检测总线系统 MOV DX,IOA IN AL,DX NOP test_1: TEST AL,01H
JE MOT1 test_2: TEST AL,02H
JE MOT2 test_3: TEST AL,04H JE MOT3 JMP TEST_BU MOT1:
MOV AL,0FEH
MOV DX,IOB 往B 端口中输出1111 1110B=0FEH 使电机顺时针旋转
OUT DX,AL MOV DX,IOA IN AL,DX ;从A 口读入数据 TEST AL,02H ;测试是否等于0000 0010即按下逆时针按钮 JE MOT2 ;如果是按下逆时针按钮,则跳转到MOT2 TEST AL,04H JE MOT3 JMP MOT1 MOT2:
MOV AL,0FDH
MOV DX,IOB
向B
端口中输入1111 1101B=0FDH 使电机逆时针旋转 OUT DX,AL MOV DX,IOA IN AL,DX ;从A 口读入数据 TEST AL,01H 测试A 口数据是否为01H ,若是则跳到 JE MOT1 MOT1顺时针旋转模式 TEST AL,04H 测试A 口数据是否为04H, JE MOT3 若是则跳转到MOT3停止模式
JMP MOT2 ;否则跳转到MOT2逆时针旋转模式 MOT3:
MOV AL,0FFH
MOV DX,IOB 向B 端口输出11111111B=0FFH 使电机停止 OUT DX,AL MOV DX,IOA
IN AL,DX TEST AL,01H JE MOT1
TEST AL,02H JE MOT2
JMP MOT3
CODE ENDS
STACK SEGMENT 'STACK' STA DB 100 DUP(?) TOP1 EQU LENGTH STA STACK ENDS DA TA SEGMENT 'DATA' DA TA ENDS
END START
四、项目体会
微机原理与接口技术的课程历时一个学期,通过自己编写、运行程序,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
这次的课程设计,加深了我们对初学的汇编语言指令的熟悉和理解,汇编语言直接描述机器指令,比机器指令容易记忆和理解。
通过学习和使用汇编语言,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。
不仅巩固了书本所学的知识,还具有一定的灵活性,发挥了我们的创造才能。
实验是使用8086微处理器芯片及其外设接口8255A,74HC373(373为三态输出的8D透明锁存器)、74HC138(3线-8线译码器)加深了我们对硬件的熟悉,锻炼了动手能力,发挥创造才能。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得
不够牢固。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在自己的思考以及和同学的讨论中,终于迎刃而解。