大连理工大学本科实验报告题目:基于AT89CS51单片机的直流电机控制设计课程名称:《电子工程训练》学院(系):电子信息和电气工程学部专业:自动化班级:电自1102学号:学生姓名:成绩:2014年11 月14日电子安装实验室安全守则成绩评定电子安装实验室安全守则1、每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照安全规范进行实验,确保实验安全;2、桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面;3、电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,立即找老师进行安全处理;4、电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回烙铁架中,以免烫伤物品;5、实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必须冷却后再放入抽屉中;6、焊锡中含铅,不要含在口中,实验结束后要洗手;7、稳压电源在使用前,应先调好要使用的电压,再进行线路连接,并确保连接的极性正确;8、抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电;9、实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物品整理好。
题目:1 设计要求1)实现直流9V电源到5V输出的转换。
2)设计单片机最小系统。
3)用单片机控制直流电机多档调速、正反转和停止。
4)利用数码管输出显示电机转动的档位和正反转标志。
5)采用光敏电阻控制,模拟白天电机正常工作,晚上停止工作。
6)设计LM386的功放系统。
2 设计分析及系统方案设计1)方案设计总体框图:2)方案设计:(1)利用芯片LM7805实现制作线性稳压电源,输入电压应大于7V,以保证输出电压可以达到5V。
外电源9v 的交流电源通过桥式整流,加入相应的滤波电路以减少文波。
避免由于器材的选择使得输入电压反向后烧坏原件。
(2)单片机最小系统采用AT89S51单片机为核心,外接12MHz晶振作为系统时钟,同时加入手动复位按键,以便单片机手动复位。
(3)通过单片机引脚输出的不同来控制电机转动。
选用P2^6和P1^7作为电机控制引脚,输出不同占空比的PWM波来实现电机调速,输出极性的改变来实现电机正转反转。
(4)利用四位一体数码管输出显示电机的状态,通过单片机四个引脚选通不同位的数码管以实现数据的输出显示。
(5)Lm386功放系统的设计:Low V oltage Audio Power Amplifier .Lm386 is a power amplifier designed for use in low voltage consumer application.The gain is internally set to 20 to keep external part count low.(6)光敏二极管:利用光敏二级管在不同光照条件下的阻值变化实现高低电平的输出控制。
(7)设计中用到的元件:STC89C52、晶振(12MHz)、7805、四位一体数码管、小按键、三极管、二极管、电容、电阻等。
2)背景知识介绍:本设计的主要思想为利用PWM控制占空比从而达到改变电机速度,利用H桥来实现电机的驱动,引脚输出1和0实现电机的转动,通过控制输出1和0的引脚不同来实现电机的正反转。
H桥通过控制斜对角的两个三极管同时导通,从而使得电机转动,通过控制两对不同对角的三极管来实现电机的正反转。
四位一体数码管利用四个选通端来控制不同位置的数码管输出显示,公用一组数据线。
选用单片机四个引脚控制选通端,利用一个八位口来实现数据输出显示。
3 各功能模块硬件电路设计1)电源电路:利用LM7805来实现电压的转换。
在输入端由于输入直流电压存在极性不确定的情况,选用桥式整流避免输入电压的极性不同队之后电路的影响。
7805两侧加入两个电容用于滤波,避免杂波对之后单片机系统的影响。
当输出电压不足5V时,可在输入端并联一个大电容,从而使得7805输出达到5V。
电路图:2)51单片机最小系统:A、时钟电路:XTAL1(19 脚):芯片内部振荡电路输入端。
XTAL2(18 脚):芯片内部振荡电路输出端。
采用的11.0592M 的石英晶振。
和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。
当采用石英晶振时,电容可以在20 ~ 40pF 之间选择;B、复位电路MCS-5l 系列单片机的复位引脚RST(第9 管脚)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST 持续为高电平,单片机就处于循环复位状态。
复位操作通常有两种基本形式:上电自动复位和开关复位。
图2 中所示的复位电路就包括了这两种复位方式。
上电瞬间,电容两端电压不能突变,此时电容的负极和RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。
随之+5V电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。
并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使RST管脚出现高电平达到手动复位的效果。
C 、EA/VPP(31 脚)的功能和接法51 单片机的EA/VPP(31 脚)是内部和外部程序存储器的选择管脚。
当EA 保持高电平时,单片机访问内部程序存储器;当EA 保持低电平时,则不管是否有内部程序存储器,只访问外部存储器。
D、P0 口外接上拉电阻51 单片机的P0 端口为开漏输出,内部无上拉电阻。
所以在当做普通I/O 输出数据时,由于V2 截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。
3)H桥驱动电路基于三极管的使用机理和特性,在驱动电机中采用H桥功率驱动电路,H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动.直流电机控制使用H桥驱动电路(下图所示)。
设计过程中采用8050和8550两种类型的三极管,实现对其的控制。
4)LED显示模块四位数码管是一种半导体发光器件,其基本单元是发光二极管。
能显示4个数码管叫四位数码管。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
本实验中选用共阳极数码管,同时利用四个选通端来控制相应的数码管输出显示数据,引脚输出通过四个PNP管与选通端相连,输出低电平有效。
电路原理图:5)LM386功放系统:The LM386 is a power amplifier designed for use in low voltage consumer applications. The gain is internally set to 20 to keep external part count low, but the addition of an external resistor and capacitor between pins 1 and 8 will increase the gain to any value from 20 to 200.The inputs are ground referenced while the output automatically biases to one-half the supply voltage. The quiescent power drain is only 24 milliwatts when operating from a 6 volt supply, making the LM386 ideal for battery operation.6)光敏电阻电路:4 系统软件设计(1)软件流程图:(2)程序代码:#include<reg51.h>#define KeyPort P3 //按键#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH0=P2^1;sbit LATCH1=P2^2;sbit LATCH2=P2^3;sbit LATCH3=P2^4; //control of Seven-segment displaysbit motor_1=P2^6;sbit motor_2=P2^7; //driver of motor;sbit light=P1^0;//resitantsbit SPK=P2^5;unsigned char code xian[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa1,0xc6};//共阳极:显示段码值01234567DCunsigned char code NUM[]={0XF9,0XC0,0XF8,0X99};unsigned char qidong;//the flag of activatingunsigned char flag;//the directionunsigned char PWM_ON; //定义速度等级unsigned char frq;#define CYCLE 10 //周期unsigned char TempData[8]; //存储显示值的全局变量/*------------------------------------------------函数声明------------------------------------------------*/void DelayUs2x(unsigned char t);//us级延时函数声明void DelayMs(unsigned char t); //ms级延时void Display(unsigned char Num);//数码管显示函数unsigned char KeyScan(void);//键盘扫描void Init_Timer0(void);//定时器初始化void Init_song(void);//发声------unsigned char Timer0_H,Timer0_L,Time;//世上只有妈妈好数据表code unsigned char MUSIC[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};// 音阶频率表高八位code unsigned char FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;// 音阶频率表低八位code unsigned char FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};/*------------------------------------------------uS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}void delay(unsigned char t){unsigned char i;for(i=0;i<t;i++)DelayMs(250);TR0=0;}/*------------------------------------------------定时器0中断------------------------------------------------*/void TIM1_ISR() interrupt 3{TR1=0;SPK=!SPK;TH1=Timer0_H;TL1=Timer0_L;TR1=1;}/*------------------------------------------------歌曲处理函数------------------------------------------------*/void Song(){TH1=Timer0_H;//赋值定时器时间,决定频率TL1=Timer0_L;TR1=1; //打开定时器delay(Time); //延时所需要的节拍}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示,如输入0表示从第一个显示。