我做的循迹小车的PMW芯片老是发烫。。。求大神教解决方法
时间:10-02
整理:3721RD
点击:
源代码
#include<reg52.h>
sbit PWM1=P0^0;
sbit PWM2=P0^1;
sbit IN1=P0^2;
sbit IN2=P0^3;
sbit IN3=P0^4;
sbit IN4=P0^5;
sbit RP1=P2^0;//左边寻迹
sbit RP3=P2^1; //右边
int count1,count2;//用于中断函数计数
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}
void forward1()//电机1前进
{
IN1=0;
IN2=1;
}
void forward2()
{
IN3=0;
IN4=1;
}
void back1()//电机1后退
{
IN1=1;
IN2=0;
}
void back2()
{
IN3=1;
IN4=0;
}
void speed(int cnt1,int sd1,int cnt2,int sd2)
{
if(cnt1<sd1) //电机1pwm调速
PWM1=1;
else
PWM1=0;
if(cnt2<sd2)
PWM2=1;
else
PWM2=0;
}
void turn(int cnt1,int sd1,int cnt2,int sd2)
{
forward1();
forward2();
speed(cnt1,sd1,cnt2,sd2);
}
void back(int cnt1,int sd1,int cnt2,int sd2)
{
back1();
back2();
speed(cnt1,sd1,cnt2,sd2);
}
void main()
{
TMOD=0X01;
EA=1;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;
TR0=1;
turn(count1,30,count2,35); //2 有 1左
delay(350);
while(1)
{
if(RP1==0&&RP3==1)
turn(count1,60,count2,0);
if(RP1==1&&RP3==1)
back(count1,20,count2,25);
if(RP1==1&&RP3==0)
turn(count1,0,count2,10);
if(RP1==0&&RP3==0)
turn(count1,30,count2,35);
}
}
void time()interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count1++;
count2++;
if(count1>=100)
count1=0;
if(count2>=100)
count2=0;
}
#include<reg52.h>
sbit PWM1=P0^0;
sbit PWM2=P0^1;
sbit IN1=P0^2;
sbit IN2=P0^3;
sbit IN3=P0^4;
sbit IN4=P0^5;
sbit RP1=P2^0;//左边寻迹
sbit RP3=P2^1; //右边
int count1,count2;//用于中断函数计数
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}
void forward1()//电机1前进
{
IN1=0;
IN2=1;
}
void forward2()
{
IN3=0;
IN4=1;
}
void back1()//电机1后退
{
IN1=1;
IN2=0;
}
void back2()
{
IN3=1;
IN4=0;
}
void speed(int cnt1,int sd1,int cnt2,int sd2)
{
if(cnt1<sd1) //电机1pwm调速
PWM1=1;
else
PWM1=0;
if(cnt2<sd2)
PWM2=1;
else
PWM2=0;
}
void turn(int cnt1,int sd1,int cnt2,int sd2)
{
forward1();
forward2();
speed(cnt1,sd1,cnt2,sd2);
}
void back(int cnt1,int sd1,int cnt2,int sd2)
{
back1();
back2();
speed(cnt1,sd1,cnt2,sd2);
}
void main()
{
TMOD=0X01;
EA=1;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;
TR0=1;
turn(count1,30,count2,35); //2 有 1左
delay(350);
while(1)
{
if(RP1==0&&RP3==1)
turn(count1,60,count2,0);
if(RP1==1&&RP3==1)
back(count1,20,count2,25);
if(RP1==1&&RP3==0)
turn(count1,0,count2,10);
if(RP1==0&&RP3==0)
turn(count1,30,count2,35);
}
}
void time()interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count1++;
count2++;
if(count1>=100)
count1=0;
if(count2>=100)
count2=0;
}
电机驱动ic肯定会发烫了
你可以用pwm控制,减少通断时间降低发热
是否可以用dma形式发送,,,
这个不懂 学习了解一下 不知硬件是否有问题
发烫属于正常现象,工作频率太高就容易发烫。