搜索
bottom↓
回复: 11

一个单片机驱动四个电机,经典!!!

[复制链接]

出0入0汤圆

发表于 2011-8-22 09:19:40 | 显示全部楼层 |阅读模式
#ifndef __main_H__
#define __main_H__
sbit P2_0=P2^0 ;
sbit P2_1=P2^1 ;
sbit P2_2=P2^2 ;
sbit P2_3=P2^3 ;

#define uInt unsigned int
#define uchar unsigned char

uchar    PWM_table[11][2]={0,100,10,90,20,80,30,70,40,60,50,50,60,40,70,30,80,20,90,10,100,0};


#define motor_Control0     0
#define motor_Control1     1

uchar   PWM_motor_Control0_0;  //低电平                   电机1
uchar   PWM_motor_Control0_1;  //高电平

uchar   PWM_motor_Control1_0;  //
uchar   PWM_motor_Control1_1; //                       电机2

uchar   PWM_motor_time_Control0=0;
uchar   PWM_motor_time_Control1=0;

uchar   time_count0=0;
uchar   time_count1=0;

void InitTimer0(void);
void motor_Control(uchar num,uchar direction,uchar speed);
void motor_Init(void);
#endif

uchar    PWM_table[11][2]={0,100,10,90,20,80,30,70,40,60,50,50,60,40,70,30,80,20,90,10,100,0};


void main(void)      
{
    InitTimer0();
        motor_Init();
         while(1)
         {
            motor_Control(0,1,9);                  
        motor_Control(1,1,1);                  
            TR0 = 1;
                delay();
                delay();
                delay();
                TR0 = 0;
            motor_Control(0,1,1);          //2号电机            
        motor_Control(1,1,9);      //1号电机
            TR0 = 1;
                delay();
                TR0 = 0;
                                   
        }
}
/**************************************************************************
【函 数 名】:void motor_Init()
【功    能】:电机控制停函数  
【输入参数】:无
【输出参数】:无
【返 回 值】:无
【时    间】:2011年8月8号
****************************************************************************/
void motor_Init(void)
{
    P2_0=0;
        P2_1=0;
        P2_2=0;
        P2_3=0;
        TR0=0;
}
/**************************************************************************
【函 数 名】:void motor_Control(uchar num,uchar direction,uchar speed)
【功    能】:电机控制函数  
【输入参数】:uchar num,uchar direction,uchar speed
【输出参数】:无
【返 回 值】:无
【时    间】:2011年8月7号
****************************************************************************/
void motor_Control(uchar num,uchar direction,uchar speed)
{
         switch(num)
         {
            case  motor_Control0:
                              P2_0=direction;
                                           PWM_motor_Control0_0=PWM_table[speed][0];
                                          PWM_motor_Control0_1=PWM_table[speed][1];
                                          break;
                case  motor_Control1:
                              P2_2=direction;
                                           PWM_motor_Control1_0=PWM_table[speed][0];
                                          PWM_motor_Control1_1=PWM_table[speed][1];
                                          break;
         }
}

/**************************************************************************
【函 数 名】:void InitTimer0(void)
【功    能】:定时器0的方式1函数  
【输入参数】:200微妙
【输出参数】:无
【返 回 值】:无
【时    间】:2011年8月7号
****************************************************************************/
void InitTimer0(void)
{
   TMOD = 0x01;
    TH0 = 0x0FF;
    TL0 = 0x0A4;
    EA = 1;
    ET0 = 1;
}
/**************************************************************************
【函 数 名】:void Timer0Interrupt(void) interrupt 1
【功    能】:付初值函数  
【输入参数】:200微妙
【输出参数】:
【返 回 值】:无
【时    间】:2011年8月7号
****************************************************************************/
void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x0FF;
    TL0 = 0x0A4;   
        /******************电机0************************************************/
        if(PWM_motor_time_Control0)
          {
              if( time_count0=PWM_motor_Control0_1)
                        {
                           P2_1=1;
                           PWM_motor_time_Control0=0;
                           //time_count0=-1;
                        }
          }
        else
           {
                  if( time_count0=PWM_motor_Control0_0)
                        {
                           P2_1=0;
                           PWM_motor_time_Control0=1;
                           //time_count0=-1;
                        }
           }
/******************电机1************************************************/
        if(PWM_motor_time_Control1)
          {
              if( time_count1=PWM_motor_Control1_1)
                        {
                           P2_3=1;
                           PWM_motor_time_Control1=0;
                           //time_count1=-1;
                        }
          }
        else
           {
                  if( time_count1=PWM_motor_Control1_0)
                        {
                           P2_3=0;
                           PWM_motor_time_Control1=1;
                          // time_count1=-1;
                        }
           }


    time_count0++;
        time_count1++;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2011-8-29 23:33:37 | 显示全部楼层
楼主你好,问下你的这个电路是个什么样子的电路呀,软件有时候不是问题,巧妙的经典有时候关键在硬件上。希望能大家分享一下这个经典。

出0入0汤圆

发表于 2011-9-2 08:30:22 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-9-2 09:08:13 | 显示全部楼层
我刚开发了一套系统,一个STM32控制16台步进电机,最高频率10K,100档调速,主从机架构,用CAN通信同步,能控制几百台电机同步动作

出0入0汤圆

发表于 2011-9-2 09:13:03 | 显示全部楼层
我们用 51,控制20个步进。20个电机,可单独设定速度。非通讯

出0入0汤圆

发表于 2011-9-2 09:22:29 | 显示全部楼层
回复【4楼】liulingo  
我们用 51,控制20个步进。20个电机,可单独设定速度。非通讯
-----------------------------------------------------------------------

用51能做到什么样的指标啊,最高频率,速度分档,我的也是能单独设定速度的,还能做一些基本的动作,组合起来效果比较好

出0入0汤圆

发表于 2011-9-2 09:33:01 | 显示全部楼层
回复【4楼】liulingo  
我们用 51,控制20个步进。20个电机,可单独设定速度。非通讯
-----------------------------------------------------------------------
普通51一共32个IO,你20个电机,直接靠驱动器的话1个方向1个脉冲,20*2就40个IO了。果然高手~

出0入0汤圆

发表于 2011-9-2 09:59:05 | 显示全部楼层
估计是C8051F吧,我用STM32控制16个步进电机都已经是极限了,关键还得能够同步,16路10K频率100档我觉得很不容易做啊

出0入0汤圆

发表于 2011-9-2 13:17:08 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2011-9-2 21:24:59 | 显示全部楼层
你好楼主,我是个初学者,能给个电路图研究研究吗?

出0入0汤圆

发表于 2011-9-4 10:28:38 | 显示全部楼层
正在做遥控下车,嘿嘿。学习一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 15:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表