Pwm电机调速原理,单片机PWM电机调速程序

模拟技术

2304人已加入

描述

  对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端PE2 和PD5 上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。

  PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振波开关技术将会成为PWM控制技术发展的主要方向之一。其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

  

  单片机PWM电机调速程序

  #include《STC15F2K.h》

  #include《intrins.h》

  #define uchar unsigned char

  #define uint unsigned int

  uchar time,count=20,flag=1;

  sbit PWM1=P2^1;

  sbit PWM2=P2^0;

  sbit PWM3=P2^2;

  sbit PWM4=P2^3;

  sbit key_add=P3^0;

  sbit key_dec=P3^1;

  sbit key_turn=P3^2;

  //=============函数声明============================

  void delay(uint z);

  void Motor_turn();

  void Motor_add();

  void Motor_dec();

  void time0_init();

  //=================================================

  void delay(uint z)

  {

  uint x,y;

  for(x=z;x》0;x--)

  for(y=500;y》0;y--);

  }

  void Motor_turn()

  {

  if(key_turn==0)

  {

  delay(2);

  if(key_turn==0)

  {

  flag=~flag;

  }

  while(!key_turn);

  }

  }

  void Motor_add()

  {

  if(key_add==0)

  {

  delay(2);

  if(key_add==0)

  {

  count+=5;

  if(count》=100)

  {

  count=100;

  }

  }

  while(!key_add);

  }

  }

  void Motor_dec()

  {

  if(key_dec==0)

  {

  delay(2);

  if(key_dec==0)

  {

  count-=5;

  if(count》=100)

  {

  count=0;

  }

  }

  while(!key_dec);

  }

  }

  void time0_init()

  {

  TMOD=0x01;

  TH0=0xff; // (65536-10)/256; 赋初值定时

  TL0=0xf6; // (65536-10)%256; 0.01ms

  EA=1;

  ET0=1;

  TR0=1;

  }

  void time0() interrupt 1

  {

  TR0=0;

  TH0=0xff;

  TL0=0xf6;

  TR0=1;

  if(flag==1)

  {

  PWM1=0;

  PWM3=0;

  time++;

  if(time《count)

  {

  PWM2=1;

  PWM4=1;

  }

  else

  {

  PWM2=0;

  PWM4=0;

  }

  if(time》=100)

  {

  time=0;

  }

  }

  else

  {

  PWM2=0;

  PWM4=0;

  time++;

  if(time《count)

  {

  PWM1=1;

  PWM3=1;

  }

  else

  {

  PWM1=0;

  PWM3=0;

  }

  if(time》=100)

  {

  time=0;

  }

  }

  }

  void main()

  {

  time0_init();

  while(1)

  {

  Motor_turn();

  Motor_add();

  Motor_dec();

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分