首先你应该知道你的转速范围是多大?每秒几十转还是几百转甚至上千转?
不同的转速对应不同的设计.
可以使用51的定时器/计数器来实册枝现脉冲灶姿辩捕获计数.比如使用T0.
设置T0的工作模式,一般可用自动重装8位计数的模式2.
在T0的溢出中断中,设计二重计数cntT0.比如T0为200转溢出,则中断时再累加一次即累加了200转.
设置T1为定时器模式,可以定时1S或10ms(计为t),由你转速及程序复杂度决定.
在T1中断程序中,读取cntT0的值和T0的值(计算为rt),则转速为rt/t
#include <reg52.h >#define uchar unsigned char
#define uint unsigned int
sbit s2=P3^7
sbit s3=P3^6
sbit fm=P2^3
uchar pwm,num
void delay(uint ms)
{
uchar i
while(ms--)
{
for(i=0i<120i++)
}
}
void keyscan()
{
if(s2==0)
{
delay(80)
if(s2==0)
{
if(pwm<32)
{
pwm++
delay(150)
}
else //如果禅纳冲大于32 蜂鸣器想茄桐
{
bee( )
}
}
}
if(s3==0)
{
delay(80)
if(s3==0)
{
if(pwm>1)
{
pwm--
delay(50)
}
else //如贺歼果小于1 蜂鸣器想
{
bee( )
}
}
}
}
void init_t0( )
{
TMOD=0x01
TH0=(65536-500)/256 //500ms
TL0=(65536-500)%256
EA=1
ET0=1
TR0=1
}
void t0( ) interrupt 1
{
TR0=0//关计时器
TH0=(65536-500)/256
TL0=(65536-500)%256
num++
if(num>32)
{
num=0
}
if(num<=pwm )
{
P1=0xff
}
else
{
P1=0x00
}
TR0=1
}
void main( )
{
init_t0( )
num=0
pwm=0
while(1)
{
keyscan()
}
}
不知道你是要写转速闭环控制程序段猛晌还是功能测试时计算转速。如测试时计算转握锋速:
1.可用转速计直接测试
2.可用示波器看反电动势波形的频率进行计算。频率/极对数*60即为每分钟转速。
如是写转速闭环知告控制程序,这个比较复杂。分为加速/减速/匀速三种情况来写。
一般为连续换12次相/2即为一圈时间(以三相六极匀速为例)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)