查看: 1364|回复: 0
打印 上一主题 下一主题

直流电机调速控制实例

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-11 16:33:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
元件:
一个单片机。
一个调速驱动器。
三个电机:电机K,电机Y,电机J,按12V
一个工作开关Z:Z接通后,电机按逻辑关系工作, Z断开后三个电机停止工作。
两个行程开关:开关S,开关X,均为长开式。
两个调速的按钮,分别控制三个电机的速度。调速 按钮直接安装到调速驱动器上。
外加:两个充电电池和和一个充电器,12V
逻辑关系:
(三个电机只有有一个需要有正反转)
1.开关X通后(通一下后),开关Z处于通位置时, 电机Y正转,电机J、K启动
2.开关S通后(通一下后),开关Z处于通位置时, 电机K停止,电机J停止,电机Y反转
3.开关Z断开后,三个电机均停止工作
其他说明:
1.调速控制器上不装电机和开关,只留下接线口就 行。
2.调速按钮直接安装到驱动器上,因为调速按钮在 工作时不使用,只在调试时使用


#include<reg52.h>
#define uchar unsigned char

unsigned char N=0;
unsigned char X=5;        //占空比初始值为50%
unsigned char Y=3;

int a,b;

sbit P2_2=P2^2;//M1加速
sbit P2_3=P2^3;//M2减速

sbit P2_0=P3^0;//M1启动
sbit P2_1=P3^1;//M1停止

sbit PWMA=P3^7;
sbit PWMB=P3^6;

void del()  /*延时0.2秒*/
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}


void scjs(void)interrupt 3
{
TH1=0XC6;
TL1=0x17;
if(P2_2==0)
{Y++;
del();
}                  
if(P2_3==0)
{Y--;
del();
}
switch(Y)
{
case 0: X=0;  break;
case 1: X=5;  break;
case 2: X=10; break;
case 3: X=15; break;
case 4: X=20; break;
case 5: X=25; break;
case 6: X=40; break;
case 7: X=60; break;
case 8: X=80; break;
case 9: X=99; break;
default:      break;
}

b++;
}

main()
{
TMOD=0x00;
IE=0X88;
TH1=0XC6;
TL1=0X17;
TR0=1;
TR1=1;
a=0;
b=0;
while(1)
{
PWMB=PWMA=1;
while(1)
{
b=0;
while(!b);
if (N==X)
PWMB=PWMA=0;
if (N==100)break;
if(P2_0==0)//M1启动
         {
          P1=0X05;
          }
if(P2_1==0)//M1停止
          {
           P1=0X0E;
          }

N++;
}
N=0;
}

}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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