51小车双电机pwm调速代码
时间: 2023-09-30 20:09:05 浏览: 79
以下是51小车双电机pwm调速代码的示例:
``` c
#include <reg52.h>
// 定义端口和引脚号
sbit ENA=P1^0;
sbit ENB=P1^1;
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^4;
sbit IN4=P1^5;
// 定义PWM占空比寄存器
unsigned int PWM1=0;
unsigned int PWM2=0;
void delayms(unsigned int ms) // 延时函数
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void PWM() // PWM调速函数
{
unsigned int i;
for(i=0;i<100;i++) // 循环100次,实现从0到100%的占空比
{
PWM1=i;
PWM2=i;
TH0=256-(PWM1*2+100)/4; // 计算PWM占空比对应的TH0值
TL0=TH0;
TH1=256-(PWM2*2+100)/4;
TL1=TH1;
delayms(10); // 每隔10ms调整一次占空比
}
}
void main()
{
TMOD=0x11; // 启动定时器1和定时器2
TH0=TL0=TH1=TL1=0; // TH0、TL0、TH1、TL1初始值为0
EA=1; // 开启总中断
ET0=1; // 开启定时器0中断
ET1=1; // 开启定时器1中断
TR0=1; // 启动定时器0
TR1=1; // 启动定时器1
ENA=1; // 使能电机A
ENB=1; // 使能电机B
IN1=1; // IN1和IN3为正转方向
IN3=1;
IN2=0; // IN2和IN4为反转方向
IN4=0;
PWM(); // 调用PWM函数
}
void time0() interrupt 1 // 定时器0中断函数
{
TH0=256-(PWM1*2+100)/4; // 计算PWM占空比对应的TH0值
TL0=TH0;
}
void time1() interrupt 3 // 定时器1中断函数
{
TH1=256-(PWM2*2+100)/4;
TL1=TH1;
}
```
在此示例中,使用了两个定时器来实现PWM调速功能。在`PWM()`函数中,通过循环来逐渐增加PWM占空比,并在每次循环中通过计算得到对应的TH0和TH1值,实现PWM输出。在`time0()`和`time1()`中断函数中,根据当前PWM占空比计算TH0和TH1的值,并将其赋值给相应的寄存器,实现输出PWM波形。
阅读全文