51直行调速代码stc89c52,两个双相电机分别控制两个轮子,使用pwm调速不需要使能端
时间: 2024-05-06 21:17:34 浏览: 9
下面是使用STC89C52单片机实现双相电机的PWM调速代码,其中两个电机分别连接在P1口和P2口:
```
#include <reg52.h>
sbit M1A = P1^0; // M1A控制引脚
sbit M1B = P1^1; // M1B控制引脚
sbit M2A = P2^0; // M2A控制引脚
sbit M2B = P2^1; // M2B控制引脚
void main()
{
unsigned int i, j;
while(1)
{
// 电机1正转
for(i=0; i<1000; i++)
{
M1A = 1;
M1B = 0;
for(j=0; j<100; j++) // PWM调速
{
if(j<i)
M1A = 0;
else
M1A = 1;
delay(1);
}
}
// 电机1反转
for(i=0; i<1000; i++)
{
M1A = 0;
M1B = 1;
for(j=0; j<100; j++) // PWM调速
{
if(j<i)
M1B = 0;
else
M1B = 1;
delay(1);
}
}
// 电机2正转
for(i=0; i<1000; i++)
{
M2A = 1;
M2B = 0;
for(j=0; j<100; j++) // PWM调速
{
if(j<i)
M2A = 0;
else
M2A = 1;
delay(1);
}
}
// 电机2反转
for(i=0; i<1000; i++)
{
M2A = 0;
M2B = 1;
for(j=0; j<100; j++) // PWM调速
{
if(j<i)
M2B = 0;
else
M2B = 1;
delay(1);
}
}
}
}
//延时函数
void delay(unsigned int n)
{
unsigned int i, j;
for(i=0; i<n; i++)
for(j=0; j<125; j++);
}
```
其中,使用for循环实现PWM调速,i表示占空比,j表示PWM周期,在每个周期内根据占空比改变电机控制引脚的电平状态。需要注意的是,由于STC89C52单片机的PWM调速精度较低,因此需要使用较小的PWM周期来实现较高的调速精度。