1、1.PWM 给直流电机调速可以说并不难,无非是改变 PWM 的 DUTY 时间来实现,不同的占空比输出。从而改变平均电压以便改变电机转速。 2.AT89s52 没有 PWM 电路,只能用定时器产生时间来模拟 PWM 信号,控制直流电机的速度。你可以用一个定时器分两次定时,其中第一次为可变长度(对应你的速度) ,第二次为固定时间。只要不停重复这两次定时,就可以模拟 PWM 信号3.很多人问到这个问题。 。其实我也是最近两天才真正的搞明白。他的调速原理很简单,所谓占空比,其实就是电机通电时间与总的时间之比(总的时间包括通电时间和不通电时间,这也是一个周期) 。 。 。因此,只需要用定时器,让电机转
2、一段时间,然后停止(这就是一个周期,一个周期只有几十毫秒) ,然后又转,如此的反复,就可以实现调速,我们肉眼看到他的速度降下来了,其实他是转一段时间,然后停止的。 。 。还有一种就是控制电压来调速,但是那个又要涉及到降压和升压的问题,所以一般的小车调速就用定时器就可以实现相应的功能了。 。 。下面是我写的一个程序,用按键控制速度,数码管显示速度值(最大99,最小01) 。 。 。最开始设置的转速是95.。 。#include#define uchar unsigned char#define uint unsigned intuchar duanma=0x3f,0x06,0x5b,0x4f,0
3、x66,0x6d,0x7d,0x07,0x7f,0x6f; /定义段码uchar weima=0xfe,0xfd,0xfb,0xf7; /定义位码uchar dis_buf=0,0,0,0; uchar a,b,c,d,i,n,led;sbit int1=P23;sbit int2=P24;sbit int3=P25;sbit int4=P26;sbit up=P20;sbit dowm=P21;sbit mode1=P22;sbit mode=P32;int pwm=5;front();stop();main()TMOD=0x01;EA=1;ET0=1;TR0=1;TH0=0xff;TL0=
4、0x00;while(1);time() interrupt 1TH0=0xff;TL0=0x00;i+;if(i=pwm)front();if(i=100)i=0;stop();if(up=0)a+;if(a0)a=0;pwm+;if(pwm=99)pwm=99;if(dowm=0)b+;if(b30)b=0;pwm-; if(pwm30)c=0;pwm=99;if(mode=0)d+;if(d0)d=0;pwm=1;dis_buf0=(100-pwm)/10;dis_buf1=(100-pwm)%10;dis_buf2=0;dis_buf3=0;P0=duanmadis_bufled;if(led=1)P0|=0x80;P1=weimaled+;if(led=4)led=0; front()int1=0;int2=1;int3=0;int4=1;stop()int1=1;int2=1;int3=1;int4=1;