标题:
51怎样控制两个步进电机同时转
[打印本页]
作者:
lebronda
时间:
2017-12-3 10:59
标题:
51怎样控制两个步进电机同时转
while(1)
{
步进电机1慢速转;
步进电机2快速转;
}
用定时器应该怎样来写?求解大神
作者:
无量寿经
时间:
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();
}
}
作者:
lebronda
时间:
2017-12-3 13:27
无量寿经 发表于 2017-12-3 11:33
/****************《51单片机轻松入门-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★ ...
不是,这样只是一个步进电机。我说的是两个步进电机,他们按各自不同的速度同时运转
作者:
amazon00000
时间:
2017-12-4 10:30
考虑写一个每次转固定步的函数,然后定时中断到该函数,在定时中进行判定是否旋转,即可实现每一次中断两个电机是否旋转,依此,两个电机速度就不同了
作者:
JYL007
时间:
2017-12-4 11:00
用两个定时器计数变量控制分别控制两组引脚的电平变化
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1