单片机PWM控制直流电机的速度

  • 格式:doc
  • 大小:175.50 KB
  • 文档页数:6

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用单片机控制直流电机的速度

直流调速器就是调节直流电动机速度的设备,上端和交流电源连接,下端和直流电动机连接,直流调速器将交流电转化成两路输出直流电源,一路输入给直流电机砺磁(定子),一路输入给直流电机电枢(转子),直流调速器通过控制电枢直流电压来调节直流电动机转速。同时直流电动机给调速器一个反馈电流,调速器根据反馈电流来判断直流电机的转速情况,必要时修正电枢电压输出,以此来再次调节电机的转速。

直流电机的调速方案一般有下列3种方式:

•1、改变电枢电压;

•2、改变激磁绕组电压;

•3、改变电枢回路电阻。

使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。根据公式

U=aVCC

其中:U为电枢电压;a为脉冲的占空比(0

电动机的电枢电压受单片机输出脉冲控制,实现了利用脉冲宽度调制技术(PWM)进行直流电机的变速。

因为在H桥电路中,只有PWM1与PWM2电平互为相反时电机才能驱动,也就是PWM1与PWM2同为高电平或同为低电平时,都不能工作,所以上图中的实际脉冲宽度为B,

我们把PWM波的周期定为1ms,占空比分100级可调(每级级差为10%),这样定时器T0每0.01ms产生一次定时中断,每100次后进入下一个PWM波的周期。上图中,占空比是60%,即输出脉冲的为0.6ms,断开脉冲为0.4ms,这样电枢电压为5*60%=3V。

我们讨论的是可以正转反转的,如果只按一个方向转,我们就只要把PWM1置为高电平或低电平,只改变另一个PWM2电平的脉冲变化即可,,如下图(Q4导通,Q3闭合,电机只能顺时针调整转动速度)

C语言代码:

#include

#define uchar unsigned char #define uint unsigned int

sbit K5=P1^4;

sbit K6=P1^5;

sbit PWM1=P1^0;

sbit PWM2=P1^1;

sbit FMQ=P3^6;

uchar ZKB1,ZKB2;

void delaynms(uint aa)

{

uchar bb;

while(aa--)

{

for(bb=0;bb<115;bb++) //1ms基准延时程序

{

;

}

}

}

void delay500us(void)

{

int j;

for(j=0;j<57;j++)

{

;

}

}

void beep(void)

{

uchar t;

for(t=0;t<100;t++)

{

delay500us();

FMQ=!FMQ; //产生脉冲

}

FMQ=1; //关闭蜂鸣器

delaynms(300);

}

void main(void)

{

TR0=0; //关闭定时器0

TMOD=0x01; //定时器0,工作方式1

TH0=(65526-100)/256;

TL0=(65526-100)%256; //100us即0.01ms中断一次 EA=1; //开总中断

ET0=1; //开定时器0中断

TR0=1; //启动定时器T0

ZKB1=50; //占空比初值设定

ZKB2=50; //占空比初值设定

while(1)

{

if(!K5)

delaynms(15); //消抖

if(!K5) //确定按键按下

{

beep();

ZKB1++; //增加ZKB1

ZKB2=100-ZKB1; //相应的ZKB2就减少 }

}

if(!K6)

{

delaynms(15); //消抖

if(!K6) //确定按键按下

{

beep();

ZKB1--; //减少ZKB1

ZKB2=100-ZKB1; //相应的ZKB2增加 }

}

if(ZKB1>99)

ZKB1=1;

if(ZKB1<1)

ZKB1=99;

}

}

void time0(void) interrupt 1

{

static uchar N=0;

TH0=(65526-100)/256;

TL0=(65526-100)%256;

N++;

if(N>100)

N=0;

if(N<=ZKB1)

PWM1=0;

else

PWM1=1;

if(N<=ZKB2)

PWM2=0;

else

PWM2=1;

//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1,//电机反方向旋转以最高速度