单片机课程设计报告.docx
《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告
课
程
设
计
报
告
题目:
直流电动机转速控制系统
2010.7.13
目录
1.前言…………………………………………………….……….1
2.控制方案…………………………………………………………2
.1A/D转换模块的方案选择.......................4
.2控制方法的方案选择..........................4
.3显示模块的方案选择...........................5
3.电动机控制系统软硬件分析设计……………………………....6
.1整体设计…………………………………………………...6
.2硬件设计分析………………………………………………7
.3软件设计及分析……………………………………………9
.4程序设计如下………………………………………….….10
4.系统调试………………………………………………………...15
.1硬件调试…………………………………………………..15
.2软件调试…………………………………………………..15
.3软硬联调…………………………………………………..15
.4测试结果……………………………………………………16
.5结果分析……………………………………………………17
5.课设心得体会……………………………………………….....19
一、前言
单片机全名为单片微型计算机,是微型计算机家族中的一个分类,是将CPU、存储器、总线、I/O接口电路集成在一片超大规模集成电路芯片上。
而本实验要做的是单片机控制LED和直流电动机。
LED的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
早期直流电动机的控制均以模拟电路为基础。
采用运算放大器,非线性集成电路以及少数的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活,测试困难,阻碍了直流电动机技术的发展和应用范围的推广。
随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能。
采用单片机构成的控制,可以节约人力资源和降低系统成本,从而有效的提高工作效率。
本系统以8051单片机为核心,电机转速可预置,电机调速范围为250cm/s~360cm/s。
可显示设定转速值、实测转速值。
该系统主要由单片机最小系统、A/D转换芯片ADC0809、D/A转换芯片DAC0832及LED数码管组成。
系统通过A/D转换设定转速值,通过D/A转换控制电机转速,通过霍尔元件对电机转速进行测量,然后将测量值和设定值在LED上显示出来。
本系统具有调整电路简单、调整速度快、可实时测量电机转速等优点。
转速是工程上一个常用的参数,旋转体的转速常以每分钟转数来表示。
传统的以模拟量作为速度反馈参数的系统,由于受非线性、温度变化和元件老化等因素的影响,很难满足控制过程的快速性和准确性要求。
本文利用C8051F310系列单片机,将控制电机的模拟倍号量转换为以数字信号量的形式,最后再将反映电机速度的脉冲信号反馈给单片机处理,并通过LED数码管实时监控电机的转速。
二、控制方案
1A/D转换模块的方案选择
设计中用A/D转换器把模拟量转换成数字量,以便于计算机进行处理。
A/D转换器的种类很多,但目前应用较广泛的是逐次比较式转换器,如ADC0809、AD574。
方案一:
ADC0809是8路模拟输入、8位数字量输出的A/D转换器,ADC0809是采用逐次比较的方法完成A/D转换的,由单一的+5V电源供电,片内带有锁存功能的8路选1的模拟开关,由本身的C、B、A引脚的编码来决定所选的通道,0809完成1次转换需100
左右,输出具有TTL三态锁存缓冲器,可直接连到AT89C51单片机的数据总线上,通过适当的外接电路,0809可完成对0~5V模拟信号的转换。
方案二:
AD574是12位逐次比较型A/D转换器,最多可输出12位A/D转换数据,转换时间为25
,转换精度为0.05%,内部有三态输出缓冲电路,可直接与各种典型的8位或16位的微处理器相连,而无须附加逻辑接口电路,且能与CMOS及TTL兼容,可实现输入信号-5~+5V或-10~+10V的转换。
但其价格比ADC0809稍贵。
比较以上两种方案,设计中8位转换就已足够,所以设计中选用ADC0809。
2控制方法的方案选择
方案一:
采用D/A转换的方法。
D/A转换的基本原理是把数字量的每一位代码按权大小转换成模拟分量,然后根据叠加原理将各代码对应的模拟输出分量相加。
因此,D/A转换过程主要是由解码网络实现,而且是并行工作的。
也就是说,D/A转换器是并行输入数字量的,每位代码也是同时被转换成模拟量的。
这种转换方式的速度快,一般为微秒级,有的可达几十毫微秒。
方案二:
采用单片机产生PWM波,控制开关的导通与截止。
根据A/D后的反馈电压改变占空比,使输出电压稳定在设定值。
该方案主要由软件实现,控制算法比较复杂,速度慢,输出电压稳定性不好,实现起来比较复杂。
鉴于上面分析,选用方案一。
2.3显示模块的方案选择
在系统运行过程中,需要对设定的数值和转速实际值做必要的显
示。
经考虑,有以下两种显示方案。
方案一:
使用液晶显示屏显示。
液晶显示屏(LCD)具有轻薄短
小、低耗电量、无辐射危险、平面直角显示以及影象稳定不闪烁等优
势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。
但
由于只需显示设定值和实际转速这样的数字,信息量比较少,且由于
液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,
编程工作量大,控制器的资源占用较多,其成本也偏高。
在使用时,
不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。
方案二:
使用传统的数码管显示。
数码管具有:
低能耗、低损耗、
低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界
环境要求低,易于维护,同时其精度比较高,准确可靠,操作简单。
数码管是采用BCD编码显示数字,程序编译容易,资源占用较少。
根据以上论述,采用方案二。
在本系统中,采用数码管的动态显示,节省单片机的内部资源。
三、电动机控制系统软硬件分析设计
1.整体设计
分析:
通过A/D转换给出设定值,设定值由单片机处理后,通过D/A转换给电机,控制电机旋转。
由霍尔开关传送的脉冲信号输入单片机,通过单片机的计数器进行计数,再将结果经过处理,得出转速。
设定值和测量值经过LED数码管进行显示(重要的人机交互界面)。
2.硬件设计分析
核心设计
该电路的工作原理如下:
通过调节电位器来控制电机的转速,即通过调节电位器RP改变输入到端口P2.2的模拟电压,再通过C8051F310单片机内部的A/D转换,并转换成一定占空比的PWM信号,从端口P2.0输出HD74HC04P进行反相,以增大PWM信号的驱动能力,然后再输出到电机驱动芯片L298来控制电机的转速,之后再利用光电传感器和码盘来采集电机转动时产生的脉冲信号,但该波形是连续的模拟信号,单片机不易处理,故再将4运放集成电路LM324接成比较器的功能,然后将这组脉冲波形输出到LM324的2脚,再通过调节电位器RP2,就可以得到一组单片机容易处理的、且能反映电机转速的方波信号PWM_back,再将PWM_back输入到端口P2.1,并利用定时器0的计数功能。
来计算端口P2.1在采样周期T内的脉冲个数。
最后再通过公式,求出电机的转速并通过L数码管实时地显示出来。
D/A转换模块的硬件原理图。
LED显示模块的硬件原理图
3.软件设计及分析
本系统的软件设计比较简单,主要有A/D、D/A、显示及测速这四个模块。
程序的流程图如图下所示。
每次A/D转换结束后,寄存器ADCOL和ADCOH中保存ADC转换结果的高字节和低字节。
将ADOUST位置1,使转换后的转换数据在寄存器对ADCOH:
ADCOL中以左对齐方式保存。
当工作在单端方式时,可转换的模拟电压范围为:
O-VREF1023/1024,其中VREF=3.3V,然后,再将保存在寄存器ADCOH中的数据赋给PCA的16位计数器/定时器的高字节PCAOH,即通过捕捉/比较模块的高字节PCAOCPHO来获得一定的占空比PWM波。
并利用定时器l的定时功能来产生中断,假设定时时间为t。
再利用定时器0的计数功能来计算外部电机码盘产生的方波数,即计算在t时间内,来自端口P2.3的PWM-back信号的脉冲数。
算脉冲次数的范围为:
O~65535个,并将计数结果保存在高字节THO和低字节TLO中。
计
引入中断,当定时器l溢出时,单片机产生中断,定时器1溢出标志TF1会被自动清O。
若取样时间为定时时间的k倍,则当单片机完成k次中断后,再去读取定时器0的THO和TLO,并计算电机1min的转速,将电机转速显示到数码管,并再重新初始化定时器Tl和TO[3]。
4.用单片机控制LED显示直流电机转速编写程序如下:
#include
//端口地址
sbitP1_0=P1^0;
xdataunsignedcharoutseg_at_0x8004;/*段码输入*/
xdataunsignedcharoutbit_at_0x8002;/*位码输入*/
xdataunsignedcharadport_at_0x9000;/*A/D转换*/
xdataunsignedchardaport_at_0xa000;/*D/A转换*/
//全局变量
unsignedcharsetbuf;//AD设定电压值
unsignedcharsetspeed;//设定转速值
unsignedchardaout,dabuf;//电压输出值
unsignedcharspeedbuf;//转速值
unsignedchartimercount;//软定时值
unsignedcharledbuf[]={8,8,8,8,8,8};//LED缓存
//段码表00-0F
unsignedcharcodeledmap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//子程序
voidinit();//初始化
voiddisplay();//显示
voiddelay(unsignedchartime);//延时,1毫秒
voidadc_sub();//AD转换
voidda_drive();//DA驱动电机
voidcomp();//比较
voidset_format();//设定值转换,存储
voidspeed_format();//转速值转换,存储
//Timer0中断子程序
voidtimer0_isr()interrupt1using0
{
timercount--;
TH0=0X3C;
TL0=0XB0;
}
//主程序
voidmain()
{
init();//初始化
while
(1)
{
adc_sub();//AD转换
comp();//转为设定转速值
if(timercount==0)//读取转速值
{
TR0=0;//关闭计数
TR1=0;
timercount=20;
speedbuf=TL1;
if(speedbufdaout=daout+1*(setspeed-speedbuf);
elseif(speedbuf>setspeed)
daout=daout-1*(speedbuf-setspeed);
TL1=0;
TR0=1;//开启计数
TR1=1;
}
da_drive();//DA驱动电机
set_format();//设定值格式转换
speed_format();//测速值格式转换
display();//显示
}
}
//初始化
voidinit()
{
//初始化数值
setbuf=0;
setspeed=0;
speedbuf=0;
daout=0;
dabuf=0;
//DA初始化,电机停止运转;初始化AD转换标志
P1_0=1;
daport=0;
//定时器初始化
TMOD=0X61;//定时器0工作方式1,计数器1工作方式2
timercount=10;//定时1s
TH0=0X3C;//定时器初值100ms
TL0=0X0B0;
TH1=0X00;//计数器初值0
TL1=0X00;
//启动定时器
ET0=1;//开定时器中断
EA=1;//开总中断
TR0=1;//启动定时器0
TR1=1;//启动计数器1
}
//AD转换
voidadc_sub()
{
adport=0x00;//AD通道0
while(P1_0==1);//等待转换结束
setbuf=adport;//读取转换值
}
//DA转换,驱动电机
voidda_drive()
{
daport=daout;
}
//比较
voidcomp()
{
if(setbuf<0x40)//根据电压值设定转速
setspeed=40;
elseif(setbuf<0x80)
setspeed=50;
elseif(setbuf<0xb0)
setspeed=60;
else
setspeed=75;
}
//设定值转换
voidset_format()
{
ledbuf[0]=setspeed/100;//百位
ledbuf[1]=(setspeed%100)/10;//十位
ledbuf[2]=setspeed%10;//个位
}
//转速值转换
voidspeed_format()
{
ledbuf[3]=speedbuf/100;//百位
ledbuf[4]=(speedbuf%100)/10;//十位
ledbuf[5]=speedbuf%10;//个位
}
//显示
voiddisplay()
{
unsignedchari,ledbit;
ledbit=0x20;//位码移位,从左到右显示
for(i=0;i<6;i++)
{
outbit=ledbit;
outseg=ledmap[ledbuf[i]];
delay
(1);
ledbit>>=1;
}
}
//延时
voiddelay(unsignedchart)
{unsignedchari=0;
unsignedcharj=0;
for(j=0;jfor(i=0;i<200;i++);
}
在本次课设所用程序中需要使用到速度测取和计算问题。
因此为了能更加准确测得直流电动机的旋转速度,特意运用了我们所了解数字测速法来换算速度。
在此对在这几种测速方法进行比较。
这样就可以得到此次课程设计所要选择的最佳方案。
四、系统调试
调试过程共分三部分:
硬件调试,软件调试,软硬件联调。
.1硬件调试:
由于该系统的速度控制主要由A/D转换及D/A转换控制,单片机主要起数据处理、显示等一些辅助作用,再者根据理论值进行元器件的选择由于精度和干扰的影响,往往得到的结果和理论分析值又有一定的偏差,所以硬件调试难度很大。
.2软件调试:
本系统的软件程序完全由C51编写,C语言效率高,但同时也存在一些缺点,比如严格定时比较困难。
在调试过程中采取的是自上至下的调试方法,单独调试好每一个模块,然后再联结成一个完整的系统调试。
4.3软硬联调:
由于本系统的软硬件联系不是很紧密,一般是软件D/A输出后就能直接和硬件相联进行工作,因此在软硬件通调的情况下,系统的软硬件联调较简单。
4.4测试结果
系统对题目的完成情况
要求
实现
直流电机按照给定转速运行
完成
给定值变化,电机转速随之变化
完成
显示给定值和实测值
完成
4.5结果分析
各项结果都符合系统指标,产生误差的原因包括:
两个不同地之间的干扰,器件灵敏度等。
五、调试中的问题并解决
任何事情都不太可能风雨无阻,我也不例外在此次课程设计中同样遇到了很多的困难。
第一就是硬件的工作原理不知道,只能通过自己去查阅相关的资料,只有充分理解硬件是怎么工作才能进行编写相关的程序。
对于如何进行LED的初始化,如何使之初显为零,经过认真的思考终于解决了问题,在程序中加以修改就可以了。
课设心得体会
这次课设给了我很多收获,一定要认真对待问题并及时解决。
我明白有理论基础也不见得会很好的用在实践上,只有通过自己反复的琢磨进一步的理解并加于运用才是事实。
其次就是当遇到困能时还要靠自己去解决去探索。
因为我在做课设之初,总想别人帮我出个法案,别人给我指一条道路,但到最后真正做的时候才发现,别人的有些思路不适合自己,只有自己的东西才能运用起来得心应手。
最后想解决问题就必须要有耐心、细心、专心及谦虚等综合素质。
课程设计是从三个题目中任选一个,我选择了直流电动机转速控制系统,因为我学的方向就是电机控制系统,在整个电气自动化专业只有很少的人选择了这个方向,我希望我可以学好这个专业。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在这次课程设计中又让我体会到了合作与团结的力量,团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的。
通过这两周的实习我深刻体会到认真对待一件事的重要性,感谢老师对我们的认真指导和耐心检查。
老师的认真对待使我自觉端正了学习的态度。