51直行调速代码stc89c52,两个双相电机分别控制两个轮子,使用pwm调速不需要使能端
时间: 2024-04-30 22:24:49 浏览: 88
51单片机实现pwm调速
以下是一个基本的双相电机PWM调速程序示例,适用于STC89C52单片机:
```c
#include <STC89C5xRC.H>
sbit PWM_OUT1 = P1^2; // 定义P1.2为PWM1输出
sbit PWM_OUT2 = P1^3; // 定义P1.3为PWM2输出
void PWM_Init(void)
{
TMOD &= 0xF0; // 设置定时器1为16位自动重载模式
TMOD |= 0x01;
TH1 = 0xFD; // 定时器1初值,频率为1kHz
TL1 = 0xFD;
ET1 = 1; // 开定时器1中断
TR1 = 1; // 启动定时器1
}
void PWM1_SetDuty(unsigned char duty)
{
CCAP0H = 0xFF - duty; // 设置占空比
}
void PWM2_SetDuty(unsigned char duty)
{
CCAP1H = 0xFF - duty; // 设置占空比
}
void main()
{
PWM_Init(); // 初始化PWM
PWM_OUT1 = 0; // 将PWM1输出初始化为低电平
PWM_OUT2 = 0; // 将PWM2输出初始化为低电平
while (1)
{
unsigned char duty = 128; // 设置占空比为50%
PWM1_SetDuty(duty); // 设置PWM1占空比
PWM2_SetDuty(duty); // 设置PWM2占空比
// 此处添加控制代码,控制电机转速
}
}
void Timer1_ISR() interrupt 3
{
PWM_OUT1 = !PWM_OUT1; // 反转PWM1输出
PWM_OUT2 = !PWM_OUT2; // 反转PWM2输出
}
```
在这个示例程序中,我们使用了定时器1的16位自动重载模式来产生1kHz的PWM信号。我们可以通过调整占空比来控制电机的转速,占空比越大,电机转速越快。程序中使用了两个函数`PWM1_SetDuty()`和`PWM2_SetDuty()`来分别设置PWM1和PWM2的占空比,以控制两个电机的转速。在`main()`函数中,我们可以添加控制代码,根据需要调整占空比,控制电机转速。
这个示例程序中没有使用使能端来控制电机,因为我们可以通过控制PWM信号的占空比来控制电机转速,从而实现电机的开关控制。如果需要实现电机的正反转控制,可以使用H桥电路来控制电机的方向,但这超出了本文的讨论范围。
阅读全文