|

楼主 |
发表于 2017-6-23 08:45:32
|
显示全部楼层
电路图借用网友的图片,就是三相全桥,我用的51单片机P口用了一片ULN2003驱动,右边是过零检测电路,我试了不行!
非专业编程,代码将就看吧。
/*
单片机STC11F08XE 晶振12M
*/
#include <reg51.h>
sbit k = P2^7;
sbit h1 = P2^0;
sbit l1 = P2^1;
sbit h2 = P2^2;
sbit l3 = P2^3;
sbit h3 = P2^4;
sbit l2 = P2^5;
void delay(unsigned int t);
//unsigned int s = 15;
unsigned int j = 0;
bit flag = 0;
void main()
{
P2 = 0xff;
TMOD = 0x01;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
j = 20000; //起始速度
while(1)
{
while(!flag)
{
h3 = 1;
h1 = 0;
l2 = 0;
delay(j);
l2 = 1;
h1 = 0;
l3 = 0;
delay(j);
h1 = 1;
h2 = 0;
l3 = 0;
delay(j);
l3 = 1;
h2 = 0;
l1 = 0;
delay(j);
h2 = 1;
h3 = 0;
l1 = 0;
delay(j);
l1 = 1;
h3 = 0;
l2 = 0;
delay(j);
}
flag = 0;
if((j<10000)&&(j>=5000))
j -= 200;
else if((j<5000)&&(j>=1000))
j -= 50;
else if((j<1000)&&(j>=320))
j -= 1;
else if(j<=320)
j = 320;
else
j -= 1000;
}
}
void timer0() interrupt 1
{
unsigned char cnt;
TH0 = (65536-800)/256;
TL0 = (65536-800)%256;
cnt++;
if(cnt>=30) //加速时间参数
{
cnt = 0;
flag = 1;
}
}
void delay(unsigned int t)
{
while(t--);
} |
评分
-
1
查看全部评分
-
|