打印

全向电机控制

[复制链接]
2081|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雁舞白沙|  楼主 | 2010-9-1 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <GLOBAL.h>
#include <stdlib.h>
#include <stdbool.h>
#include <msp430x12x.h>
//------------------------------------------------------------------------ValveConTime=200 µç»ú¿ªÊ§¿Øʱ¼ä
#define MotoConOneOut             P3DIR |=  BIT6
#define MotoConOneHig             P3OUT |=  BIT6            
#define MotoConOneLow             P3OUT &=~ BIT6
#define MotoConTwoOut             P3DIR |=  BIT7
#define MotoConTwoHig             P3OUT |=  BIT7            
#define MotoConTwoLow             P3OUT &=~ BIT7
//------·§ÃÅ״̬¼ì²âµçÔ´¹©¸ø
#define ValveStChkPowerDirOut     P3DIR |=  BIT0
#define ValveStChkPowerHig        P3OUT |=  BIT0
#define ValveStChkPowerLow        P3OUT &=~ BIT0
//------·§ÃÅ״̬
#define ValveStOneIn              P3DIR &=~ BIT1            
#define ValveStTwoIn              P3DIR &=~ BIT2
#define ValveStOne                P3IN  &   BIT1            
#define ValveStTwo                P3IN  &   BIT2
void MotoInit(void)
{
    MotoConOneOut;
    MotoConTwoOut;
    MotoConOneLow;
    MotoConTwoLow;
    MotoConOver=1;
    ValveReverse=0;
    ValveStChkPowerDirOut;
    ValveStChkPowerLow;
}
void MotoOpen(void)
{
    ValveStChkPowerHig;
    if(ValveConTimes<=185)//---ÂýËÙÔËÐÐ
    {
        MotoConOneLow;
        MotoConTwoHig;
        WDT();
        Delay(1000);//---ÔËÐÐ
        MotoConOneLow;
        MotoConTwoLow;
        WDT();
        Delay(1000);//---Í£Ö¹
    }
    else if(ValveConTimes<=190)//---ÖÐËÙÔËÐÐ
    {
        MotoConOneLow;
        MotoConTwoHig;
        WDT();
        Delay(2000);//---ÔËÐÐ
        MotoConOneLow;
        MotoConTwoLow;
        WDT();
        Delay(1000);//---Í£Ö¹
    }
    else if(ValveConTimes<=195)//---¸ßËÙÔËÐÐ
    {
        MotoConOneLow;
        MotoConTwoHig;
    }
    else if(ValveConTimes<=196)//---Í£Ö¹
    {
        MotoConOneLow;
        MotoConTwoLow;
    }
    else if(ValveConTimes<=198)//---·´ÏòÔËÐÐ
    {
        MotoConOneHig;
        MotoConTwoLow;
    }
    else
    {
        MotoConOneLow;
        MotoConTwoLow;
    }
}
void MotoClos(void)
{
    ValveStChkPowerHig;
    if(ValveConTimes<=185)//---ÂýËÙÔËÐÐ
    {
        MotoConOneHig;
        MotoConTwoLow;
        WDT();
        Delay(1000);//---ÔËÐÐ
        MotoConOneLow;
        MotoConTwoLow;
        WDT();
        Delay(1000);//---Í£Ö¹
    }
    else if(ValveConTimes<=190)//---ÖÐËÙÔËÐÐ
    {
        MotoConOneHig;
        MotoConTwoLow;
        WDT();
        Delay(2000);//---ÔËÐÐ
        MotoConOneLow;
        MotoConTwoLow;
        WDT();
        Delay(1000);//---Í£Ö¹
    }
    else if(ValveConTimes<=195)//---¸ßËÙÔËÐÐ
    {
        MotoConOneHig;
        MotoConTwoLow;
    }
    else if(ValveConTimes<=196)//---Í£Ö¹
    {
        MotoConOneLow;
        MotoConTwoLow;
    }
    else if(ValveConTimes<=198)//---·´ÏòÔËÐÐ
    {
        MotoConOneLow;
        MotoConTwoHig;
    }
    else
    {
        MotoConOneLow;
        MotoConTwoLow;
    }
}
void ValveStChk(void)
{
    ValveOpen=0;//
    ValveClos=0;//---·§ÃŹØ
    ValveErrSt=1;//------------·§ÃÅ´íÎó
    if(ValveStOne&BIT1)
    {
        if(!(ValveStTwo&BIT2))
        {
            MeterSts[1]&=0xfc;//--------Çå³ýµÍÁ½Î»---¹Ø·§×´Ì¬
            ValveClos=1;//---·§ÃŹØ
            ValveErrSt=0;
        }
        else
        {
            MeterSts[1]|=0x02;//--------Ë«¸ß---·§ÃÅ´íÎó
        }
    }
    else
    {
        if(ValveStTwo&BIT2)
        {               
            MeterSts[1]&=0xfc;//Çå³ýµÍÁ½Î»---¹Ø·§×´Ì¬
            MeterSts[1]|=0x01;//--------¿ª×´Ì¬
            ValveOpen=1;//-------------·§ÃÅ¿ª
            ValveErrSt=0;
        }
    }
}
void MotoStop(void)
{
    SleepEn=1;
    MotoConEn=0;
    MotoClosEn=0;
    MotoOpenEn=0;
    ReverseClos=0;
    ReverseOpen=0;
    MotoConOneOut;
    MotoConTwoOut;
    MotoConOneLow;
    MotoConTwoLow;
    ValveReverse=0;
    ValveConTimes=0;
    ReverseConData=0;
    ValveStChkPowerDirOut;
    ValveStChkPowerLow;
    MotoConOver=1;
}
void ValvePower(void)
{
    ValveStChkPowerHig;
    ValveStOneIn;
    ValveStTwoIn;
    MotoConOneOut;
    MotoConTwoOut;
    MotoConOneLow;
    MotoConTwoLow;
    WDT();
    Delay(1000);
    SleepEn=0;
    MotoConEn=1;
    ValveConTimes=200;
}
//---void MotoStr(bool MotoSt)--------------------------------------------------
//---¹¦ÄÜÃèÊö:-
//---ÊäÈëÌõ¼þ:-MotoSt=1,Ö´Ðпª·§¶¯×÷·ñÔòÖ´Ðйط§¶¯×÷¡£
//---Êä³öÏîÄ¿:-ÎÞ¡£
void MotoStr(bool MotoSt)
{
    ValvePower();
    if(MotoSt)
    {
        MotoOpenEn=1;
        MotoClosEn=0;
    }
    else
    {
        MotoOpenEn=0;
        MotoClosEn=1;
    }
}
void ValveNormalCon(void)
{
    ValveStChk();
    WDT();
    SleepEn=0;
    if(MotoOpenEn)//------------------------------------------¿ª·§¶¯×÷
    {
        if(ValveLockSt|PowerLowFg)//----Èç¹û¶ÏÏߣ¬µÍѹ£¬Í¸Ö§£¬½ûÖ¹¿ª·§
        {
            MotoOpenEn=0;
            MotoClosEn=1;
        }
        else
        {
            if(ValveClos|ValveErrSt)
            {
                MotoOpen();  
            }
            else
            {
                if(ValveOpen)
                {
                    MotoStop();
                }
                else
                {
                    MotoOpen();
                }   
            }
        }
    }
    else
    {
        if(MotoClosEn)//--------------------------------------¹Ø·§¶¯×÷
        {
            if(ValveOpen|ValveErrSt)
            {
                MotoClos();
            }
            else
            {
                if(ValveClos)
                {
                    MotoStop();
                }
                else
                {
                    MotoClos();
                }
            }
        }
    }
}
void ValveReverseCon(void)
{
    ValveStChk();
    if(ReverseOpen)
    {
        if(ValveConTimes>198)//---·´ÏòÔËÐÐ
        {
            MotoConOneHig;
            MotoConTwoLow;
        }
        else
        {
            if(ValveOpen)
            {
                MotoStop();
            }
        }
    }
    else
    {
        MotoStop();
    }
}
void ValveCon(void)
{
    if(MotoConEn)
    {
        if(ValveConTimes!=0)
        {
            if(ValveReverse)
            {
                ValveReverseCon();
            }
            else
            {
                ValveNormalCon();
            }
        }
        else
        {
            MotoStop();
        }
    }
}
//---看似简单的问题,其实已经修改了N次,经过最后的琢磨定型了以上的控制方式---//

相关帖子

沙发
rclong| | 2010-9-1 19:15 | 只看该作者
兄弟你的注释都变成乱码了

使用特权

评论回复
板凳
chenyongand| | 2010-9-6 09:02 | 只看该作者
这程序的功能楼主也不说明一下吗?

使用特权

评论回复
地板
高勇| | 2010-9-6 09:12 | 只看该作者
程序功能就是让看程序的人时间有去处.

使用特权

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

本版积分规则

个人签名:学者会友QQ群:72137827 三人行,必有我师!

213

主题

789

帖子

243

粉丝