单片机控制直流电机论文.docx

上传人:b****1 文档编号:15065392 上传时间:2023-06-30 格式:DOCX 页数:31 大小:582.57KB
下载 相关 举报
单片机控制直流电机论文.docx_第1页
第1页 / 共31页
单片机控制直流电机论文.docx_第2页
第2页 / 共31页
单片机控制直流电机论文.docx_第3页
第3页 / 共31页
单片机控制直流电机论文.docx_第4页
第4页 / 共31页
单片机控制直流电机论文.docx_第5页
第5页 / 共31页
单片机控制直流电机论文.docx_第6页
第6页 / 共31页
单片机控制直流电机论文.docx_第7页
第7页 / 共31页
单片机控制直流电机论文.docx_第8页
第8页 / 共31页
单片机控制直流电机论文.docx_第9页
第9页 / 共31页
单片机控制直流电机论文.docx_第10页
第10页 / 共31页
单片机控制直流电机论文.docx_第11页
第11页 / 共31页
单片机控制直流电机论文.docx_第12页
第12页 / 共31页
单片机控制直流电机论文.docx_第13页
第13页 / 共31页
单片机控制直流电机论文.docx_第14页
第14页 / 共31页
单片机控制直流电机论文.docx_第15页
第15页 / 共31页
单片机控制直流电机论文.docx_第16页
第16页 / 共31页
单片机控制直流电机论文.docx_第17页
第17页 / 共31页
单片机控制直流电机论文.docx_第18页
第18页 / 共31页
单片机控制直流电机论文.docx_第19页
第19页 / 共31页
单片机控制直流电机论文.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机控制直流电机论文.docx

《单片机控制直流电机论文.docx》由会员分享,可在线阅读,更多相关《单片机控制直流电机论文.docx(31页珍藏版)》请在冰点文库上搜索。

单片机控制直流电机论文.docx

单片机控制直流电机论文

《汽车单片机技术》

课程结课设计报告

题目:

单片机控制直流电动机

专业汽车服务工程

班级2013

学号201301503018

姓名曾祥金

指导教师张琦

 

1.1设计要求:

(1)通过改变A/D输入端可变电阻来改变A/D的输入电压,D/A输入检测量大小,进而改变直流电机的转速。

(2)手动控制。

在键盘上设置两个按键—直流电动机加速键和直流电机减速键。

在手动状态下,每按一次键,电机的转速按照约定的速率改变。

1.2设计原理

直流电机是通过两个磁场的互作用产生旋转。

其结构如下页图所示,固定部分(定子)上,装设了一对直流励磁的静止的主磁极N和S,在旋转部分(转子)上装设电枢铁心。

定子与转子之间有一气隙。

在电枢铁心上放置了由A和X两根导体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形的铜片上,此铜片称为换向片。

换向片之间互相绝缘,由换向片构成的整体称为换向器。

换向器固定在转轴上,换向片与转轴之间亦互相绝缘。

在换向片上放置着一对固定不动的电刷B1和B2,当电枢旋转时,电枢线圈通过换向片和电刷与外电路接通。

定子通过永磁体或受激励电磁铁产生一个固定磁场,由于转子由一系列电磁体构成,当电流通过其中一个绕组时会产生一个磁场。

对有刷直流电机而言,转子上的换向器和定子的电刷在电机旋转时为每个绕组供给电能。

通电转子绕组与定子磁体有相反极性,因而相互吸引,使转子转动至与定子磁场对准的位置。

当转子到达对准位置时,电刷通过换向器为下一组绕组供电,从而使转子维持旋转运动。

直流电机的速度与施加的电压成正比,输出转矩则与电流成正比。

由于必须在工作期间改变直流电机的速度,直流电机的控制是一个较困难的问题。

直流电机高效运行的最常见方法是施加一个PWM(脉宽调制)方波,其占空比对应于所需速度。

电机起到一个低通滤波器作用,将PWM信号转换为有效直流电平。

特别是对于微处理器驱动的直流电机,由于PWM信号相对容易产生,这种驱动方式使用的更为广泛。

1.3整体设计

为了使用单片机对电动机进行控制,对单片机的基本要求应有足够快点速度;有捕捉功能。

总体设计方案如图所示

ADC0808

 

图1.1总体设计方案

键盘向单片机输入相应控制指令,由单片机通过P1口输出与转速相应的8位BCD编码,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。

可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P2口读取,再由P1口输出与转速相应的8位BCD编码。

电动机的运转状态则通过四位数码管显示出来。

电动机所处速度级以速度档级数显示。

正转时最高位显示“三”,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。

每次电动机启动后开始显示,停止时数码管显示出“0000”。

 

第二章系统硬件设计

根据总设计方案可知硬件电路是以单片机为核心辅以适当的电路以完成要求功能。

主要包括显示模块,A/D转换模块,D/A转换模块等模块。

2.1按键电路

2.1.1AT89C51

AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图2.1按键电路的设计

AT89C51提供以下标准功能:

4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

2.1.2按键电路

如图2.1所示,单片机的P2.1和P2.2口分别接一个按键用于控制电机。

当按下S1键时,电机转速提高,进入加速状态;当按下S2键时,电机转速减慢,进入减速状态。

通过S1,S2两个按键可以达到键盘控制电机的作用。

2.2显示电路

2.2.1MAX7219

MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。

其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。

只有一个外部寄存器用来设置各个LED的段电流。

MAX7221与SPI™、QSPI™以及MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。

一个方便的四线串行接口可以联接所有通用的微处理器。

每个数据可以寻址在更新时不需要改写所有的显示。

MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。

整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

功能特点:

1、10MHz连续串行口  

2、独立的LED段控制  

3、数字的译码与非译码选择  

4、150μA的低功耗关闭模式  

5、亮度的数字和模拟控制  

6、高电压中断显示  

7、共阴极LED显示驱动  

8、限制回转电流的段驱动来减少EMI(MAX7221)  

9、SPI,QSPI,MICROWIRE串行接口(MAX7221)  

10、24脚的DIP和SO封装

2.2.2工作原理

图2.2显示电路的设计

如图2.2所示,可变电阻接ADC0808转变成相应电压的数字信号,单片机通过P0口读取,再由P1口输出与转速相应的8位BCD编码到MAX7219。

经由MAX7219处理后通过四位数码管显示出来。

电动机所处速度级以速度档级数显示。

正转时最高位显示“三”,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。

每次电动机启动后开始显示,停止时数码管显示出“0000”。

2.3A/D转换模块

2.3.1ADC0808

ADC0808是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

是目前国内应用最广泛的8位通用A/D芯片。

主要特性

1)8路输入通道,8位A/D转换器,即分辨率为8位。

  

2)具有转换起停控制端。

  

3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)   

4)单个+5V电源供电。

  

5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

  

6)工作温度范围为-40~+85摄氏度。

  

7)低功耗,约15mW。

ADC0809的工作过程

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

  

转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。

数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。

为此可采用下述三种方式。

  

(1)定时传送方式  

对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。

例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。

可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。

  

(2)查询方式  

A/D转换芯片由表明转换完成的状态信号,例如ADC0808的EOC端。

因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。

  

(3)中断方式  

把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。

  

不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。

首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

图2.3AD转换电路的设计

2.3.2工作原理

如图2.3所示,外部电源通过滑动变阻器向ADC0808输入控制电压信号,经A/D处理后,输入到AT89C51中,交由AT89C51处理,进行下一步动作。

2.4D/A转换模块

2.4.1DAC0832

DAC0832是8分辨率的D/A转换集成芯片。

与微处理器完全兼容。

这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。

D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

主要特性参数

1.分辨率为8位;  

2.电流稳定时间1us;  

3.可单缓冲、双缓冲或直接数字输入;  

4.只需在满量程下调整其线性度;  

5.单一电源供电(+5V~+15V); 

6.低功耗,20mW。

DAC0832的工作方式  

DAC0832进行D/A转换,可以采用两种方法对数据进行锁存。

  

第一种方法是使输入寄存器工作在锁存状态,而DAC寄存器工作在直通状态。

具体地说,就是使和都为低电平,DAC寄存器的锁存选通端得不到有效电平而直通;此外,使输入寄存器的控制信号ILE处于高电平、处于低电平,这样,当端来一个负脉冲时,就可以完成1次转换。

  

第二种方法是使输入寄存器工作在直通状态,而DAC寄存器工作在锁存状态。

就是使和为低电平,LE为高电平,这样,输入寄存器的锁存选通信号处于无效状态而直通;当和端输入1个负脉冲时,使得DAC寄存器工作在锁存状态,提供锁存数据进行转换。

  

图2.4DA转换电路的设计

2.4.2工作原理

如上图2.4所示,电压信号输入后经过AD转换输入到AT89C51,由单片机通过P1口输出与转速相应的8位BCD编码,该编码通过DAC0832译成相应的模拟电压,经过信号放大实现电动机转向与转速的控制。

2.5总电路图

由各子模块设计给得出总硬件电路设计如下图2.5所示

图2.5硬件总电路图

第三章系统软件设计

本系统编程部分工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别、ADC0809读取和DAC0832输出以及数码管显示等部分的设计。

3.1系统主程序设计

N

Y

图3.1主程序流程图

主程序流程图如上图3.1所示。

系统初始化后,主程序通过调用各子程序完成预定动作,达到控制电机正反转及转速的目的。

4.1按键扫描程序

按键扫描程序采用中断方式,按下键,完成延时去抖动、键码识别、按键功能执行。

要实现按住加/减速键不放时恒加或恒减速直到放开停止,就需在判断是否松开该按键时,每进行一次增加/减少一定的占空比。

按键扫描程序流程图如下图3.2所示

N

、Y

 

 

图3.2按键扫描程序流程图

由流程图设计程序如下:

/****************按键扫描**************/

key()

{

if(P12==0)//如果按下,

{

while(!

P12)//去抖动

display();

k=~k;

}

if(P16==0)//启动

{

while(P16==0);

IE=0x8a;

}

if(P13==0)//加速

{

while(P13==0);

t++;

}

if(t>=5)

t=5;

if(P14==0)//减速

{

while(P14==0);

t--;

}

if(t<1)

t=1;

if(P15==0)//停止

{

while(P15==0);

EA=0;

P10=0;

P11=0;

}

}

4.2显示子程序

显示子程序用于处理DAC0832处理出来的8位BCD,利用数组方式定义显示缓存区,缓存区有8位,分别存放各个数码管要显示的值。

流程图如下图3.3所示

 

 

图3.3显示程序流程图

由流程图设计程序如下:

/***************数码管显示****************/

display()

{

uchari;

gw=x%10;//求速度个位值,送到个位显示缓冲区

sw=(x/10)%10;//求速度十位值,送到十位显示缓冲区

bw=(x/100)%10;//求速度百位值,送到百位显示缓冲区

qw=x/1000;//求速度千位值,送到千位显示缓冲区

for(i=0;i<4;)

{

P2=led[i];

if(i==0)//显示个位

{

P0=smg[gw];

delays();

}

elseif(i==1)//显示十位

{

P0=smg[sw];

delays();

}

elseif(i==2)//显示百位

{

P0=smg[bw];

delays();

}

elseif(i==3)//显示千位

{

if(k==0)//正转时显示"三"

{

P0=0x49;

delays();

}

else

{

P0=0x71;//反转时显示"F"

}

}

i++;

}

}

4.3定时中断处理程序

定时中断处理程序:

采用定时方式1,因为单片机使用12M晶振,可产生最高约为65.5ms的延时。

对定时器置初值B1E0H可定时20ms,即系统时钟精度可达0.02s。

当20ms定时时间到,定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time加1,这样,通过变量time可计算出系统的运行时间。

4.4A/D转换程序

首先判断A/D转换是否允许进行,当WR又低变高时AD开始转换,再读取转换数据结果,把数据存到ad_data中,完成A/D转换。

流程图如下图4.4所示

N

、Y

 

 

图3.4A/D转换程序流程图

由流程图设计程序如下:

ADC0809:

//启动AD转换子程序//////////////////////////////////////////////////////////

voidstart_adc0809(void)

{//adcs=0;//允许进行A/D转换

adwr=0;delay_50us

(2);adwr=1;//WR由低变高时,AD开始转换

//adcs=1;//停止AD转换

delay_50us(10);

}

//读A/D数据子程序///////////////////////////////////////

read_ad()

{uintad_data;

ad1_7=0xff;

//adcs=0;//允许读

//adrd=0;//读取转换数据结果

delay_50us(5);

ad_data=ad1_7;//把数据存到ad_data中

//adrd=1;adcs=1;//停止A/D读取

return(ad_data);

}

第四章系统仿真

4.1仿真步骤

加载目标代码文件打开元器件单片机属性窗口,在“ProgramFile”栏中添加上面编译好的目标代码文件“keil-12.hex”;在“ClockFrequency”栏中输入晶振频率为12MHz。

ADC0809的时钟信号设置为640kHz。

启动仿真如下页图所示,各按键功能如图中所注,LED中显示的为当前电压的数字信号值,即当前转速的档位(0-256),通过调整从滑动变阻器输出的电压值,可以观察到直流电机不同的转速。

通过按键加减速,改变电机转速,数码管显示的数字也相应改变。

结果如图4.1所示:

图4.1仿真结果

按下加速键后,电机转速加快,数码管显示的数值增大。

结果如图4.2所示:

图4.2仿真结果

4.2仿真结果分析

通过键盘向单片机输入相应控制指令,数码管显示出不同的数值。

当按下加速键时,数码管显示数值增大,说明电机转速增快;当按下减速键时,数码管显示数值减小,说明电机转速减慢。

键盘通过单片机实现了控制电机转速的功能。

当改变可变电阻阻值时,电机两端改变,数码管显示的数值也改变。

说明电阻改变可改变电机两端的电压,从而达到控制直流电机的目的,且当电压越大时,数码管显示数值越大,电机转速越快;电压越小时,数码管显示数值越小,电机转速越慢。

附录

附录一电路原理图及PCB板

附图1电路原理图

附图2PCB板

附录二系统程序

#include

#include"lcd1602.h"

#include"fonction.h"

ucharcount=0,count2=1;

ucharkey_num=0;

uintspeed[5];//

bitdirect_flag=1,run_flag=0;//方向标志运行标志

ucharpwmdata=50;

sbitright=P2^7;

sbitleft=P2^6;

//============================================

voiddsp()

{

if(run_flag){gotoxy(1,0);display_string("running");}//显示电机的转动去停止情况

else{gotoxy(1,0);display_string("stop");}//

if(direct_flag){gotoxy(12,0);display_string("->");}//显示电机的转动方向箭头方向

else{gotoxy(12,0);display_string("<-");}

//gotoxy(2,1);display_data(0,speed/300);display_data(1,speed/3%100);//显示当前速度转速

gotoxy(10,1);display_data(0,pwmdata/100);display_data(1,pwmdata%100);//pwmdata占空比

}

//===========================================

voidkey_set()

{

if(key_num!

=0)

{

switch(key_num)

{

case1:

run_flag=~run_flag;break;

case2:

direct_flag=1;break;

case3:

direct_flag=0;break;

case4:

{pwmdata++;

if(pwmdata>=100)pwmdata=100;

break;

}

case5:

{pwmdata--;

if(pwmdata>=100)pwmdata=0;

break;

}

}

}

key_num=0;//清零

}

//==========================================

voidmain()

{

//---硬件初始化-------------------------

EA=1;

ET0=1;

TMOD=0X51;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

//-------------------

TH1=0;

TL1=0;

TR1=1;

//.--------------------

EX0=1;

IT0=1;

//---控制端口初始化-------------

right=0;left=0;

init_lcd();

gotoxy(0,0);

display_string("stopdt:

->");//stop2running1

gotoxy(0,1);

display_string("000r/s050%");//211

//------------------

for(;;)

{

count2++;

if(count>100)count2=1;

if(run_flag==0){right=0;left=0;}

else{

if(count2<=pwmdata)

{

if(direct_flag){right=1;left=0;}

else{right=0;left=1;}

}

else{right=0;left=0;}

}

}

}

//********************************************************

voidinit_lcd(void)//初始化lcd1602

{

delay(15);

write_com(lcd_mode);

delay(20);

write_com(undisplay_cursor);

delay(20);

write_com(0x06);//letcursormove

delay(20);

write_com(0x01);//clearlcd

delay(20);

}

//********************************************************

voidgotoxy(ucharx,uchary)

{

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2