2个回答
展开全部
给你个简单的PWM控制的可调转速电机驱动(L298N模块),也不能算是个PWM了,只是延时实现而已。。。电路图我这里贴不上去,网速太次,要的话把你邮箱告我下就好了,我发给你
#include<reg51.h>
/*定义按键和L298N引脚*/
sbit BZ1=P0^0; sbit IN1=P2^0;
sbit BZ2=P0^1; sbit IN2=P2^1;
sbit BF1=P0^2; sbit IN3=P2^2;
sbit BF2=P0^3; sbit IN4=P2^3;
sbit BJIA1=P0^4;
sbit BJIA2=P0^5;
sbit BJIAN1=P0^6;
sbit BJIAN2=P0^7;
/*函数声明*/
void delay(t);
void Z1();
void Z2();
void F1();
void F2();
void JIA1();
void JIA2();
void JIAN1();
void JIAN2();
void change();
char W=0;//W用来在调速状态下选择电机;
int t1=80,t2=80;
/*延时函数*/
void delay(int t)
{while(t--);}
/*正转函数1*/
void Z1()
{IN1=1;IN2=0;W=1;}
/*正转函数2*/
void Z2()
{IN3=1;IN4=0;W=1;}
/*反转函数1*/
void F1()
{IN1=0;IN2=1;W=2;}
/*反转函数2*/
void F2()
{IN3=0;IN4=1;W=2;}
/*加速函数1*/
void JIA1()
{t1+=10;}
/*加速函数2*/
void JIA2()
{t2+=10;}
/*减速函数1*/
void JIAN1()
{t1-=10;}
/*减速函数2*/
void JIAN2()
{t2-=10;}
/*停止*/
void TING()
{IN1=IN2=IN3=IN4=0;}
/*制动函数*/
void ZHI()
{IN1=IN2=IN3=IN4=1;}
/*按键信号*/
void change()
{
if(BZ1==0){Z1();delay(t1);TING();delay(255-t1);}
if(BZ2==0){Z2();delay(t2);TING();delay(255-t2);}
if(BF1==0){F1();delay(t1);TING();delay(255-t1);}
if(BF2==0){F2();delay(t2);TING();delay(255-t2);}
if(BJIA1==0&&t1<235){delay(5);JIA1();}
if(BJIA2==0&&t2<235){delay(5);JIA2();}
if(BJIAN1==0&&t1>80){delay(5);JIAN1();}
if(BJIAN2==0&&t2>80){delay(5);JIAN2();}
if(BZ1==0&&(BZ2!=0&&BF1!=0&&BF2!=0)){delay(255);}
if(BZ2==0&&(BZ1!=0&&BF1!=0&&BF2!=0)){delay(255);}
if(BF1==0&&(BZ1!=0&&BZ2!=0&&BF2!=0)){delay(255);}
if(BF2==0&&(BZ1!=0&&BZ2!=0&&BF1!=0)){delay(255);}
}
/*主程序*/
void main()
{
P0=0xff;
while(1)
{change();}
}
#include<reg51.h>
/*定义按键和L298N引脚*/
sbit BZ1=P0^0; sbit IN1=P2^0;
sbit BZ2=P0^1; sbit IN2=P2^1;
sbit BF1=P0^2; sbit IN3=P2^2;
sbit BF2=P0^3; sbit IN4=P2^3;
sbit BJIA1=P0^4;
sbit BJIA2=P0^5;
sbit BJIAN1=P0^6;
sbit BJIAN2=P0^7;
/*函数声明*/
void delay(t);
void Z1();
void Z2();
void F1();
void F2();
void JIA1();
void JIA2();
void JIAN1();
void JIAN2();
void change();
char W=0;//W用来在调速状态下选择电机;
int t1=80,t2=80;
/*延时函数*/
void delay(int t)
{while(t--);}
/*正转函数1*/
void Z1()
{IN1=1;IN2=0;W=1;}
/*正转函数2*/
void Z2()
{IN3=1;IN4=0;W=1;}
/*反转函数1*/
void F1()
{IN1=0;IN2=1;W=2;}
/*反转函数2*/
void F2()
{IN3=0;IN4=1;W=2;}
/*加速函数1*/
void JIA1()
{t1+=10;}
/*加速函数2*/
void JIA2()
{t2+=10;}
/*减速函数1*/
void JIAN1()
{t1-=10;}
/*减速函数2*/
void JIAN2()
{t2-=10;}
/*停止*/
void TING()
{IN1=IN2=IN3=IN4=0;}
/*制动函数*/
void ZHI()
{IN1=IN2=IN3=IN4=1;}
/*按键信号*/
void change()
{
if(BZ1==0){Z1();delay(t1);TING();delay(255-t1);}
if(BZ2==0){Z2();delay(t2);TING();delay(255-t2);}
if(BF1==0){F1();delay(t1);TING();delay(255-t1);}
if(BF2==0){F2();delay(t2);TING();delay(255-t2);}
if(BJIA1==0&&t1<235){delay(5);JIA1();}
if(BJIA2==0&&t2<235){delay(5);JIA2();}
if(BJIAN1==0&&t1>80){delay(5);JIAN1();}
if(BJIAN2==0&&t2>80){delay(5);JIAN2();}
if(BZ1==0&&(BZ2!=0&&BF1!=0&&BF2!=0)){delay(255);}
if(BZ2==0&&(BZ1!=0&&BF1!=0&&BF2!=0)){delay(255);}
if(BF1==0&&(BZ1!=0&&BZ2!=0&&BF2!=0)){delay(255);}
if(BF2==0&&(BZ1!=0&&BZ2!=0&&BF1!=0)){delay(255);}
}
/*主程序*/
void main()
{
P0=0xff;
while(1)
{change();}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询