文档详情

ULN2003直流电机正反转以及10级调速

M****1
实名认证
店铺
DOCX
65.70KB
约8页
文档ID:454162047
ULN2003直流电机正反转以及10级调速_第1页
1/8

ULN2003直流电机正转以及10级PWM调速第24组电子设计报告组员:郝冠111308309 郭剑楠111308308 李爽11308317一、 功能说明本设计是基于STC89C52单片机和ULN2003芯片驱动的直流电机并在数码管显示当前速度级数具有正传和PWM 10级调速等功能速度的控制是由PWM输入信号来完成的通过调节pwm信号的占空比来完成速度的控制1) 通过52单片机加载程序,ULN2003做驱动控制直流电机旋转2) 用按键增加或者减小当前的旋转速度,可以控制10级变速3) 用数码管显示当前旋转的速度级数二、 原理图(1) 最小系统(2) 驱动芯片三、 源程序代码#include#define uint unsigned int uint pp; char num=2,dis;sbit pwm=P3^6;sbit s2=P3^4;sbit s3=P3^5;sbit dula=P2^0; //段选信号的锁存器控制sbit wela=P2^1; //位选信号的锁存器控制sbit cs88=P2^2; //点阵管的锁存器控制 cs88=0;//关点阵管sbit LCD1602=P2^5; //定义LCD1602使能端,用于HJ-C52实验板复位,与本实验无关sbit DS1302=P2^7; //定义DS1302时钟使能端,用于HJ-C52实验板复位,与本实验无关sbit SD=P2^6; //定义SD卡使能端,用于HJ-C52实验板复位,与本实验无关void cmg88()//关数码管,点阵函数 cmg88();//关数码管,点阵函数{dula=1; P0=0x00;dula=0;cs88=0x00;P0=0x00;cs88=1;}unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void keyscan(){ if(s2==0) { while(!s2); num++; if(num==11) num=10; dis=num; } if(s3==0) { while(!s3); num--; if(num==-1) num=0; dis=num; }}void display(a){ dula=0; P0=table[a]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; }void main(){ TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。

TR0=1; //打开定时器 TH0=(65536-160)/256; TL0=(65536-160)%256; ET0=1; //开定时器0中断 EA=1; //开总中断 num=6; //主板初始化 因51单片机芯片开机时各个IO口输出为高电平,加上以下源代码是为了防止各种外部模块误动作 DS1302=0; //关DS1302模块,与本实验无关 SD=0;//关SD卡模块,与本实验无关 LCD1602=0;//关LCD1602模块,与本实验无关 cs88=0;//关点阵管 while(1) { keyscan(); if((num!=0)&&(num!=10)) //对于占空比为0和100%这两种极端情况,最好分离出,单独考虑 { if(pp<=num) pwm=1; else pwm=0; } else if(num==0) //当占空比为0 pwm=0; else pwm=1; display(num);//显示num当前值,占空比为num/10 }}void time0() interrupt 1{ TH0=(65536-160)/256; TL0=(65536-160)%256; pp++; if(pp==11) //当占空比为100% pp=0;}四、 设计总结本次设计由于在设计时没能完善设计思路。

导致器件采集时没有买L293芯片,所以直流电机的反转只能靠手动换线完成以后要吸收教训,提前准备好器件。

下载提示
相似文档
正为您匹配相似的精品文档