微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 自动开锁器前期设计,遇见问题!

自动开锁器前期设计,遇见问题!

时间:10-02 整理:3721RD 点击:
这是一个前期模拟程序和简单的硬件系统实验,附上程序和图片,图1是舵机控制的PWM脉冲占空比,图2是在PROTUES上仿真的左转极限2ms脉宽总脉宽为20ms的波形图,仿真没有问题,硬件连线没有问题,开始我以为是单片机的电源负载不够,之后我单独换了一个电源提供给电机,还是没有预期的效果,想不明白,故请高手看看。
程序:

  1. #include<reg51.h>
  2. #define Stop 0
  3. #define Left 1
  4. #define Right 2
  5. sbit ControlPort =P2^0;
  6. sbit KeyLeft =P3^2;
  7. sbit KeyRight =P3^3;
  8. sbit KeyStop =P3^4;
  9. unsigned char TimeOutCounter=0,LeftOrRight=0;
  10. void InitialTimer(void)
  11. {
  12.   EA=1;
  13.   ET1=1;
  14.   TMOD=0x10;
  15.   TH1=(65535-500)/256;      //定时0.5ms
  16.   TL1=(65535-500)%256;
  17. }
  18. void ControlLeftOrRight(void)
  19. {
  20.   if(KeyStop==0)
  21.    {
  22.     TR1=1;
  23.     LeftOrRight=Stop;
  24.    }
  25.    
  26.   if(KeyLeft==0)
  27.    {
  28.     TR1=1;
  29.     LeftOrRight=Left;
  30.    }
  31.   
  32.   if(KeyRight==0)
  33.    {
  34.     TR1=1;
  35.     LeftOrRight=Right;
  36.    }  
  37. }
  38. void main()
  39. {
  40.   P2=0;
  41.   InitialTimer();
  42.   while(1)
  43.   {
  44.     ControlLeftOrRight();   
  45.   }
  46. }
  47. void Timer1(void) interrupt 3
  48. {
  49.   TH1=(65535-500)/256;
  50.   TL1=(65535-500)%256;  
  51.   TimeOutCounter++;
  52.   switch(LeftOrRight)
  53.   {
  54.     case 0:
  55.         if(TimeOutCounter<=3)    //1.5ms的停止脉宽
  56.          {
  57.            ControlPort=1;   
  58.          }
  59.          else
  60.          {
  61.            ControlPort=0;   
  62.          }
  63.          break;
  64.     case 1:
  65.         if(TimeOutCounter<=4)   //2ms的左转极限脉宽
  66.          {
  67.            ControlPort=1;   
  68.          }
  69.          else
  70.          {
  71.            ControlPort=0;   
  72.          }
  73.          break;
  74.     case 2:
  75.         if(TimeOutCounter<=2)   //1ms的右转极限脉宽
  76.          {
  77.            ControlPort=1;   
  78.          }
  79.          else
  80.          {
  81.            ControlPort=0;   
  82.          }
  83.          break;
  84.     default:break;
  85.   }
  86.   if(TimeOutCounter==40)TimeOutCounter=0;     //0.5*40=20ms总脉宽
  87. }

复制代码




Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top