pwm控制电机正反转,PWM直流电机调速程序

模拟技术

2428人已加入

描述

  PWM调速开关控制方式控制电机,广泛应用于玩具、小车、机器人等项目,通过串口预设正反转速度,可以灵活控制小车等电机正反转速度,用两个限位开关控制电机的正反转限位,控制方式简便、安全可靠,方便维护。

  开关控制方式适合于电位器/模拟信号控制方式下PWM调速方式和预设正反转速度方式(且触发方式配置为电平)。如果无需调速,正反转速度均为全速,可配置为电位器/模拟信号PWM调速方式;如果需要指定正反转速度(可为占空比、转矩或转速),应配置为预设正反转速度方式且触发方式配置为电平方式。

  如何配置调速方式表1,如何预设速度及配置触发方式见MODBUS-RTU(国标GB/T19582-2008)通讯协议。

  下面的程序功能为单片机I/O口P2^0、P2^1输出1000HZ,占空比为%50,并能过P3^7按键控制正电机的正反转。

  /*******************************************************************/

  /* 程序名:PWM直流电机调速 */

  /* 晶振:11.00592 MHz CPU型号:STC89C52 */

  /* 功能:直流电机的PWM波控制,可以通过按键控制正反转 */

  /*****************************************************************/ #include《reg52.h》

  #define uint unsigned int #define uchar unsigned char

  uchar time,count=50,flag=1;//低电平的占空比

  sbit PWM1=P2^0;//PWM 通道 1,反转脉冲 sbit PWM2=P2^1;//PWM 通道 2,正转脉冲 sbit key_turn=P3^7; //电机换向

  /************函数声明**************/ void delayxms(uint z); void Motor_turn(void); void timer0_init(void);

  /*********主函数********************/ void main(void)

  {

  timer0_init(); while(1)

  {

  Motor_turn();

  }

  }

  /****************延时处理**********************/ void delayxms(uint z)//延时xms程序

  {

  uint x,y; for(y=z;x》0;x--) for(y=110;y》0;y--);

  }

  /************电机正反向控制**************/ void Motor_turn(void)

  {

  f(key_turn==0)

  {

  delayxms(2);//此处时间不能太长,否者会的中断产生冲突 if(key_turn==0)

  {

  flag=~flag;

  }

  while(!key_turn);

  }

  }

  /***********定时器0初始化***********/ void timer0_init(void)

  {

  TMOD=0x01; //定时器0工作于方式1 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1;

  }

  /**************定时0中断处理******************/ void timer0_int(void) interrupt 1

  {

  TR0=0;//设置定时器初值期间,关闭定时器 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; if(flag==1)//电机正转

  {

  PWM1=0; time++; if(time《count)

  {

  PWM2=1;

  }

  else PWM2=0;

  if(time》=100)

  {

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

全部0条评论

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

×
20
完善资料,
赚取积分