51LPC系列单片机用于控制交流电机
3 完整的LPC+Triac+Motor(AC)电路实现
在P87LPC761 和Triac的控制应用中,整个系统对电源消耗很低并具有高抗干扰性能,故可以通过阻容降压和单相半波整流由市电直接供电,而不需要昂贵且体积大的变压器,外部零件极少。此方案成本低。图5所示是一个感性负载的通用电路,同时适合阻性负载。Triac可使用BTA216 600E。像图4那样,通过查询P87LPC761的比较器来检测负载电流过零,并重新触发Triac。也可用中断驱动。启动电机时用电压过零测量并触发 Triac的门级脉冲,以减少电磁干扰,并可从主循环的开始进行控制和重定义在启负载之间软件等待整个半周期。本例在复位后通过用户按键开启负载,通过按键可进行相角控制以控制电机的不同转速。如图5所示,LED发光管闪烁的快慢能体现电机转速,LED闪烁越快电机转动越快,反之则越慢;电机停转,LED 熄灭。此电路稍经修改就可以用于其它许多类似的场合。
源程序清单:
该软件在Keil C51 V6.02上编译通过,在目标板上运动正常。如果用其它编译器必须稍加修改。
#includereg761.h>
#define uchar unsigned char
#define uint unsigned int
uchar s,x,y=0;
void timer0(void)interrupt 1 using 1 {/*T0中断服务程序*/
x=x+1;
if(x/10>s){
if(y= =0){P1=P10xfb; /*LED点亮*/
x=0;y=1;}
else {P1=P1|0x04; /*LED熄灭*/
y=0;x=0;}}
TF0=0;TH0=-(28/256);
TL0=-(28%256);
}
void speed(s){ /*电机转换控制子程序*/
uchar pulsecount, pulseduration=0;
uint i=0;
uint j=0;
if (((CMP10x02))!(CMP20x02)/*查询比较器*/
{for (i=0;is;i++)
{for(j=0;j210;j++) ;} /*延时触发*/
CMP1=CMP10xfc;
CMP2=CMP20xfc;
pulsecount=1;
{P1=P10xfe;
pulseduration=12; /*触发脉冲宽度*/
while(pulseduration){pulseduration- -;}
P1=P1|0x01;
pulsecount- -;
}
}
}
评论