51直行调速代码stc89c52,两个双相电机分别控制两个轮子的速度,不需要使能端
时间: 2023-10-07 14:07:51 浏览: 74
51单片机控制电机的转速转向以及启停
以下是一份简单的STC89C52控制双相电机的代码,其中P1.0和P1.1分别连接到电机的A相和B相。此代码使用定时器0来产生PWM波形,以调整电机速度。
```c
#include <reg52.h>
sbit motorA = P1^0; //电机A相
sbit motorB = P1^1; //电机B相
void init_pwm() //初始化PWM
{
TMOD |= 0x01; //定时器0工作在模式1
TH0 = 0xFC; //定时器0初值,50us
TL0 = 0x66;
ET0 = 1; //允许定时器0中断
TR0 = 1; //启动定时器0
}
void main()
{
init_pwm(); //初始化PWM
while(1)
{
motorA = 1; //A相正转
motorB = 0; //B相反转
for(int i=0; i<100; i++) //占空比从0%到100%
{
TH0 = 0xFC; //定时器0初值,50us
TL0 = 0x66;
while(!TF0); //等待定时器0溢出
TF0 = 0; //清除定时器0溢出标志
if(i < 50) motorA = 0; //占空比小于50%,A相关闭
else motorA = 1; //占空比大于等于50%,A相打开
}
motorA = 0; //A相关闭
motorB = 1; //B相正转
for(int i=0; i<100; i++) //占空比从0%到100%
{
TH0 = 0xFC; //定时器0初值,50us
TL0 = 0x66;
while(!TF0); //等待定时器0溢出
TF0 = 0; //清除定时器0溢出标志
if(i < 50) motorB = 0; //占空比小于50%,B相关闭
else motorB = 1; //占空比大于等于50%,B相打开
}
motorB = 0; //B相关闭
}
}
void timer0() interrupt 1 //定时器0中断服务程序
{
motorA = 0;
motorB = 0;
}
```
在此代码中,我们使用定时器0来产生PWM波形,以控制电机速度。我们使用两个for循环来控制电机的占空比,以改变电机的速度。由于我们不需要使能端,因此我们没有使用任何外部电路来控制电机的使能。
阅读全文