⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitor.c

📁 Texas-Instrument C2000 Series DSP example programs
💻 C
字号:
/*==============================================================
  Name:           MONITOR.H                                    
  Project:        ENCODER                                      
  Originator:     Martin Staebler                              
  Description:    RS232 monitor to test sin/cos encoder s/w     
 ==============================================================
      Function List:   void   monitor(void)
                        void   Encoder_MSG(void);

      Status:         OK

      Target:         TMS320C240

      History:        (Date, Revision, Who, What)
      ---------------------------------------------------------
        02/11/97        1.0     STAE    Preliminary
  ==============================================================*/

/*--------------*/
/* Header Files */
/*--------------*/
#include <stdlib.h>             
#include <math.h>               
#include <conio.h>              /* rs232.lib */
#include <sci.h>                /* rs232.lib */
#include "C240.h"               /* peripheral register declaration for C240 */
#include "adc.h"                /* ADC macros */
#include "evm_qep.h"            /* QEP unit */
#include "encoder.h"            /* sin/cos incremental encoder settings */
#include "monitor.h"            /* rs232 monitor settings */


/*==========================================================================*/
/* S U B R O U T I N E S                                                    */
/*==========================================================================*/

/*==========================================================================*/
/* void monitor(void)                                                       */
/*==========================================================================*/
/* Function:      Enables testing of ADC module, QEP unit and sin/cos       */
/*                incremetal encoder s/w and sends data to terminal         */
/*                Terminal settings: 9600 baud                              */
/*                                   8 data bits                            */
/*                                   2 stop bits                            */
/*                                   No parity                              */
/*                                   CR -> CR/LF                            */
/*                                   See e.g. ENCODER.TRM (TERMINAL.EXE)    */
/*==========================================================================*/
void monitor(void)
{
   char c;
   char b[10]="";
   char str[20];               /* general purpose buffer */
   int i;                      /* general purpose counter */
   int val[3];
   static unsigned qep_sample;
   volatile unsigned long  angle;
   volatile float fbuffer;
         
   /*-----------------------------------------------------------*/
   /* UART initialization                                       */
   /*-----------------------------------------------------------*/
   SCI_Init(((SYSCLK*10)/8/BAUDRATE+5)/10);

   for (;;)
   {
      clrscr(); 
      sendstr_PMEM(header);
      sendstr_PMEM("\rMain Menu\r");
         
      /*-----------------*/ 
      /* Menue Selection */
      /*-----------------*/ 
      sendstr_PMEM("\r\t1) Encoder Initialization");
      sendstr_PMEM("\r\t2) ADC1,2 & QEP Test");
      sendstr_PMEM("\r\t3) Print Encoder Increment & Phase");
      sendstr_PMEM("\r\t4) Print Position (1/1000 Degrees)");
      sendstr_PMEM("\r\r Press '1'..'4'. Please make your choice. \r");

      for (c = 0; c<'1' || c>'6';c = SCI_Getc());
      switch (c)
      {
         case '1': /*------------------------*/
                   /* Encoder Initialization */
                   /*------------------------*/
                   Encoder_Init(QEP_ROLLOVER);
                   
                   sendstr_PMEM("\r\r");                 
                   sendstr_PMEM(" +--------------------+\r");
                   sendstr_PMEM(" | Encoder setup done |\r");          /* Screen Output */
                   sendstr_PMEM(" +--------------------+\r");
                   sendstr_PMEM(" >> Press any key to confirm\r");
                   for (c=0; c==0; c = (kbhit() ? getch() : 0) );
                   break; 

         case '2': /*----------------*/
                   /* ADC & QEP TEst */
                   /*----------------*/
                   clrscr();
                   sendstr_PMEM("\rInput from ADC1, ADC2, QEP: 000000 000000 000000");
                   do
                   {
                      sendstr_PMEM("\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
                      sendstr_PMEM("\b\b\b\b\b\b\b");

                      /*----------------*/ 
                      /* Get ADC Values */
                      /*----------------*/ 
                      ADC_START(5,13);
                      ADC_READ2(val[0],val[1]);
                      val[0] = (val[0] - ENC_U0_OFFSET) << 1;
                      val[1] = (val[1] - ENC_U90_OFFSET)<< 1;
                     
                      /*----------------*/ 
                      /* Get Increments */
                      /*----------------*/ 
                      #ifndef QEP_POWER2
                         val[2] = QEP_GetIncr();
                      #else
                         val[2] = (T2CNT - qep_diff) & (QEP_ROLLOVER-1);
                      #endif
                
                      /*-----------------*/ 
                      /* Terminal output */
                      /*-----------------*/ 
                      ltoa ((long)val[0], str);
                      for (i=strlen(str); i<7; i++)
                         sendstr_PMEM(" ");
                      sendstr_DMEM(str);

                     ltoa ((long)val[1], str);
                     for (i=strlen(str); i<7; i++)
                        sendstr_PMEM(" ");
                     sendstr_DMEM(str);

                     ltoa ((unsigned long)val[2], str);
                     for (i=strlen(str); i<7; i++)
                        sendstr_PMEM(" ");
                     sendstr_DMEM(str);

                  } while( SCI_Getc() == -1 );
                  break;

         case '3': /*----------------------------------*/
                   /* Print Encoder Increments & Phase */
                   /*----------------------------------*/
                   clrscr();
                   sendstr_PMEM("\rSIN/COS Q-Encoder, Increments, Phase: 000000 000000");

                   do
                   {
                      sendstr_PMEM("\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
    
                      /*--------------*/ 
                      /* Get Position */
                      /*--------------*/ 
                      qep_sample = Encoder_SamplePosition();
                      Encoder_CalcPosition(qep_sample);
                                        
                      /*-----------------*/ 
                      /* Terminal output */
                      /*-----------------*/ 
                      ltoa ((unsigned long) encoder_position[1], str);
                      for (i=strlen(str); i<7; i++)
                         sendstr_PMEM(" ");
                     sendstr_DMEM(str);

                      ltoa ((unsigned long) encoder_position[0], str);
                      for (i=strlen(str); i<7; i++)
                         sendstr_PMEM(" ");
                     sendstr_DMEM(str);
                  } while( SCI_Getc() == -1 );
                  break;


         case '4': /*----------------*/
                   /* Print Position */
                   /*----------------*/
                   clrscr();
                   sendstr_PMEM("\rAngle (1/1000 * Degrees): 000000000");

                   do
                   {
                      sendstr_PMEM("\b\b\b\b\b\b\b\b\b\b");
    
                      /*--------------*/ 
                      /* Get Position */
                      /*--------------*/
                      qep_sample = Encoder_SamplePosition();
                      Encoder_CalcPosition(qep_sample);

                      /*------------*/ 
                      /* Calc angle */
                      /*------------*/
                      angle = ((long) encoder_position[1]) << 16;
                      angle += (long) encoder_position[0]; 
                      fbuffer = ((double) angle)/(2048 * 0x10000);
                      fbuffer = fbuffer * 360000;
                      angle = (long) fbuffer;
                      
                      /*-----------------*/ 
                      /* Terminal output */
                      /*-----------------*/ 
                      ltoa (angle, str);
                      for (i=strlen(str); i<10; i++)
                         sendstr_PMEM(" ");
                     sendstr_DMEM(str);

                  } while( SCI_Getc() == -1 );
                  break;

       } /* end switch */
  
   } /* end for */

}    /* end monitor() */      


/*======================================================================*/
/* void  Encoder_MSG(void)                                              */
/*======================================================================*/
void  Encoder_MSG(void)
{
   clrscr();
   sendstr_PMEM("\r\r");                 
   sendstr_PMEM(" +----------------------------------------------+\r");
   sendstr_PMEM(" | S L O W L Y  Turn Encoder for Sychronization |\r");
   sendstr_PMEM(" +----------------------------------------------+\r");
}

⌨️ 快捷键说明

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