亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stepper.c

?? TMS320LF2407 教程 例子 英文 TI
?? C
字號:
/*****************************************************************************/
/*                                                                           */
/* 	                      stepper.c                                              */
/*                                                                           */
/*****************************************************************************/

/*
  Code to use potentiometer on ADCIN0 to control speed of 
  a stepper motor. Uses L293D motor driver IC on I/O Port E.
 
  Steper motor windings = I/O Port E bits 3 to 0. 
  Motor driver enable = I/O Port E bit 4. 
  
  Connect winding 1 of stepper motor to outputs driven by IOPE0 and IOPE1.
  Connect winding 2 of stepper motor to outputs driven by IOPE1 and IOPE3.
  
  Speed of motor is controlled by a potentiometer on ADC0.
  Center position is off. Amount of travel of potentiometer
  for which there is no output is determined by the deadband.
*/

#include "system.h"
#include "eva.h"
#include "io2407.h"
#include "adc.h"

/* Defines */

/* Percentage of potentiometer travel where ouput is off */
           
#define DEADBAND_PERCENT 10

/* Maximum input to ADC is FFC0h = 65472 decimal */  

#define DEADBAND_MAX ((65472*(50+DEADBAND_PERCENT/2))/100)
#define DEADBAND_MIN ((65472*(50-DEADBAND_PERCENT/2))/100)

/*
 The following variable will depend on the actual stepper
 motor used. This determines the fastest speed the timer 
 can run at. Increase 0xFFF for slower speed  
*/

#define MAXIMUM_SPEED 0x0FFF                            

/* Tables to turn on the stepper motor windings */

unsigned int single_step[4] = {0x01, 0x04, 0x02, 0x08}; 

unsigned int half_step[8] = {1,5,4,6,2,10,8,9};


/* Initialise General Purpose Timer 1. */

void init_GPT1(void)
{
 MCRA   |= T1PWM;   /* Turn on T1PWM */
 T1CON   = 0x8342;  /* Clock divided by 128 */
 GPTCONA |= 0x0141; /* Active low. PR starts ADC */
 T1PR    = 0xFFFF;  /* Slowest speed */
 T1CMPR  = MAXIMUM_SPEED/2;  /* Duty = 50% of fastest speed */
 T1CNT   = 0xFFFE;  /* Set to -2 */
 T1CON   = 0x9342;  /* Start timer 1 */     
}

/***********************************************************/

void init_ADC()
{
  /* Non Cascade for 8 measurements. */    
  /* Will affect RESULT0 to RESULT7 only */
  
  ADCCTRL1 = (ADC_SOFT|ADC_CPS|ADC_ACQ_PS3|ADC_ACQ_PS2|ADC_ACQ_PS1|ADC_ACQ_PS0);

  CHSELSEQ1 = 0x0000; /* 8 measurements on Channels 0 */
  CHSELSEQ2 = 0x0000;
  CHSELSEQ3 = 0xFFFF;
  CHSELSEQ4 = 0xFFFF;
  MAX_CONV  = 0x0007; /* 8 measurements */
                                     
  /* Reset sequence at zero and EVA start of conversion */                                   
                                     
  ADCCTRL2 = (RST_SEQ1 | EVA_SOC_SEQ1); 
} 

/***********************************************************/
/*
  Read ADCIN0. RESULT0 will lie in range 0 to FFC0h.
  Returned value will lie in range -100 to +100
  with deadband in centre of range.
*/
/***********************************************************/
   
volatile signed int read_ADC(void)
{
 unsigned int input;
 signed int output;
 
 input = RESULT0; /* Read input */
 
 if ( input >= DEADBAND_MIN && input <= DEADBAND_MAX)
   {
    /* Input lies in deadband. No output */
    output = 0;
   }
 else if ( input > DEADBAND_MAX)
  {                  
   output = (signed int)((input-DEADBAND_MAX) * 100)/(0xFFC0-DEADBAND_MAX);
  }
 else
  {
   /* Input is less than DEADBAND_MIN */
  
   output = -(signed int)((DEADBAND_MIN-input)*100)/(DEADBAND_MIN);
  } 
  
 return(output); /* Returned signed output */
                 /* in range -100 to +100 */
}   

/***********************************************************/
/*
  Generate Output.
  Input: -100 to +100.
  Output: Speed for T1PWM. Value between FFFFh (slowest)
          and MAXIMUM_SPEED (fastest). 
          Zero must not be used as stops T1PWM running.
*/
/***********************************************************/

unsigned int set_output_speed(signed int input)
{
 unsigned int return_value;
 signed long scaled_value;
 
 if ( 0 == input)
  { 
   return_value = 0xFFFF; /* Leave period at maximum */
  }
 else if ( input > 0)
  {
   /* Input value in range 1 to 100 */
   /* Convert to output in between 0xFFFF to MAXIMUM_SPEED */
   
   scaled_value = ((0xFFFF - MAXIMUM_SPEED) * (signed long)input)/100;
   return_value = 0xFFFF - (unsigned int) scaled_value; 
  }   
 else
  {
   /* Input value in range -1 to -100 */
   /* Convert to output between 0xFFFF and MAXIMUM_SPEED */
   
   scaled_value = ((0xFFFF - MAXIMUM_SPEED) * (signed long)(-input))/100;
   return_value = (65535 - (unsigned int) scaled_value);
  }
  
 return(return_value);  
}

/***********************************************************/
/*
   Determine which windings are to be powered on/off.     
   
   Full step uses the table single_step[].
   
   Take next value of windings to be turned on from table.
   
   1Fxx = Direction bits of I/O data and direction register. 
   xx10 = Data bits. L293 enabled.
*/
/***********************************************************/
      
unsigned int set_single_step_output(signed int input)
{
 unsigned int return_value;
 static unsigned int next = 0; /* Retains values between calls */

 if ( 0 == input)
  {
   return_value = 0x1F10; /* Enable on. All windings off */  
  }                       
 else if ( input > 0)
  {
   /* Positive input in range 1 to 100 */
   /* Move stepper motor forwards one single step */
   /* Point to next element of table */
   
   if ( next < 3 ) 
     next++;
   else
     next = 0;   

   /* Take value from table and set direction bits */
   /* Enable motor driver outputs */
   
   return_value = single_step[next] | 0x1F10;  
  } 
 else
  {
   /* Negative input in range -1 to -100 */
   /* Move stepper motor backwards one single step */
   
   if ( next > 0 )
     next--;   
   else
     next = 3;  
   
   /* Take next value from table and set direction bits */
   /* Enable motor drive outputs */
    
   return_value = single_step[next] | 0x1F10; 
  }
 
 return(return_value);
}
      

/***********************************************************/
/*
   Determine which windings are to be powered on/off.     
   
   Half step uses the table half_step[].
   
   Take next value of windings to be turned on from table.
   
   1Fxx = Direction bits of I/O data and direction register. 
   xx10 = Data bits. L293 enabled.
*/
/***********************************************************/
      
unsigned int set_half_step_output(signed int input)
{
 unsigned int return_value;
 static unsigned int next = 0; /* Retains values between calls */

 if ( 0 == input)
  {
   return_value = 0x1F10; /* Enable on. All windings off */  
  }                       
 else if ( input > 0)
  {
   /* Positive input in range 1 to 100 */
   /* Move stepper motor forwards one half step */
   /* Point to next element of table */
   
   if ( next < 7 ) 
     next++;
   else
     next = 0;   

   /* Take value from table and set direction bits */
   /* Enable motor driver outputs */
   
   return_value = half_step[next] | 0x1F10;  
  } 
 else
  {
   /* Negative input in range -1 to -100 */
   /* Move stepper motor backwards one half step */
   
   if ( next > 0 )
     next--;   
   else
     next = 7;  
   
   /* Take next value from table and set direction bits */
   /* Enable motor drive outputs */
    
   return_value = half_step[next] | 0x1F10; 
  }
 
 return(return_value);
}
      
/***********************************************************/      

void main(void)
{
  signed int x;   /* General purpose variable */
  unsigned int y; /* General purpose variable */
  
  init_system();  /* Initialize variables and hardware */

  init_ADC();     /* Initialise ADC */       
  init_GPT1();    /* Turn on timer 1 */
  
  MCRC = 0xFFE0;  /* Turn off clkout on IOPEO bit 0 */
  
 for ( ; ; )
  {
   
   if ( ADCCTRL2 & INT_FLAG_SEQ1) /* Test for ADC event */
    { 
      ADCCTRL2 |= INT_FLAG_SEQ1; /* Reset timer 1 interrupt flag */  
	  
	  x = 0;
	  
	  while (ADCCTRL2 & SEQ1_BSY) 
	    x++;                     /* Wait for measurement to finish */
	  
	  x = read_ADC(); /* Read analog input from ADC0 */	
 	                  /* Put into range -100 to +100 */
 	  
      y = set_output_speed(x); /* Calculate output */
      
      T1PR = y;      /* Set period of GPT1 */
      
      y =  set_half_step_output(x); /* Next element */
	
	  PEDATDIR = y;  /* Output on I/O Port E */
	}      

  }

}

/*****************************************************************************/
/*                                                                           */
/* 	                      End of stepper.c                                   */
/*                                                                           */
/*****************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国偷自产一区二区三区观看| 青青草91视频| 日韩精品专区在线影院观看| 欧美视频日韩视频| 91污片在线观看| 色综合久久久久综合99| 91在线视频网址| 欧美专区在线观看一区| 欧美性猛片xxxx免费看久爱| 欧美日韩中文另类| 欧美日韩你懂得| 91精品一区二区三区久久久久久| 91精品欧美一区二区三区综合在| 日韩一区二区三区视频在线| 精品成a人在线观看| 久久久一区二区三区| 日本一区二区三区免费乱视频| 久久久久国产精品人| 亚洲欧洲一区二区三区| 亚洲免费av在线| 视频在线观看一区| 国产在线播精品第三| 99久久国产免费看| 在线观看成人免费视频| 日韩天堂在线观看| 欧美激情综合网| 亚洲五码中文字幕| 韩国女主播一区| 波多野结衣在线aⅴ中文字幕不卡| 色94色欧美sute亚洲13| 日韩免费高清av| **性色生活片久久毛片| 欧美a级理论片| 成人中文字幕电影| 欧美一区二区三区人| 国产欧美一区二区在线| 亚洲不卡av一区二区三区| 经典三级一区二区| 在线日韩国产精品| 久久久久久久性| 日韩福利视频导航| 99在线精品观看| 日韩三级视频在线观看| 亚洲女人****多毛耸耸8| 琪琪久久久久日韩精品| 91亚洲永久精品| 久久精品夜色噜噜亚洲aⅴ| 亚洲一级二级三级| 国产iv一区二区三区| 在线不卡a资源高清| 专区另类欧美日韩| 国产专区欧美精品| 91精品国产综合久久久久| 中文字幕一区二区三区色视频| 毛片不卡一区二区| 欧美亚洲一区二区在线| 中文字幕一区视频| 成人性生交大片免费| 日韩免费观看2025年上映的电影 | 95精品视频在线| 日韩精品一区二| 天堂蜜桃一区二区三区| 在线一区二区三区四区| 综合色中文字幕| 国产成人一区在线| 久久看人人爽人人| 韩国av一区二区三区在线观看| 制服视频三区第一页精品| 一区二区三区四区蜜桃| 99久久国产综合色|国产精品| 国产午夜精品久久| 国内精品久久久久影院薰衣草| 欧美一区二区性放荡片| 天天操天天色综合| 欧美少妇一区二区| 亚洲午夜一二三区视频| 欧美主播一区二区三区| 一片黄亚洲嫩模| 在线欧美一区二区| 亚洲国产sm捆绑调教视频| 欧美影片第一页| 天天综合网天天综合色| 欧美一区日韩一区| 经典三级视频一区| 久久久九九九九| 99国产一区二区三精品乱码| 自拍偷拍亚洲欧美日韩| 欧美色视频在线观看| 免费观看成人av| 国产欧美日韩激情| 99久久久精品| 午夜欧美在线一二页| 日韩一区二区三区电影 | 精品国产百合女同互慰| 国产成人免费9x9x人网站视频| 国产精品热久久久久夜色精品三区| 成人免费毛片片v| 一区二区三区在线免费观看| 欧美日本精品一区二区三区| 老司机午夜精品| 久久久久久毛片| 在线一区二区三区做爰视频网站| 性做久久久久久| 久久久国产精品午夜一区ai换脸| proumb性欧美在线观看| 亚洲成人综合视频| 久久久蜜臀国产一区二区| 91网站视频在线观看| 天天av天天翘天天综合网 | 五月婷婷久久综合| 久久久久久久久蜜桃| 91视视频在线观看入口直接观看www | 日韩va欧美va亚洲va久久| 国产视频在线观看一区二区三区| 91女厕偷拍女厕偷拍高清| 日韩不卡一二三区| 国产精品另类一区| 91精品国产综合久久久久久| 成人午夜精品在线| 日韩高清在线一区| 亚洲色图制服诱惑| 久久久久国产一区二区三区四区| 欧美最猛黑人xxxxx猛交| 盗摄精品av一区二区三区| 日韩精品高清不卡| 亚洲毛片av在线| 国产嫩草影院久久久久| 91精品国产免费久久综合| 日本韩国欧美在线| 成人精品小蝌蚪| 国产在线一区二区| 午夜精品福利久久久| 亚洲欧美日韩国产综合| 久久精品欧美一区二区三区不卡| 欧美久久一二区| 欧美视频在线观看一区| 99久久国产综合精品色伊| 国内精品写真在线观看| 免费不卡在线视频| 亚洲成人综合视频| 亚洲午夜精品17c| 亚洲男人天堂一区| 自拍偷拍亚洲综合| 中文字幕一区二区三区四区不卡| 国产欧美日韩在线| 国产欧美日韩在线| 久久久久久久久免费| 欧美成人激情免费网| 欧美一三区三区四区免费在线看| 欧美优质美女网站| 欧美日韩免费视频| 在线播放视频一区| 91麻豆精品国产综合久久久久久 | 久久久久久黄色| 欧美成人官网二区| 亚洲精品在线一区二区| 久久久久久一级片| 国产欧美一区二区精品久导航| 中文字幕欧美日韩一区| 国产精品免费久久| 亚洲伦理在线免费看| 亚洲精品一二三| 午夜欧美电影在线观看| 日本成人在线看| 韩国女主播一区二区三区| 经典一区二区三区| 国产91色综合久久免费分享| 99久久综合99久久综合网站| 91丨porny丨蝌蚪视频| 在线看国产日韩| 欧美一区二区国产| 国产三级精品在线| 亚洲日本青草视频在线怡红院 | 欧美xxx久久| 久久精品日韩一区二区三区| 成人欧美一区二区三区| 亚洲第一会所有码转帖| 美腿丝袜在线亚洲一区 | 中文字幕一区视频| 亚洲成av人片在线观看无码| 久久电影网站中文字幕| 丁香婷婷综合激情五月色| 91久久人澡人人添人人爽欧美| 欧美久久久一区| 亚洲国产经典视频| 午夜成人在线视频| 国产98色在线|日韩| 色老汉一区二区三区| 日韩免费一区二区| 亚洲美女在线一区| 国产在线精品一区二区不卡了| 91色乱码一区二区三区| 日韩你懂的电影在线观看| 亚洲欧美电影院| 国产精品主播直播| 欧美精品1区2区| 亚洲欧美色综合| 国产美女一区二区| 7777精品伊人久久久大香线蕉| 国产精品久久久久永久免费观看 |