毕业设计--单片机直流电机控制器[zhuan]_希希_百度空间

【更多帮助:】

            前天回家,整理了一下从学校带回来的东西,看到之前做的毕业设计。觉得放着有点占地方,就打算把它拆掉,想想又觉得可惜,干脆拿出来给大家分享下~顺便出售之(连电路板成品+论文+程序+技术指导)。感觉自己这玩意,虽然不难,但是也不是一个初学者能做得出来的,可以用来造福一下那些和我一样混了4年大学而又不想给毕业设计这一关卡住的人~(只要不是太牛的大学,这东西拿B以上是{jd1}没问题的)。

       89C52单片机控制PWM调速电路实现小功率直流电机的转速调节,并要将其实时转速用LED管显示出来。而本系统必须符合以下几点要求:

(1) (1000—5500)/分 内对直流电机进行任意调速,最小调速级差为1/分。

(2)  电机能在所设速度下稳定运转,运转速度与设定速度之差小于±20/分。

(3)  电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调±5%内。

(4)  利用按键和LED数码管设置速度,设置方便,快捷。

(5)  利用LED数码管实时显示电机速度。

(6)  电机能进行正反转控制。

          控制方面,本设计是采用定时器控制I/O口输出PWM信号驱动斩波电路控制电机运转和调速;利用单片机外部中断引脚的捕获功能、电机同轴带缺口的圆盘、光电耦合器来测量转速;并将测得转速和设定转速进行PI运算后输出,实现闭环控制;转向调节则是用的桥式电路。显示是利用8位LED数码管,用按键进行设定。

下面简单介绍下硬件组成和一些软件原理:

一、硬件电路。

          1、单片机选用的是STC的89C52,20MHz晶振。

          2、显示部分比较简单,用的8位7段数码管同时显示设定速度和实时速度。采用74LS164串行移位输出,只占用单片机3个I/O口,刷新频率100Hz。

          3、PWM驱动电路。使用了9012和8050两个三极管来驱动,相信网上很多的,也不用我多说,只是别忘了加上续流二极管和两个三极管之间的限流电阻就是。

                                        

          4、测速电路。测速电路用的是光耦测量转动圆盘引起的脉冲宽度,从而可得单片机的实时速度,精度很高,可达千分之一。用的是外部中断的。。。好像是捕获模式,忘记了~呵呵!

          5、转向调节电路。转向调节,由于是后来加上去的,所以就没有使用单片机控制,直接用硬件实现,但其实原理是一样的。原理是利用开关控制继电器,然后控制桥路对电机实施转向控制。另外用一个同轴电机按正反方向接2个LED用来指示方向。PS:因为这是小功率电机,所以就算没有制动电路,强制转向,也不会对电机造成损坏。

void time0_int(void) interrupt 1

{   TH0= (time0_tmp/256);

    TL0= (time0_tmp%256);

    if(cut == 1)

        {

        time0_tmp = 65536-time0_set*20/12;

        cut = 0;

        }

    else

        {

        time0_tmp = 65536-(time0 - time0_set)*20/12;

        cut = 1;

           }       

}

    

       2、测速系统的工作原理为:利用电机轴上带的圆盘的缺口,引起光电开关产生高电平脉冲,单片机就采集此脉冲的宽度,加以计算,得出其实时速度。

获取脉冲宽度值子函数如下:

void getwidth_1()

{

TH1 = 0;

TL1 = 0;

n = 0;

n1 = n;

while(INT1==1&&((n-n1)<30))//n为每1MS +2

{}

if(INT1==0)

TR1 = 1;    //计数器1打开

else

goto out;

//IE1 = 0;//中断请求标志

EX1 = 1;//外部中断1启动

n = 0;

n1 = n;

while(m==0&&((n-n1)<30))

{}

if(m==0)//M=1,则已经进入out_int1中断,若等于0,则说明30MS延时已过

    {

    TH1_1 = 0;

    TL1_1 = 0;

    }

out:

IE1 = 0;//中断请求标志

m = 0;

EX1 = 0;//外部中断允许位

TR1 = 0;

width_1 = (TH1_1*256+TL1_1);//timepr=脉冲宽度 /μS

}

另外为了稳定测得的转速值,在程序中加了一个取平均值的函数(几乎在整个程序中都有感觉,程序写得不精炼,有点累赘,呵呵,但总算功能是能实现嘛~反正毕业设计对程序执行效率没要求。)

void getwidth()

{

int gw,gw1;

width = 0;

gw1 = 0;

for(gw=0;gw<6;gw++)

    {

GG: getwidth_1();

    if(width_1 != 0)

    widthbuf[gw] = width_1;

    else

    goto GG;

    }

width = (widthbuf[0] + widthbuf[1] + widthbuf[2] + widthbuf[3] + widthbuf[4] + widthbuf[5])/6;将测得的连续6个不为零的脉冲宽度取平均值,以xx偶然的不稳定因素,使转速显示更加稳定

     

       3、PI调节

PI调节计算公式如下[5]  

YK = KP*EK + KI*EK2

YK:要输出的数据增量

EK:设定值和实测值的差值

EK1:上次的EK

EK2EK-EK1的差值

KP:比例系数(本程序中设KP=1.6)经反复凑试的结果

KI:积分系数(本程序中设KI=1.5)经反复凑试的结果

当KP和KI为以上值时,系统处于{zj0}运行状态,实验中表现为:电机原来速度为2000,当设置为4500转时,可以在2秒之内迅速上升并稳定于4500±20,而超调量也仅为+300/分,出现在{dy}次上升的时候,下来之后便稳定了。

速度变化曲线:

实物图:



郑重声明:资讯 【毕业设计--单片机直流电机控制器[zhuan]_希希_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——