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

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

  对于电机的转速调整,我们是采用脉宽调制(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();

  }

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2597083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存