找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2693|回复: 4
收起左侧

51怎样控制两个步进电机同时转

[复制链接]
ID:242890 发表于 2017-12-3 10:59 | 显示全部楼层 |阅读模式
while(1)
{
    步进电机1慢速转;
    步进电机2快速转;
}

用定时器应该怎样来写?求解大神
回复

使用道具 举报

ID:60379 发表于 2017-12-3 11:33 | 显示全部楼层
/****************《51单片机轻松入门-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★★★★★★★★★★★★★★★
// 程序功能:上电后顺转200步,然后反转200步,如此循环。
// 使用P20、P21、P22、P23口驱动电机
  ★★★★★★★★★★★★★★★★★★★★★★★★*/
#include "STC15W4K.H "
unsigned char code BiaoGe[8]={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09};
                                        // 表格,换算成二进制 1000,1100,0100, 0110 ,0010,0011, 0001 1001
                                        // P2口输出低4位驱动电机   A  B  /A  /B      
                                        // 1——2相励磁,发8次脉冲(顺序输出上面表格)转动4步
void delay3ms(void)
{
        unsigned char i,j,k;
        for(i=1;i>0;i--)         // 注意后面没分号
        for(j=65;j>0;j--)        // 注意后面没分号
        for(k=254;k>0;k--);      // 注意后面有分号         
}
void delay1s(void)
{
   unsigned char i,j,k;
   for(i=85;i>0;i--)        // 注意后面没分号
   for(j=254;j>0;j--)       // 注意后面没分号
   for(k=255;k>0;k--);      // 注意后面有分号
}                                         

void PROT_Init(void)
{          
        P2M1 = 0x80;     // 1000 0000   P2.0、P2.1、P2.2、P2.3、接驱动功率管,推挽输出
        P2M0 = 0x0f;         // 0000 1111   P2.7 接接霍尔传感器信号输入,高阻输入
}
void shun200()                           // 顺转200步
{
        unsigned int i;
        unsigned char n;
        n=0;
        for(i=0;i<400;i++)         // 200步,i/2为实际步数
        {        
                P2=BiaoGe[n]|0xf0;           // 不影响P2口高4位               
                delay3ms();
                n=n+1;       
                if (n>7)
                {                           
                n=0;
                }                       
        }
        P2&=0xf0;                                          // 保证电机绕组断电
}
void fan200()                                          // 反转200步
{
        unsigned int i;
        unsigned char n;
        n=8;                       
        for(i=0;i<400;i++)            // 200步,i/2为实际步数
        {        
            n=n-1;               
                P2=BiaoGe[n]|0xF0;              // 不影响P2口高4位                       
                delay3ms();
                if (n==0)
                {                            
                n=8;
                }                       
        }
        P2&=0xf0;                                          // 保证电机绕组断电        
}
void main(void)                                  
{                   
        PROT_Init();                      // 初始化端口       
        while(1)
        {
                shun200();
                delay1s();
                fan200();
                delay1s();
        }       
}

评分

参与人数 1黑币 +5 收起 理由
BYSJ20171201 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:242890 发表于 2017-12-3 13:27 | 显示全部楼层
无量寿经 发表于 2017-12-3 11:33
/****************《51单片机轻松入门-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★ ...

不是,这样只是一个步进电机。我说的是两个步进电机,他们按各自不同的速度同时运转
回复

使用道具 举报

ID:257073 发表于 2017-12-4 10:30 | 显示全部楼层
考虑写一个每次转固定步的函数,然后定时中断到该函数,在定时中进行判定是否旋转,即可实现每一次中断两个电机是否旋转,依此,两个电机速度就不同了
回复

使用道具 举报

ID:256450 发表于 2017-12-4 11:00 | 显示全部楼层
用两个定时器计数变量控制分别控制两组引脚的电平变化
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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