求指导,要求做一个51单片机的转速计的c程序,脉冲输入后,可以在4位led上显示转速,但是我不是很明白

求指导,要求做一个51单片机的转速计的c程序,脉冲输入后,可以在4位led上显示转速,但是我不是很明白,第1张

从LZ描述看来,测速的硬隐缺件已经具备,只是不明白如何测量脉冲计数并计算转速.

首先你应该知道你的转速范围是多大?每秒几十转还是几百转甚至上千转?

不同的转速对应不同的设计.

可以使用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即为一圈时间(以三相六极匀速为例)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12344899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存