单片机控制的松下伺服电机正反转程序

发布者:TranquilBreeze最新更新时间:2018-03-07 来源: eefocus关键字:单片机控制  松下伺服电机  正反转程序 手机看文章 扫描二维码
随时随地手机看文章

 //    
//  文 件 名: download.c    
//    
//  目标对象: AT89S52    
//    
//  编 译 器: ISP    
//    
//  功能描述: 下料部单独控制程序    
//    
//  修改版本: 0.0    
//   
//    
//***************************************************************************    
    
#include     
#includeCC.H>    
#include     
#define uchar unsigned char    
#define uint  unsigned int    
    
//***************************************************************************    
    
sbit    DOWNLOAD_HS30806_Y_PULSE1      =  P1^0;//HS30806_Y电机脉冲-    
sbit    DOWNLOAD_HS30806_Y_DIR      =  P1^1;//HS30806_Y电机方向-    
sbit    DOWNLOAD_HS30806_X_PULSE1      =  P1^2;//HS30806_X电机脉冲-    
sbit    DOWNLOAD_HS30806_X_DIR      =  P1^3;//HS30806_X电机方向-    
sbit    SERVO_PULSE1        =  P3^0;//伺服电机脉冲-    
sbit    SERVO_DIR      =  P3^3;//伺服电机方向-    
sbit    SERVO_ON    =  P3^2;//伺服ON使能    
sbit    QIGANG=P3^1;    
sbit    SERVO_POINT=P2^0;    
sbit    Y_POINT=P2^1;    
sbit    S2 = P3^2;    
sbit    S3 = P3^3;    
sbit    S4 = P3^4;    
sbit    S5 = P3^5;    
    
//****************************************************************************    
    
//延时1us    
    
//****************************************************************************    
    
 void mDelay(uchar DelayTime1)    
{      
        uchar i=0;    
        for(;DelayTime1>0;DelayTime1--)    
        {      
            for(i=0;i<0x16;i++)    
                {    
                    
                }    
        }    
}    
//具体延时时间=DelayTime1*[10+3*m]+10个指令周期    
/* void mDelay(uint DelayTime1)    
{      
    for(;DelayTime1>0;DelayTime1--)    
        {      
                
        }    
}    
*/    
void Delay()    
{    
        
    ;    
;    
    
}    
//***************************************************************************    
    
//下料部Y右转程序    
    
//***************************************************************************    
    
void RIGHT_MOVE_DOWNLOAD_HS30806_Y(uint Pluse1_num)    
{      
            
    DOWNLOAD_HS30806_Y_DIR=1;    
    DOWNLOAD_HS30806_Y_PULSE1  =  1;//脉冲负    
        
    mDelay(20);        
    for(;Pluse1_num>0;Pluse1_num--)    
    {    
        DOWNLOAD_HS30806_Y_PULSE1  =  ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负    
        mDelay(20);    
        DOWNLOAD_HS30806_Y_PULSE1  =  ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负    
        mDelay(20);    
    }    
}      
    
//***************************************************************************    
    
//下料部Y左转程序    
    
//***************************************************************************    
    
void LEFT_MOVE_DOWNLOAD_HS30806_Y(uint Pluse2_num)    
{      
        DOWNLOAD_HS30806_Y_DIR=0;    
        DOWNLOAD_HS30806_Y_PULSE1  =  1;//脉冲负    
        mDelay(20);        
    for(;Pluse2_num>0;Pluse2_num--)    
    {    
        DOWNLOAD_HS30806_Y_PULSE1  =  ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负    
        mDelay(20);    
        DOWNLOAD_HS30806_Y_PULSE1  =  ~DOWNLOAD_HS30806_Y_PULSE1;//脉冲负    
        mDelay(20);    
    }    
}      
    
//***************************************************************************    
    
//下料部Y停止程序    
    
//***************************************************************************    
    
void DOWNLOAD_HS30806_Y_Stop()    
{    
        DOWNLOAD_HS30806_Y_DIR=0;    
        DOWNLOAD_HS30806_Y_PULSE1  =  1;//脉冲负    
        mDelay(20);        
}    
    
//***************************************************************************    
    
//下料部X右转程序    
    
//***************************************************************************    
    
void RIGHT_MOVE_DOWNLOAD_HS30806_X(uint Pluse1_num)    
{      
            
    DOWNLOAD_HS30806_X_DIR=1;    
    DOWNLOAD_HS30806_X_PULSE1  =  1;//脉冲负    
        
    mDelay(20);        
    for(;Pluse1_num>0;Pluse1_num--)    
    {    
        DOWNLOAD_HS30806_X_PULSE1  =  ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负    
        mDelay(20);    
        DOWNLOAD_HS30806_X_PULSE1  =  ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负    
        mDelay(20);    
    }    
}      
    
//***************************************************************************    
    
//下料部X左转程序    
    
//***************************************************************************    
    
void LEFT_MOVE_DOWNLOAD_HS30806_X(uint Pluse2_num)    
{      
        DOWNLOAD_HS30806_X_DIR=0;    
        DOWNLOAD_HS30806_X_PULSE1  =  1;//脉冲负    
        mDelay(20);        
    for(;Pluse2_num>0;Pluse2_num--)    
    {    
        DOWNLOAD_HS30806_X_PULSE1  =  ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负    
        mDelay(20);    
        DOWNLOAD_HS30806_X_PULSE1  =  ~DOWNLOAD_HS30806_X_PULSE1;//脉冲负    
        mDelay(20);    
    }    
}      
//***************************************************************************    
    
//下料部X停止程序    
    
//***************************************************************************    
    
void DOWNLOAD_HS30806_X_Stop()    
{    
        DOWNLOAD_HS30806_X_DIR=0;    
        DOWNLOAD_HS30806_X_PULSE1  =  1;//脉冲负    
        mDelay(20);        
}    
    
//***************************************************************************    
    
//伺服电机右转程序    
    
//***************************************************************************    
    
void RIGHT_MOVE_SERVO(uint Pluse1_num)    
{      
    //SERVO_ON  =  0;    
    //mDelay(100);    
    SERVO_DIR  =  1;    
    mDelay(3);    
    SERVO_PULSE1    =  1;//脉冲负    
        
                
    for(;Pluse1_num>0;Pluse1_num--)    
    {    
        SERVO_PULSE1    =  ~SERVO_PULSE1;//脉冲负    
        mDelay(3);    
    //  mDelay(2);      
        SERVO_PULSE1    =  ~SERVO_PULSE1;//脉冲负    
        mDelay(3);    
    //  mDelay(2);      
    }    
}      
    
//***************************************************************************    
    
//伺服电机左转程序    
    
//***************************************************************************    
    
void LEFT_MOVE_SERVO(uint Pluse2_num)    
{      
//  SERVO_ON    =  0;    
//  mDelay(100);    
    SERVO_DIR  =  0;    
    mDelay(33);    
    SERVO_PULSE1    =  1;//脉冲负    
            
    for(;Pluse2_num>0;Pluse2_num--)    
    {    
        SERVO_PULSE1    =  ~SERVO_PULSE1;//脉冲负    
        //Delay();    
        mDelay(3);    
        SERVO_PULSE1    =  ~SERVO_PULSE1;//脉冲负    
        //Delay();//    
        mDelay(3);      
    }    
}      
    
//***************************************************************************    
    
//伺服电机停止程序    
    
//***************************************************************************    
    
void SERVO_PULSE1_Stop()    
{    
        SERVO_DIR=0;    
        SERVO_PULSE1    =  1;//脉冲负    
        mDelay(20);        
}    
//***************************************************************************    
    
//键盘处理程序    
    
//***************************************************************************    
    
uchar Key()    
{      
    uchar KValue;    
    uchar tmp;    
    P3|=0x3c;          //将P3口的接键盘的中间四位置1    
    KValue=P3;    
    KValue|=0xc3;      //将未接键的4位置1    
    if(KValue==0xff)    //中间4位均为1,无键按下      
        return(0);      //返回    
    mDelay(10);    //延时10ms,去键抖    
    KValue=P3;    
    KValue|=0xc3;      //将未接键的4位置1    
    if(KValue==0xff)    //中间4位均为1,无键按下      
        return(0);      //返回    
//如尚未返回,说明一定有1或更多位被按下    
    for(;;)    
    {  tmp=P3;        
        if((tmp|0xc3)==0xff)    
            break;      //等待按键释放    
    }    
    return(KValue);    
}    
    
void KProce(uchar KValue)  //键值处理    
{      
    if((KValue&0x04)==0)    
        
    LEFT_MOVE_SERVO(10000);    
    
    //RIGHT_MOVE_DOWNLOAD_HS30806_X(2000);    
    //QIGANG=0;    
    if((KValue&0x08)==0)    
        
        RIGHT_MOVE_SERVO(10000);    
    //LEFT_MOVE_DOWNLOAD_HS30806_X(2000);    
    //QIGANG=1;    
    if((KValue&0x10)==0)    
    SERVO_ON    =  0;    
    mDelay(100);    
//  RIGHT_MOVE_DOWNLOAD_HS30806_Y(2000);    
    if((KValue&0x20)==0)    
    SERVO_ON    =  1;    
    mDelay(100);    
    //LEFT_MOVE_DOWNLOAD_HS30806_Y(2000);    
}    
    
//***************************************************************************    
    
//初始化程序    
    
//***************************************************************************    
    
void    init()    
{    
//  P0=0xFF;    
//  P1=0xFF;    
//  P2=0xFF;    
//  P3=0xFF;    
    P3=0xFD;    
    mDelay(1000);    
    while(S2==1)    
    {    
            LEFT_MOVE_DOWNLOAD_HS30806_Y(1);    
    }    
    RIGHT_MOVE_DOWNLOAD_HS30806_Y(1600);    
        while(S3==1)    
    {    
            LEFT_MOVE_DOWNLOAD_HS30806_X(1);    
    }    
    RIGHT_MOVE_DOWNLOAD_HS30806_X(1600);    
}    
    
//***************************************************************************    
    
//主函数    
    
//***************************************************************************    
    
/*    
void main()    
{    
    uchar KValue,m;//,n,flag;              //存放键值;    
//g init();//    
//SERVO_ON  =  0;    
//mDelay(100);//延时0.00111300s    
mDelay(1);    
mDelay(2);    
mDelay(3);    
mDelay(4);    
mDelay(10);    
mDelay(20);    
for(m=0;m<100;m++)    
{    
RIGHT_MOVE_SERVO(25000);    
//mDelay(20);//延时0.00023s    
LEFT_MOVE_SERVO(25000);    
mDelay(20);    
}    
while(1)    
{    
//  for(m=0;m<100;m++)    
//  {    
//  RIGHT_MOVE_DOWNLOAD_HS30806_Y(800);    
//  }    
        
    for(;;)    
    {  KValue=Key();          //调用键盘程序并获得键值    
        if(KValue)              //如果该值不等于0    
        {    
            KProce(KValue); //调用键盘处理程序    
        }    
    }    
    
}    
    
 }    
    
*/    
void Initia()    
{    
    LEFT_MOVE_SERVO(1);    
    mDelay(6);    
}    
    
void main()    
{    
    Initia();    
    RIGHT_MOVE_SERVO(100);    
    while(SERVO_POINT==0)    
        while(1)    
        {    
            while(S2==0)    
            {    
                while(1)    
                {      
                    RIGHT_MOVE_SERVO(100);    
                    mDelay(20);    
                    LEFT_MOVE_SERVO(100);      
                    mDelay(20);    
                }    
            }    
        }    
}  

关键字:单片机控制  松下伺服电机  正反转程序 引用地址:单片机控制的松下伺服电机正反转程序

上一篇:基于单片机的读矩阵键盘,用数码管显示相应键值
下一篇:时钟,秒表,流水灯的单片机汇编程序

推荐阅读最新更新时间:2024-03-16 15:56

基于ATmega8 单片机控制的正弦波逆变电源
  在风电行业中,经常需要在野外对风机进行维修,这时必须为各类维修工具和仪器进行供电。因此,设计一种便携式。低功耗。智能化的正弦逆变电源来为这些设备供电是十分必要的,可大大提高维修风机的效率。   本文正是基于这种情况下而设计的一种基于 单片机 的智能化正弦逆变电源。   1正弦逆变电源的设计方案   本文所设计的逆变器是一种能够将DC 12 V直流电转换成220 V正弦交流电压,并可以提供给一般电器使用的便携式电源转换器。目前,低压小功率逆变电源已经被广泛应用于工业和民用领域。特别是在交通运输。野外测控作业。机电工程修理等无法直接使用市电之处,低压小功率逆变电源便成为必备的工具之一,它只需要具有一块功率足够的电池与它连接,便
[电源管理]
基于ATmega8 <font color='red'>单片机控制</font>的正弦波逆变电源
用proteus8.0仿真51单片机控制步进电机实验报告与源码
用proteus8.0仿真51单片机控制步进电机,实现简单的正反转、加减速控制。 ps. 该贴仅为获取黑币而法,如有雷同,多多保函 实验内容 掌握KeilC51软件与Protues软件联合仿真调试的方法; 掌握步进电机的工作原理及控制方法; 掌握步进电机控制的不同编程方法。 电路图 实验心得 这次实验让我学到了通过改变延时函数的参数可以实现步进电机的增减速,改变驱动电机的数模可以实现电机的正反转,中途遇到的困难不少,但在老师的指导下总算是完成任务。这两次实验使我能更熟练地运用微机来控制其他器件,获益良多。 单片机源程序如下: #include reg52.h sbit KEY0=P0^0; sbit KE
[单片机]
用proteus8.0仿真51<font color='red'>单片机控制</font>步进电机实验报告与源码
单片机控制直流电机方案介绍
本设计以AT89C51单片机为核心,以4*4矩阵键盘做为输入达到控制直流电机的启停、速度和方向,完成了基本要求和发挥部分的要求。在设计中,采用了PWM技术对电机进行控制,通过对占空比的计算达到精确调速的目的。 一、 设计方案比较与分析: 1、电机调速控制模块: 方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。 方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、
[单片机]
<font color='red'>单片机控制</font>直流电机方案介绍
单片机控制的多参数实时采集与处理系统设计
   引言   在现代工业控制系统中,多参数实时采集对监控设备正常运行有着十分重要的作用。多参数信号采集是将监控现场的物理量、化学量或生物量通过相应的传感器和调理电路把模拟量转换为易于采集、处理的电压信号,经过单片机的处理,一方面反馈给控制部件对监控对象进行控制调整,另一方面送给显示单元,实时显示采集的信号数据。在航空、汽车、通信、园林等控制领域,多参数实时采集与处理是自动控制系统的核心。但是专用的数据采集设备价格动辄上万,高速数据采集卡的价格也在千元以上,而且这类设备大多有固定的接口,无法适应千差万别的被测对象的需求,不具有通用性。本文从应用角度出发,设计分辨率为8位的实时数据采集系统,在STC_ISP_V394软件环境的支持
[测试测量]
<font color='red'>单片机控制</font>的多参数实时采集与处理系统设计
基于单片机控制来实现手机收发短信息
  GSM(Global System for Mobile communication)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的主要方式。主要提供话音、短信息、数据等多种业务。基于GSM短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,能广泛用于远程监控、定位导航、个人通信终端等。由于公众GSM网络在全球范围内实现了联网和漫游,建立上述系统不须再组建专用通信网络,所以具有实时传输数据功能的短消息应用将得到迅速普及。   目前,人们设计的各类DTE设备基础上以微处理器为核心,带有RS232/RS485
[单片机]
基于<font color='red'>单片机控制</font>来实现手机收发短信息
一种单片机控制的指令转换器的设计
1 引言 在某大型指挥控制系统中,由于指令发送装置与接收装置的指令格式有很大的区别,两者不能直接通信。而更换其中之一都会造成巨大的资金浪费,指令转换器的目的就是在不改变发送和接收装置的情况下对发送装置所产生的指令进行格式转换,使产生的指令格式与接收装置所能接收的指令格式一致,实现整个系统的顺利通信。 2 硬件设计 2.1 总体结构 指令转换器的硬件总体结构如图2-1所示。所有电路模块集中在一块印刷电路板上,主要有89C51单片机、串口扩展电路、中断扩展电路、监测电路、静态存贮器扩展电路、输出电路及分频电路等几个部分,下面将对各部分进行详细介绍。 2.2 中央控制单元 2.2.1时钟电路 89C51的内部有一个用
[单片机]
一种<font color='red'>单片机控制</font>的指令转换器的设计
51单片机控制蜂鸣器播放5首歌曲汇编程序
;机器人代码:(外部中断用来接红外传感器的) ORG 0000H JMP INIT ORG 0003H JMP INT_0 ORG 000BH JMP INT_T ORG 0023H JMP INT_S ;------------------------------------- FLAG_F EQU 01H ;功能选择,0为播放,1为演奏 FLAG_L EQU 02H ;指示灯选择,0指示灯亮或1亮 FLAG_P EQU 03H ;是否播放标志,0停止,1播放 FLAG_CH EQU 04H ;演奏时是否换音符,1有效 FLAG_LAST EQU 05H ;播放时是
[单片机]
单片机控制的双路有源滤波器设计
    摘要: 用单片机对可编程滤波器芯片MAX262进行程序控制,可以同时对两路输入信号进行二阶低通、高通、带通、带阻以及全通滤波处理,滤波器的中心频率在15kHz~50kHz频率范围内实现64级程控调节,其Q值在0.5~64范围实现128级程控调节。     关键词: MAX262 单片机 滤波器 在工业自动化的许多领域都要使用滤波器。一般有源滤波器均由运算放大器和RC元件组成,对元器件的参数精度要求比较高,设计和调试都比较麻烦。美信公司(MAXIM)生产垢可编程滤波器芯片MAX262可以通过编程对各种低频信号实现低通、高通、带通、带阻以及全通滤波处理,而且滤波的特性参数如中心频率、品质因数等也可以通过编
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved