分享

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

 共同成长888 2018-05-06

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)

  {

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多