您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制基于AT89C51的直流电机延时循环正反转控制程序 正文
基于AT89C51的直流电机延时循环正反转控制程序

基于AT89C51的直流电机延时循环正反转控制程序

点击数:7867 次   录入时间:03-04 11:58:51   整理:http://www.55dianzi.com   电脑-单片机-自动控制

  实现直流电机延时循环正反转具体要求:按下P1.0上的按钮,直流电机正转,5秒后电机反转,(再过5秒电机正转:如此循环)当按下P3.2上的按钮,电机停止运行。
  
  “直流电机延时循环正反转程序”由下面这几个子程序构成:按键查询函数、主函数(实现对电机的控制:启动、运行及停止)、单片机中断延时子程序、停止按键外部中断子程序、按键防抖延时子程序等。程序的关键是直流电机在运行时,按下停止按钮时,电机无法停转,这就要求用定时器来实现电机运行延时,停止按键作为外部中断,优先于定时器O的中断,这样可以实现在电机延时运行时,可以随时停止电机。
  
  1.直流电机的正反转控制原理:用三极管来控制。
  
  下图中的电机可以是DC5V或DC4V、DC3V的直流电机。当P2.0=1、P2.1=0时,三极管Q1和Q4导通,三极管Q2和Q3截止,电机正转;当P2.0=0、P2.1=1时,三极管Q2和Q3导通,三极管Ql和Q4截止,电机反转。

直流电机的正反转控制


  
  2.当电机启动后,作5秒正转5秒反转的循环,电机正转5秒的延时采用单片机定时器TO延时Ims,并软件循环5000次来实现。1ms延时采用TO方式一,初值计算:1000us=(65536-初值)*12/11.0592*10-6us,计算出初值为:921.6≈922。故在voidTIMEO_ROUT-INGOinterruptl定时器TO中断人口函数中:THO=(65536-922)/256;TL0=(65536-922)%256。
  
  3.按键查询函数voidKey0的意义在于准确读取按键信息,启动按键按下后,马上复位,我们用电机起动标志(key_flag)来标记电机的指令。同理,停止按键按下后,马上复位,我们用电机停止标志(flag_K2)来标记电机的指令。
  
  4.停止按钮的处理:电机停止按钮接单片机引脚P3.2,采用外部中断0,否则,电动机不能正常停止。
  
  用这句语句(PX0=1)使其中断优先级高于定时器中断。只要在P3.2引脚上出现有有效低电平时,就激活外部中断,使程序进入voidINI10interrupt0using2程序。
  
  5.整个程序解读:

286

42866

  6、整个程序执行顺序及各个寄存器或变量值:
  
  第一阶段:当程序进入主程序时,执行到查询按键程序Key0,则主程序各变量的值如上图所示,如果这时无桉键接下,又不满足if的条件,程序会一直查询key0程序;

  第二阶段:当按下接在P1.0的起动按键后,Key0执行后,如下图key_flag电机起动标志为1,flag_zf电机正反转标志仍为0,满足主函数中的条件,if(key_flag==1){ if(flaLzf==0) GO_RIGHT;}电机正转运行。

42785

  第三阶段:定时器TO启动后一直在计时,当计数溢出,执行voidTIMEO_ROUTINGOinterrupt1中断子程序,每次TO溢出ms加1,一直等待到中断5000次才执行。if(ms==5000){flag_zf=1;}语句,此时,如下图所示,电动机flag_zf正转标志从0变1,电机在正转58后开始反转。如果计数达到10000次,elseif(ms==10000)则flag_zf=0即电机行lOs后,电机又开始正转。完成定时5s正反转循环的功能。
  
  第四阶段:按下接在P3.2上的停止按键后,执行外部中断子程序voidINI10interrupt0using2电机停止标志flagIK2为1,主程序里执行STOP,电机停止运行。
  
  通过对该程序的解读,使我们又一次感受到了单片机定时器和中断的魅力,通过对程序运行时各个相关寄存器和变量值的监视,使我们更清楚地理解单片机执行程序的顺序,爱上单片机的学习。

42785




本文关键字:直流电机  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制