请问如何用PWM波控制直流电机,C程序是什么样的?

2024-12-15 11:42:14
推荐回答(4个)
回答1:

我这个也不算是正规的PWM了,你看下,原理是一样的,都是控制占空比

#include

/*定义按键和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();

int t1=80,t2=80;

/*延时函数*/
void delay(int t)
{while(t--);}
/*正转函数1*/
void Z1()
{IN1=1;IN2=0;}
/*正转函数2*/
void Z2()
{IN3=1;IN4=0;}
/*反转函数1*/
void F1()
{IN1=0;IN2=1;}
/*反转函数2*/
void F2()
{IN3=0;IN4=1;}
/*加速函数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();}
}

回答2:

程序如下:
//*********初始化模块**********//
void initial(void){
TMOD=0x15;
TH0=0;
TL0=0;
TH1= (65536-500)/256
TL1= 65536-500)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=0;
}

//*********定时中断服务程序1**********//
void t1(void) interrupt 3 using 0
{
TH1= (65536-500)/256
TL1= 65536-500)%256;

output = ~output;
}

回答3:

伺服电机工作原理——伺服电机内部的转子是永磁铁,驱动器控制的U/V/W三相电控制芯片通过这三相电压指令,经过反向、延时后,得到6 路PWM 波输出到功率

回答4:

如何利用Arduino通过PWM引脚进行直流电机的调速控制?