我简单说下思路:利用T0计时器中断在设置切换时间,切换一个转换标志位用来控制电机运行方式。
方法很简单,让我们来做个实验,程序如下:
#include
unsigned char fangshi=1;
unsigned int time1=0;
sbit Y1=P0^0; //步进电机运行(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit Y2=P0^1; //直流电机运行
main()
{
unsigned char i;
//自检测T0时间设置
ET0=1;
TMOD|=0x01;
TH0=0XFC; //1ms中断扫描
TL0=0X66;
IT0=1; //下降沿触发
TR0=1; //开启扫描
while(1)
{
while(fangshi)
{
Y1=~Y1; //步进电机取反
for(i=50;i>0;i--); //设置你的脉冲间隔时间
}
Y1=1; //步进电机关闭
while(!fangshi)Y2=0; //直流电机启动
Y2=1;
}
}
void counter1(void) interrupt 1 //T0计时器中断
{
time1++;
if(time1<180)fangshi=1; //180对应10秒,先步进电机运行时间在这改动
if(time1>=180)
{
fangshi=0;
if(time1>=360) //在运行直流电机运行时间在这改动
time1=0; //切换到步进电机运行方式
}
}
硬件方面可以用三极管驱动小电压步进电机和小电压直流电机;如果是大功率电机,单片机能简单的用继电器控制控制直流电机,但不能控制大功率步进电机,大功率步进电机控制电路相对复杂,我就不说了
那就分时咯
分时控制
用状态机 程序自己写