C51单片机测量电机转速keil代码
时间: 2023-07-23 12:40:46 浏览: 290
基于51单片机的c语言程序 电机转速测量与PWM控制
5星 · 资源好评率100%
以下是基于C51单片机的Keil代码示例,用于测量电机转速:
```C
#include <reg52.h>
#include <stdio.h>
#define PI 3.14159
#define PPR 1000 //编码器每转的脉冲数
#define SAMPLE_TIME 1000 //采样周期,单位ms
unsigned int cnt = 0; //计数器
unsigned int rpm = 0; //电机转速,单位rpm
void timer0_init() //定时器0初始化
{
TMOD |= 0x01; //16位定时器模式
TH0 = 0xFC; //设置计数器初值,定时1ms
TL0 = 0x66;
ET0 = 1; //开定时器0中断
EA = 1; //开全局中断
TR0 = 1; //启动定时器0
}
void timer0_isr() interrupt 1 //定时器0中断服务程序
{
cnt++; //计数器加1
}
void main()
{
timer0_init(); //定时器0初始化
while(1)
{
if(cnt >= SAMPLE_TIME) //达到采样周期
{
cnt = 0; //计数器清零
rpm = (unsigned int)((float)PPR / cnt * 60.0 / 1000.0); //计算转速
printf("RPM=%d\n", rpm); //输出转速
}
}
}
```
在上述代码中,我们使用了定时器0来定时计数,同时使用外部中断来触发定时器0中断服务程序。在中断服务程序中,我们对计数器进行累加,当计数器达到采样周期时,我们就可以计算出电机的转速,并将转速输出到串口通信中。该程序的输出结果为电机的转速,单位为rpm。
阅读全文