基于单片机的直流电机PWM调速控制系统的设计(DOC) 联系客服

发布时间 : 星期四 文章基于单片机的直流电机PWM调速控制系统的设计(DOC)更新完毕开始阅读99de3e6611661ed9ad51f01dc281e53a59025111

基于单片机AT89S52的直流电机PWM调速控制系统

2、反转时,电机反转,数码管最高位显示“F”,其它三位先所给定频率,如

下图:

3、输出波形如下:

4、加速分5档,波形依次如下:

5、减速分5档,波形如下:

第5页 共11页

基于单片机AT89S52的直流电机PWM调速控制系统

第五章:程序

见附件1

第六章:PCB图

见附件2

第七章:元件清单

见附件3

第八章:心得体会

附件1

/***************基于单片机AT89C51的直流电机PWM调速控制系统*************/ /*******************地点:广东松山职业技术学院************************/ /****************班级:2009级检测技术及应用****************************/ /*****************指导老师:张军涛***********************************/ /***************时间:2011年7月1日***********************************/ /************头文件*********/

#include #include #include

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

/********自定义变量********/

#define uint unsigned int //自定义变量 #define uchar unsigned char char gw,sw,bw,qw;

uchar j; //定时次数,每次20ms

第6页 共11页

基于单片机AT89S52的直流电机PWM调速控制系统

uchar f=5; //计数的次数

sbit P10=P1^0; //PWM输出波形1 sbit P11=P1^1; //PWM输出波形2 sbit P12=P1^2; //正反转 sbit P13=P1^3; //加速 sbit P14=P1^4; //减速 sbit P15=P1^5; //停止 sbit P16=P1^6; //启动 uchar k;

uchar t; //脉冲加减

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

/*********控制位定义********************/ uchar code smg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71};//程序存储区定义字型码表

char data led[4]={0x08,0x04,0x02,0x01}; //位码 uint x; //数码管显示的数值 display(); //数码管显示 delays(); //延时函数 key();

displays();

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

/***************主函数********************/ main (void) { TMOD=0x51; //T0方式1 定时计数 T1方式1计数 TH0=0xb1; //装入初值 20MS TL0=0xe0; TH1=0x00; // 计数567 TL1=0x00; TR0=1; //启动 t0 TR1=1; //启动t1 gw=sw=bw=qw=0; //数码管初始化 P0=0xc0; P2=1; while(1) //无限循环 { display(); //数码管显示 key(); } }

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

第7页 共11页

基于单片机AT89S52的直流电机PWM调速控制系统

/***************数码管显示****************/ display() { uchar i; gw=x; //求速度个位值,送到个位显示缓冲区 sw=(x/10); //求速度十位值,送到十位显示缓冲区 bw=(x/100); //求速度百位值,送到百位显示缓冲区 qw=x/1000; //求速度千位值,送到千位显示缓冲区 for(i=0;i<4;) { P2=led[i]; if(i==0) //显示个位 { P0=smg[gw]; delays(); } else if(i==1) //显示十位 { P0=smg[sw]; delays(); } else if(i==2) //显示百位 { P0=smg[bw]; delays(); } else if(i==3) //显示千位 { if(k==0) //正转时显示\三\ { P0=0x49; delays(); } else { P0=0x71; //反转时显示\ } } i++; } }

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

第8页 共11页