打印
[应用方案]

监控云台控制器,串口通信可多种通讯方式

[复制链接]
1447|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
energyplants|  楼主 | 2016-8-15 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚开始测试通讯。用来控制云台电机,以及镜头的伸缩对焦。电机拆的是24v交流电机,所以采用可控硅控制。另加了4个继电器。通讯因为距离不要太远,所以采用max232.可以用max485得到更远的传输距离。经过测试,采用315mhz的无线也是可以的,不过有时可能会受干扰。只为了满足同事的要求做的,太多功能也没做。可以加上红外遥控功能,还有别的都可以。串口线接在电脑上也可以电脑控制。串口发送的是字符。可以自己随便修改。原理图我就不多说了,很简单
由此原理大家可以做更多串口控制的东西。
程序有待完善,只做了单向通信。欢迎大家一起讨论,学习。



沙发
energyplants|  楼主 | 2016-8-15 21:13 | 只看该作者
这是美丽的烟台


使用特权

评论回复
板凳
energyplants|  楼主 | 2016-8-15 21:13 | 只看该作者
发送程序
/************************************************/
           void delayms(uint xms)
                   {
                uint i,j;
                for(i=xms;i>0;i--)
                        for(j=110;j>0;j--);
                }
/***********************************************/
        void send(uchar keynum)
        {
        SBUF=keynum;
        while(!TI);
        TI=0;

        }

        void keyscan()
        {
        uint temp,key;
                P1=0xff;
        temp=P1;
        switch(temp)
                {
                case  0x7f:         key='U' ;break;
                case  0xbf:  key='D';break;
           case  0xdf:   key='L';break;
                case  0xef:   key='R';break;
                case  0xf7:   key='Y';break;
                case  0xfb:   key='J';break;
                case  0xfd:   key='M';break;
                case  0xfe:   key='N';break;
                default :key=0;
                }
         send(key);


               
        
        
        }
/**********************************************************/
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
        {power=0;
        keyscan();
        }



}
=================================================================


使用特权

评论回复
地板
energyplants|  楼主 | 2016-8-15 21:14 | 只看该作者
串口接收
#include <reg52.h>
sbit         R1=P1^0;
sbit  R2=P1^1;
sbit  R3=P1^2;
sbit  R4=P1^3;
sbit  R5=P1^4;
sbit R6=P1^5;
sbit R7=P1^6;/输出
sbit power=P3^7;
sbit R8=P1^7;
unsigned int myKEY;        //存放电脑发送过来的按键
unsigned int temp;
void Delay(unsigned int t);
void main(void)
{
        SCON=0x50;                 //串口工作模式3,允许接收
        TMOD=0x20;                   //定时器1工作模式2
        ES=1;                          //允许串口中断
        EA=1;                        //允许CPU中断
        TH1=0xFD;                //定时器初值,波特率:9600bps
        TL1=0xFD;
        TR1=1;                          //启动定时器

        while(1)
        {power=0;

R5=0;R6=0;R7=0;R8=0;
                if(myKEY=='U' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='U')
                                {
                                        R1=0;
                                        Delay(15000);
                                        R1=1;
                                }     
                }
        
                  if(myKEY=='D' )          //发送字母U
                        {
               
                                temp=myKEY;
                                myKEY=0;

                                if(temp=='D')
                                {
                                        R2=0;
                                        Delay(15000);
                                        R2=1;
                                }
                         }

        if(myKEY=='L' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='L')
                                {
                                        R3=0;
                                        Delay(15000);
                                        R3=1;
                                }
             }

        if(myKEY=='R' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='R')
                                {
                                        R4=0;
                                        Delay(15000);
                                        R4=1;
                                }
                        

                }

        if(myKEY=='Y' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='Y')
                                {
                                        R5=1;
                                        Delay(17000);
                                        R5=0;
                                }
                          }
        if(myKEY=='J' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='J')
                                {
                                        R6=1;
                                        Delay(17000);
                                        R6=0;
                                }  
                         }
        if(myKEY=='M' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='M')
                                {
                                        R7=1;
                                        Delay(17000);
                                        R7=0;
                                }  
                                }
        if(myKEY=='N' )          //发送字母U
                {
               
                temp=myKEY;
                myKEY=0;

                        if(temp=='N')
                                {
                                        R8=1;
                                        Delay(17000);
                                        R8=0;
                                }  
        
        
        



        }
}
}

void int_int0(void) interrupt 4                //串口中断程序
{
        if(RI==1)          //如果是接收中断
        {
                myKEY=SBUF;                  //接收电脑发送过来的键盘值
                RI=0;        
               

        }
else
        {
                TI=0;
        }
}
void Delay(unsigned int t)
{
while(--t);
}




使用特权

评论回复
5
Bermanrep| | 2016-8-16 16:26 | 只看该作者
你这个是云台内部的程序吧,那外部通过485和云台通讯的程序有没有

使用特权

评论回复
6
玛尼玛尼哄| | 2016-8-17 20:01 | 只看该作者
24V的交流电机啊,还是三相电机啊。

使用特权

评论回复
7
zhuomuniao110| | 2016-8-25 21:44 | 只看该作者
都是用485通讯的,要不就是走网络模块

使用特权

评论回复
8
heisexingqisi| | 2016-8-25 22:46 | 只看该作者
C2051的烧录工具好像跟C51的不同吧。

使用特权

评论回复
9
捉虫天师| | 2016-8-27 21:31 | 只看该作者
搞的好复杂驱动上,最好用集成的芯片,一片搞定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

123

帖子

2

粉丝