![](https://csdnimg.cn/release/download_crawler_static/87127170/bg1.jpg)
单片机产生 PWM 信号控制直流电机调速的源代码
本例程利用 2051 的 T0 产生双路 PWM 信号,推动 L293D 或 L298N 为直流电机调速,程序已通
过调试。接 L298N 时相应的管脚上最好接上 10K 的上拉电阻。
有什么不对的地方欢迎大家批评指正!
/* =======直流电机的 PWM 速度控制程序======== */
/* 晶振采用 11.0592M,产生的 PWM 的频率约为 91Hz */
#include<reg51.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit en1=P1^0; /* L298 的 Enable A */
sbit en2=P1^1; /* L298 的 Enable B */
sbit s1=P1^2; /* L298 的 Input 1 */
sbit s2=P1^3; /* L298 的 Input 2 */
sbit s3=P1^4; /* L298 的 Input 3 */
sbit s4=P1^5; /* L298 的 Input 4 */
uchar t=0; /* 中断计数器 */
uchar m1=0; /* 电机 1 速度值 */
uchar m2=0; /* 电机 2 速度值 */
uchar tmp1,tmp2; /* 电机当前速度值 */
/* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1) /* 电机 1 的处理 */
{
m1=abs(speed); /* 取速度的绝对值 */
if(speed<0) /* 速度值为负则反转 */
{
s1=0;
s2=1;
}
else /* 不为负数则正转 */
{
s1=1;
s2=0;
}