stc直流电机转速测量代码c语言
时间: 2023-08-12 19:40:47 浏览: 76
以下是一份使用C语言编写的STC直流电机转速测量代码:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN_A = P1^0; // A相输入
sbit IN_B = P1^1; // B相输入
sbit IN_Z = P1^2; // Z相输入
sbit OUT_EN = P1^3; // 输出使能
sbit OUT_A = P1^4; // A相输出
sbit OUT_B = P1^5; // B相输出
uint count = 0; // 计数器
uint speed = 0; // 转速
void delay(uint t) // 延时函数
{
uint i;
for(i = 0; i < t; i++);
}
void main()
{
TMOD = 0x01; // 定时器0工作模式1
TH0 = 0; // 定时器0高字节清零
TL0 = 0; // 定时器0低字节清零
ET0 = 1; // 定时器0中断使能
TR0 = 1; // 定时器0启动
EA = 1; // 总中断使能
OUT_EN = 1; // 输出使能
OUT_A = 1; // A相输出高电平
OUT_B = 0; // B相输出低电平
while(1)
{
delay(1000); // 延时1s
speed = count * 60 / 200; // 计算转速
count = 0; // 计数器清零
}
}
void timer0() interrupt 1 // 定时器0中断服务函数
{
static uchar state = 0;
static uint time = 0;
time++;
switch(state)
{
case 0:
if(IN_A == 0)
{
state = 1;
TH0 = 0;
TL0 = 0;
time = 0;
}
break;
case 1:
if(IN_B == 0)
{
state = 2;
count++;
}
else if(time >= 2000)
{
state = 0;
}
break;
case 2:
if(IN_A == 1)
{
state = 3;
TH0 = 0;
TL0 = 0;
time = 0;
}
break;
case 3:
if(IN_B == 1)
{
state = 0;
count++;
}
else if(time >= 2000)
{
state = 0;
}
break;
default:
state = 0;
break;
}
}
```
该代码利用STC单片机的定时器中断来进行直流电机的转速测量,通过计算计数器的值来得到转速。具体实现原理可以参考代码注释。
阅读全文