课程设计实验报告Word格式文档下载.docx
- 文档编号:6526952
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:14
- 大小:119.33KB
课程设计实验报告Word格式文档下载.docx
《课程设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计实验报告Word格式文档下载.docx(14页珍藏版)》请在冰点文库上搜索。
系统硬件部分包含输入模块、显示模块、控制模块、测速模块等。
在硬件搭建前,先通过ProteusPro7.5进行硬件仿真实现。
1.时钟电路
系统采用12M晶振与两个30pF电容组成震荡电路,接STC89C52的XTAL1与XTAL2引脚,为微控制器提供时钟源
2.按键电路
四个按键分别控制电机的不同转速,即控制PWM波高电平的占空比,以实现电机的速度控制,采用开环控制方法,不是十分精确,但控制简单,易实现,代码编写简单
3.显示部分
系统采用4位共阴极数码管实现转速显示。
数码管的位选端1~4分别接STC89C52的P2.0~P2.3管脚,端选段A~G与DP分别接STC89C52的P0.0~P0.7管脚。
需要说明的是:
实际焊接电路时,数码管的位选端需要焊接三极管,否则数码管显示亮度将会非常暗。
4.电机控制与驱动部分
电机的运行通过PWM波控制。
PWM波通过STC89C52的P2.4口输出。
说明:
测速部分用的是Motro-encode电机,实际用ST151实现测速,焊接电路如下图:
其中R1=510Ω,R2=4.7KΩ
ST内部电路:
5.其他电路
复位电路如下所示:
完整仿真电路图:
第四章软件部分设计
1.开发环境
系统软件采用Keil集成开发环境开发
程序代码如下(带注释):
#include<
reg51.h>
sbitP2_0=P2^0;
//数码管选定位
sbitP2_1=P2^1;
sbitP2_2=P2^2;
sbitP2_3=P2^3;
sbitP2_4=P2^4;
//电机控制位
sbitkeysp0=P1^0;
//电机转速为0的控制键
sbitkeysp30=P1^1;
//电机转速为30的控制键
sbitkeysp60=P1^2;
//电机转速为60的控制键
sbitkeysp100=P1^3;
//电机转速为100的控制键
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedintmotorspeed;
//电机转速
unsignedcharGE,SHI,BAI,QIAN;
//电机转速motorspeed的各个位
unsignedintcounter=0;
//光电传感器脉冲数
unsignedintpwm;
//pwm占空比
unsignedintmid;
//占空比设置值
unsignedintcalsp;
//设定多长时间计算一次速度
voiddisplay();
//数码管显示电机速度
voiddelay();
//延迟函数
voidcontrolpwm();
//控制电机占空比
voidcalspeed();
//计算电机速度,放于motorspeed变量中
voidkeyscan();
//按键扫描
voidmain()
{
P2=P2&
0x0f;
mid=0;
EA=1;
//开启总中断
EX0=1;
//开启外部中断0
IT0=1;
//设置成下降沿触发方式
TMOD=0x01;
//设置定时器0为模式1,即16位计数模式
TH0=(65536-10000)/256;
//计数时间为10ms
TL0=(65536-10000)%256;
ET0=1;
//开启定时器0中断
TR0=1;
//启动定时器0
while
(1)
{
keyscan();
display();
controlpwm();
calspeed();
}
}
voidkeyscan()//键盘扫描
if(keysp0==0)
delay();
//延迟防止抖动
if(keysp0==0)
mid=0;
if(keysp30==0)
if(keysp30==0)
mid=1;
if(keysp60==0)
if(keysp60==0)
mid=3;
if(keysp100==0)
if(keysp100==0)
mid=5;
}
voidcalspeed()
if(calsp>
=100)//100*10ms=1s计算一次电机转速
motorspeed=counter/3;
//转的圈数除以时间
counter=0;
//清零脉冲数
calsp=0;
//清零标志
voidcontrolpwm()
if(pwm>
=0&
&
pwm<
mid)
P2_4=1;
//电机加速
elseif(pwm>
=mid&
10)
P2_4=0;
//电机不加速
elsepwm=0;
void_TIMER0()interrupt1
//重新装入初值,计数时间为10ms
pwm++;
calsp++;
void_INT0()interrupt0
counter++;
//接受脉冲数
voiddisplay()//数码管显示函数
GE=motorspeed%10;
SHI=motorspeed/10%10;
BAI=motorspeed/100%10;
QIAN=motorspeed/1000%10;
P2_0=0;
P0=table[QIAN];
delay();
P0=0xff;
P2_0=1;
P2_1=0;
P0=table[BAI];
P2_1=1;
P2_2=0;
P0=table[SHI];
P2_2=1;
P2_3=0;
P0=table[GE];
P2_3=1;
voiddelay()//延迟函数
unsignedchari=10;
while(i--)
;
第五章系统测试
测试方案:
测试包含仿真测试和硬件测试两个部分。
仿真测试指使用ProteusPro7.5对系统进行仿真测试。
主要测试系统电路的设计和验证程序逻辑的正确性。
硬件测试指系统搭建后对硬件电气性能的测试。
主要测试各功能的完整性可靠性,以及系统电气性能的稳定性。
测试工具为示波器万用表等。
仿真测试结果:
真测试中,系统运行正常,程序逻辑正确。
按键输入正常、数码管显示正确。
P2.4管脚间输出PWM波正常。
硬件测试结果:
系统硬件搭建完毕后,进行硬件测试。
系统加电后,振荡电路正常起振,STC89C52在时钟源电路的驱动下运行正常。
系统可在复位电路的作用下正常复位。
系统按键输入正常,并能够正确消除抖动。
系统PWM波输出正常。
将示波器接STC89C52的P2.4管脚,可观察到峰峰值5V左右的方波,频率与调速要求一致。
ST151传感器测量正常。
数码管转速显示正常,数码管可正确显示并正确显示电机转速。
第六章实验总结
这次课程设计我主要负责硬件方面,从刚开始到图书馆查资料、上网查资料、软件仿真、再到后来的硬件焊接,整个过程下来感觉还是挺不容易的。
到最后成功的完成了设计,还是有点成就感的。
在整个过程中学到了很多东西,更加巩固了单片机方面的知识,掌握了protues,keil等软件的使用。
熟悉了硬件方面测试,焊接等知识,回想这次实习,还是有很大收获的。
对以后学习有很大的帮助。
通过这次课设,我了解了直流电机调速系统,熟悉了单片机在控制系统的应用,掌握了Proteus和keil环境和应用。
实际硬件做出来后效果和仿真的相差甚远,经过反复的检查,我们发现我们的程序效率太差,其运行时间比设定的计时还要长,以至于占空比的调节范围太小,经多次调试最终的效果还是比较理想,当然,我们做的还有不足之处,比如说:
测速模块,准确度不太高,而且数码管的显示总是不稳定(+/-20震荡)。
总之,通过这次课设,我觉得对待知识一定要严谨认真,细微之处见水平
此次课程设计使用80C51作为核心,在十分有限的性能和硬件资源上实现一定的功能,虽然是一个十分简单的系统,但很好的体现了对嵌入式工程师的要求,也纠正了我们以往思维的很多错误,让我们认识到嵌入式系统开发的关键正是在有限的成本和硬件资源下实现所需的功能,更加扎实了我们的设计功底。
通过这次课程设计,我对51单片机的编程方法以及流程有了一个更加深刻的认识,学会了使用proteus设计仿真电路。
在设计电路过程中,我学会了三极管用作开关时的接法,以及共阴共阳四位一体数码管的接法有了一个新的认识。
此外,我还对ST151光电传感器的内部构造和原理,以及电机测速方法有了一个初步的认识。
总之,通过这次课程设计,我无论在软件还是硬件方面都有很大的收获。
附录1人员分工情况:
硬件搭建(仿真及焊接)
软件编写
报告撰写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)