51直行调速代码stc89c52,两个双相电机分别控制两个轮子,使用pwm调速不需要使能端
时间: 2024-05-13 12:18:57 浏览: 74
51单片机实现pwm调速
以下是STC89C52的PWM调速代码示例,其中使用了PCA模块产生PWM信号来控制电机速度:
```
#include <reg52.h>
sbit MOTOR1_A = P2^0; //定义电机1正转引脚
sbit MOTOR1_B = P2^1; //定义电机1反转引脚
sbit MOTOR2_A = P2^2; //定义电机2正转引脚
sbit MOTOR2_B = P2^3; //定义电机2反转引脚
void PCA_Init() //PCA初始化函数
{
CCON = 0x40; //开启PCA计数器
CMOD = 0x00; //设置PCA时钟源为系统时钟
CL = 0x00; //清零PCA计数器低字节
CH = 0x00; //清零PCA计数器高字节
CCAPM0 = 0x42; //设置PCA通道0为PWM模式
CCAPM1 = 0x42; //设置PCA通道1为PWM模式
CCAP0H = 0x80; //设置PCA通道0的高字节
CCAP1H = 0x80; //设置PCA通道1的高字节
}
void Motor1_Ctrl(unsigned char pwm) //控制电机1
{
if(pwm == 0)
{
MOTOR1_A = 0;
MOTOR1_B = 0;
}
else if(pwm > 0)
{
MOTOR1_A = 1;
MOTOR1_B = 0;
CCAP0H = pwm; //设置电机1的PWM占空比
}
else
{
MOTOR1_A = 0;
MOTOR1_B = 1;
CCAP0H = -pwm; //设置电机1的PWM占空比
}
}
void Motor2_Ctrl(unsigned char pwm) //控制电机2
{
if(pwm == 0)
{
MOTOR2_A = 0;
MOTOR2_B = 0;
}
else if(pwm > 0)
{
MOTOR2_A = 1;
MOTOR2_B = 0;
CCAP1H = pwm; //设置电机2的PWM占空比
}
else
{
MOTOR2_A = 0;
MOTOR2_B = 1;
CCAP1H = -pwm; //设置电机2的PWM占空比
}
}
void main()
{
PCA_Init(); //初始化PCA
while(1)
{
Motor1_Ctrl(50); //控制电机1正转,占空比为50%
Motor2_Ctrl(-50); //控制电机2反转,占空比为50%
}
}
```
在该示例代码中,通过设置PCA模块的通道0和通道1为PWM输出模式,并通过CCAP0H和CCAP1H寄存器设置PWM占空比,从而实现对电机速度的控制。同时还定义了Motor1_Ctrl和Motor2_Ctrl函数,用于控制两个电机的正反转方向。在使用PWM调速时,不需要使用使能端,只需要控制PWM信号的占空比即可。
阅读全文