原创 MCS-51学习小结之直流电机

2010-5-10 13:18 4056 11 13 分类: MCU/ 嵌入式

MCS-51学习小结之直流电机<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


电机其实也可以称为马达,虽然结构和驱动方式多达几十种,但是它的控制原理是大同小异的,只要掌握了简单的控制,复杂一点的就好说了。


直流电动机的工作原理如下图所示:


8b7c74c3-0482-4d22-b0cc-579881552188.jpg


      f912c4b2-7486-4efe-af8f-31fe7456ebd7.jpg


直流电机虽然控制简单,但是它的应用还是比较广泛的,例如磁盘驱动器、人造卫星等,都必须达到速度和定位的目标,因为电机的控制无非就是两个目的:速度控制和位置控制。我手里用的是普通的直流电机,如下图:


1641eae2-3b37-4655-b6b9-aba92e650826.jpg


它的两个输出端无论哪个接正、负极都无所谓,区别只是顺时针转动还是逆时针转动罢了。我这次调试采用的仍然是非常经典的H桥驱动电路,因为它非常具有典型性,对于一般的应用场合是足够的了,先做简单的,再玩复杂的,嘿嘿。它顺时针、逆时针转动时的原理图如下:


e1df5641-7424-420f-ab49-ebcfb324410e.jpg 31196b23-3cf4-46b5-b323-f1a180b3f148.jpg


下面给出它的驱动电路,


7e0b0dad-9ae6-42af-989e-ca97a54e8500.jpg


上面电路的具体原理我就不多说了,比较简单,只是需要说明电路中使用二极管的原因,它们是为了防止电流突然反向时,产生的电压突变会损坏BJT。还有就是如果该电机的控制要应用在大电流(大功率)的场合时,就需要把6BJT换成大功率BJT才行。


在这次调试直流电机中,我用上位机(串口调试助手)通过RS232通讯方式控制直流电机的顺、逆时针转动和停止,调试结果很好,通讯很成功。这个过程中还遇到了有趣的事,嘿嘿。我刚开始写驱动程序时写了一条指令为:sbit B = P0^1; 我进行编译时,Keil软件一个劲地报错,我把程序上下反复看了几次,心里纳闷到底问题出在哪里呢?它的报错原因为:


点击看大图


我思考了几分钟,边逛了几分钟的网页,再回到程序上,一眼看到“redefinition”这个单词!心想这不是“重复定义”的意思吗?于是乎,我突然想到MCS-51中有一个通用寄存器B,这个SFR是专门为乘法和除法设置的寄存器,也是一个二进制8位寄存器。(幸好本人的英文水平也不是盖的,嘿嘿。)当即打开"reg52.h"软件自带的头文件一看究竟,果然!


        6e6c5b0d-7a1a-4d55-89e4-c3eb786fb2da.jpg


里面有一个sfr B = 0xF0;说明B这个字符已经被头文件定义过了,不允许用户自己再定义。同时这里也说明了一个问题,sbitsfr的定义至少是有相通之处的!以前从未听说过这个,不由得感叹:在实践中长见识啊!


下面把我调试正确后的程序搬上来:


 


#include "reg52.h"



#define uchar unsigned char


#define uint  unsigned int


 


sbit BEEP=P3^6;


sbit shunshizhen=P0^0; //顺时针转动控制引脚


sbit nishizhen=P0^1;   //逆时针转动控制引脚


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


void delay(uint z)


{


   uint x,y;


   for(x=z;x>0;x--)


    for(y=110;y>0;y--); //大概1ms


}


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


void beep() //蜂鸣器提示。


{


    delay(1);


    BEEP=0;


    delay(100);                 


    BEEP="1";                   


 }


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


void send_back() //数据返回子程序


{


    SBUF="P1";


    while(!TI);  //等待数据发送完毕


    TI="0";        //将发送标志位清零


}


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


void UART() interrupt 4


{


    if(RI==1)  //接收到数据时该位自动置为1


    {


        RI="0";  //将接收标志位清零,否则上位机会一直不停地发送数据


        P1=SBUF;


        send_back(); //把接收到的数据返回PC


        switch(P1)


        {


            case(0x01):BEEP=0;shunshizhen=1;nishizhen=0;break; //顺时针转动


            case(0x02):BEEP=0;shunshizhen=0;nishizhen=1;break; //逆时针转动


            case(0x03):BEEP=0;shunshizhen=0;nishizhen=0;break; //电机停止


        }



    }


}


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


void main()


{


    TMOD="0x20";  //定时器1,工作方式


    TH1 =0xfd; 


    TL1 =0xfd;  //给定时器1装初值,设定波特率为9600bps


    PCON="0x00";  //波特率不进行加倍


    SM0 =0;


    SM1 =1;     //串行工作方式1


    REN =1;     //允许接收数据


    ES  =1;     //打开串口中断4


    TR1 =1;     //启动定时器1


    EA  =1;     //打开总中断


    while(1); 


}


 




 


PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1528479 2010-5-24 17:06

to qdsantian:很惊奇你是广告专业毕业出来的,不过好好学的话,会有大进步的,事在人为嘛,,

用户1150068 2010-5-24 16:38

刚刚看了一遍你的博文,发现了很多公式里面,很多东西都不懂,没有学过,感觉我目前开始学习,也行将来自己可以独立开发PCB和写程序,有些原理性的东西也还是不会懂的。
相关推荐阅读
用户1528479 2011-04-12 21:50
设计第一个六层板所得到的一个深刻体会
        今天中午,由于确实有点困,于是乎仰躺在座椅上眯了半个小时的眼,睡眼朦胧中,好消息随即到来——我的第一个六层板从深圳寄到长沙了!而且元器件都已经由深圳那边的人焊接好了,拆开包装袋一看,简...
用户1528479 2011-03-25 15:28
DDR2 SDRAM×32布局、布线经验谈
最近忙于一块以CycloneIII为核心主控芯片的六层板设计,开发环境是Capture+Allegro+CAM350,从原理图修改到PCB的布局、布线这整个过程中我遇到了相当多的问题,值得庆幸的是...
用户1528479 2011-03-25 13:30
DDR2 SDRAM×32布局、布线经验谈
DDR2 SDRAM×32布局、布线经验谈最近忙于一块以CycloneIII为核心主控芯片的六层板设计,开发环境是Capture+Allegro+CAM350,从原理图修改到PCB的布局、布线这整个过...
用户1528479 2011-02-27 19:48
使用Cadence16.2过程中遇到的一些问题(附解惑方法)
使用Cadence16.2过程中遇到的一些问题(附解惑方法) 很久没有写博文了!确实有点过意不去。最近两个多月以来,由于公司的需要,我不得不学习Cadence16.2的使用方法——用它来画高速板子...
用户1528479 2011-02-27 19:46
使用Cadence16.2过程中遇到的一些问题(附解惑方法)
使用Cadence16.2过程中遇到的一些问题(附解惑方法)很久没有写博文了!确实有点过意不去(呵呵,这意味着自己最近懈怠了)。最近两个多月以来,由于公司的需要,我不得不学习Cadence16.2的使...
用户1528479 2011-02-12 09:15
数字旋转编码开关的原理及使用方法
在电子产品设计中,经常会用到旋转编码开关,比如数码电位器等,它的英文名翻译过来就是Rotary Encoder Switch。在写这个元件的驱动程序之前,我google、baidu了一些它的使用说明资...
EE直播间
更多
我要评论
2
11
关闭 站长推荐上一条 /3 下一条