motor.c

来自「AirConditioner project」· C语言 代码 · 共 150 行

C
150
字号
/*  Include  */
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GZ60.h> /* include peripheral declarations */
#include "COMMON.h"
#include "AD.h"
#include "MOTOR.h"
#include "TIM.h"

/* Global Variables */
UINT8 motor_prosition[4];
extern UINT8 target_prosition[4];

/*****************************************************************************
 * Function:        Motor_Service()
 *
 * Description:     when motor_prosition >=target_prosition+4 
 *                                    or <=target_prosition-4
 *                       motor start
 *                  when motor_prosition <=target_prosition+2 
 *                                   and >=target_prosition-2
 *                       motor stop
 *
 * Returns:         none
 *
 * Notes:                (-4)-----(-2)--target_prosition--(2)------(4)     
 *
 *							    start|--->>----|          stop          |----<<---|start
 *
 *                        20%    	 |				  50%           |      80%
 *****************************************************************************/

void Motor_Service(void)
 {
  /////  MIX_MOTOR  /////
 while(MOTOR_MIX == 1)
     { 
       if(motor_prosition[0]>(target_prosition[0]+4))  
          {
           if(T2CH0L!=0xA0){
           Turn_Left(1,0xA0);
           }
           MOTOR_MIX_EN = 1;
          }
       else if(motor_prosition[0]<(target_prosition[0]-4))
            {
              if(T2CH0L!=0x28){
              Turn_Right(1,0x28);
              }
              MOTOR_MIX_EN = 1;
            } 
      
       __RESET_WATCHDOG();
       /////
       if(motor_prosition[0]<=(target_prosition[0]+2) && motor_prosition[0]>=(target_prosition[0]-2)||MOTOR_MIX == 0) 
              {
                MOTOR_MIX_EN=0;
                break;
              }
       }
  /////  CYCLE_MOTOR  /////
 while(MOTOR_CYCLE == 1)
     {    
       if(motor_prosition[1]>=(target_prosition[1]+4))  
          {
           if(T2CH1L!=0xA0){
           Turn_Left(2,0xA0);
           }
           MOTOR_CYCLE_EN = 1;
          }
       else if(motor_prosition[1]<=(target_prosition[1]-4))
            {
              if(T2CH1L!=0x28){
              Turn_Right(2,0x28);
              }
              MOTOR_CYCLE_EN = 1;
            } 
      
      __RESET_WATCHDOG();
       /////
       if(motor_prosition[1]<=(target_prosition[1]+2) && motor_prosition[1]>=(target_prosition[1]-2)||MOTOR_CYCLE == 0) 
              {
                MOTOR_CYCLE_EN=0;
                break;
              }
       }	 
  /////  MODE_MOTOR  /////
  while(MOTOR_MODE == 1)
     {         
       if(motor_prosition[2]>=(target_prosition[2]+4))  
          {
           if(T2CH2L!=0xA0){
           Turn_Left(3,0xA0);
           }
           MOTOR_MODE_EN = 1;
          }
       else if(motor_prosition[2]<=(target_prosition[2]-4))
            {
              if(T2CH2L!=0x28){
              Turn_Right(3,0x28);
              }
              MOTOR_MODE_EN = 1;
            } 
       
       __RESET_WATCHDOG();
       /////
       if(motor_prosition[2]<=(target_prosition[2]+2) && motor_prosition[2]>=(target_prosition[2]-2)||MOTOR_MODE == 0) 
              {
                MOTOR_MODE_EN=0;
                break;
              }
       }	
 
  /////  CENTER_MOTOR  /////
while(MOTOR_CENTER == 1)
     { 
       //motor_prosition[3]=AD_Sample(CENTER_Prosition);
       //target_prosition[3]=AD_Sample(SunLight);        
       
       if(target_prosition[3]<S1){
          target_prosition[3]=S1;
       }else if(target_prosition[3]>S10){
          target_prosition[3]=S10;
       } 
       
       if(motor_prosition[3]>=(target_prosition[3]+4))  
          {
           if(T2CH3L!=0xA0){
           Turn_Left(4,0xA0);
           }
           MOTOR_CENTER_EN = 1;
          }
       else if(motor_prosition[3]<=(target_prosition[3]-4))
            {
              if(T2CH3L!=0x28){
              Turn_Right(4,0x28);
              }
              MOTOR_CENTER_EN = 1;
            } 
      
      __RESET_WATCHDOG();
       /////
       if(motor_prosition[3]<=(target_prosition[3]+2) && motor_prosition[3]>=(target_prosition[3]-2)||MOTOR_CENTER == 0) 
              {
                MOTOR_CENTER_EN=0;
                break;
              }
       }  
 }
  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?