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

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

?? motor_driver.c

?? freescale mc9s12hz256 step motor control
?? C
字號:
#include <MC9S12HZ256.h>     /* derivative information */
#include "Motor_Driver.h"
#include "can.h"
#include "timer.h"
#include <hidef.h> 
unsigned int data_receive[32]; 
unsigned int final_step[4],current_step[4];
unsigned int step_1_times;
unsigned int motor_step2;
unsigned char Duty;

int dir_p[4];
unsigned char state_0;

volatile const char SinTbl4[48]={0,6,11,17,22,29,35,42,48,54,62,70,\
 						77,84,91,97,102,107,112,116,119,123,126,127,\
 						128,128,126,124,121,117,112,107,102,97,91,84,\
 						77,70,62,54,48,42,35,29,22,17,11,6};
volatile const char CosTbl4[48]={128,128,128,127,126,125,123,121,119,116,112,107,\
					    102,97,91,84,77,70,62,54,46,35,24,13,\
					    2,9,20,	31,42,52,62,70,77,84,91,97,\
					    102,107,112,116,119,121,123,125,126,127,128,128};
					    
					    
volatile const char SinTbl4_1[24]=
            {0,2,9,19,32,47,\
 						64,80,96,109,119,126,\
 						128,126,119,109,96,80,\
 						64,47,32,19,9,2};
volatile const char CosTbl4_1[24]=
             {128,126,119,109,96,80,\
					    64,47,32,19,9,2,\
					    0,2,9,19,32,47,\
					    64,80,96,109,119,126};
					    
volatile const char SinTbl4_2[8]=
            {0,19,\
 						64,109,\
 						128,109,\
 						64,19};
volatile const char CosTbl4_2[8]=
             {128,109,\
					    64,19,\
					    0,19,\
					    64,109};					    
volatile const char SinTbl4_3[12]=
            {0,9,32,\
 						64,96,119,\
 						128,119,96,\
 						64,32,9};
volatile const char CosTbl4_3[12]=
             {128,119,96,\
					    64,32,9,\
					    0,9,32,\
					    64,96,119};	
volatile const char SinTbl4_4[12]=
            {0,21,43,\
 						64,83,107,\
 						128,107,83,\
 						64,43,21};
volatile const char CosTbl4_4[12]=
             {128,107,83,\
					    64,43,21,\
					    0,21,43,\
					    64,83,107};						    				    
					    					    
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void init_stepper1()
{	
	MCCTL0=0x00;			  //;fbus(Eclock)=0, FAST=0 (slow mode)
	MCCTL1=0x80;   		  //;RECIRC =1 (low side), disable interrupt for PWM motor
	MCPERW=0x0080;		  //;0x80=128 resoultion frequency = fbus(Eclock)/resoulation 
 					            //                          = 62.5K(8M/128)		
	MCCC0=0x90;			    //;Dual Full H-bridge mode,left aligned
	MCCC1=0x90;			    //;Dual Full H-bridge mode,left aligned
	MCDC0W=0x0000;		  //;Duty cycle channel 0 for micro-stepping initialization
	MCDC1W=0x0000;		  //;Duty cycle channel 1 for micro-stepping initialization
  final_step[0]=00;
  current_step[0]=0000;
  dir_p[0]=0;
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void init_stepper2()
{
  MCCC2=0X90;
  MCCC3=0X90;
  MCDC2W=0X0000;
  MCDC3W=0X0000;
  final_step[1]=0000;
  current_step[1]=0000;
  dir_p[1]=0;
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void init_stepper3()
{
  MCCC4=0X90;
  MCCC5=0X90;
  MCDC4W=0X0000;
  MCDC5W=0X0000;
  final_step[2]=0000;
  current_step[2]=0000;
  dir_p[2]=0;
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void init_stepper4()
{
  MCCC6=0X90;
  MCCC7=0X90;
  MCDC6W=0X0000;
  MCDC7W=0X0000;
  final_step[3]=0000;
  current_step[3]=0000;
  dir_p[3]=0;
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void Motor_init(void) 
{
  init_stepper1(); 
  init_stepper2(); 
  init_stepper3(); 
  init_stepper4(); 
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
unsigned char motor_micro_update_12_dup(unsigned char channel) 
{
  unsigned char	ctemp,dir,i;
  volatile unsigned char *address;
  unsigned long data_temp;
  int		temp,itemp;
  itemp=final_step[channel-1]-current_step[channel-1];
  
	if((itemp>24)||(itemp<-24))//if (itemp!=0)//
	{
    if ((itemp<0)&&(dir_p[channel-1]<1))
    {
      dir_p[channel-1]=-1;
      current_step[channel-1]--;
      address=&MCDC0H+(channel-1)*4;
	    temp =current_step[channel-1];
	    ctemp=temp%24;
	    if((ctemp<6))
	    {
	      *address|=S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if((ctemp>=6)&&(ctemp<12))
	    {
	      *address|=S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if((ctemp>=12)&&(ctemp<18))
	    {  
	      *address&=~S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if((ctemp>=18)&&(ctemp<24))
	    {
	      *address&=~S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    if(ctemp>=12)
	     ctemp-=12;	  	
	    *(address+1)=SinTbl4_4[ctemp];
	    *(address+3)=CosTbl4_4[ctemp];							
    }
    else if((itemp<0)&&(dir_p[channel-1]==1))
    {
       dir_p[channel-1]=-1;
    }
	  else if ((itemp>0)&&(dir_p[channel-1]>-1))
	  {
	     dir_p[channel-1]=1;
	     current_step[channel-1]++;	   
	     address=&MCDC0H+(channel-1)*4;
	     temp =current_step[channel-1];
	     ctemp=temp%24;	   
	     if((ctemp<6))
	     {
	      *address&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	     }
	     else if((ctemp>=6)&&(ctemp<12))
	     {
	      *address&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	     }
	     else if((ctemp>=12)&&(ctemp<18))
	     {  
	      *address|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	     }
	     else if((ctemp>=18)&&(ctemp<24))
	     {
	      *address|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	     }
	     if(ctemp>=12)
	       ctemp-=12;	  	
	     *(address+1)=SinTbl4_4[ctemp];
	     *(address+3)=CosTbl4_4[ctemp];		 
	  }
	  else if((itemp>0)&&(dir_p[channel-1]==-1))
	  {
	     dir_p[channel-1]=1;
	  }
  }
  else 
  {
    dir_p[channel-1]=0;
    task_can_en=1;
  }//
  time_delay(20);
  return 1; 
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void motor_micro_update_12(unsigned char channel) 
{
  unsigned char	ctemp,dir,i;
  volatile unsigned char *address;
  int		temp,itemp;
  itemp=final_step[channel-1]-current_step[channel-1];
	if (itemp!=0)
	{
    if (itemp<0)
    {
     dir=0;
     current_step[channel-1]--;
    }
	  else if (itemp>0)
	  {
	   dir=1;
	   current_step[channel-1]++; 
	  }
	  address=&MCDC0H+(channel-1)*4;
	  temp =current_step[channel-1];
	  ctemp=temp%24;		
    if(dir == 1)
	  {
	    if((ctemp<6))
	    {
	      *address&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if((ctemp>=6)&&(ctemp<12))
	    {
	      *address&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if((ctemp>=12)&&(ctemp<18))
	    {  
	      *address|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if((ctemp>=18)&&(ctemp<24))
	    {
	      *address|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }	
					  
	  }
    else
	  { 
	    if((ctemp<6))
	    {
	      *address|=S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if((ctemp>=6)&&(ctemp<12))
	    {
	      *address|=S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if((ctemp>=12)&&(ctemp<18))
	    {  
	      *address&=~S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if((ctemp>=18)&&(ctemp<24))
	    {
	      *address&=~S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(address+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }												
	  } 
	
	  if(ctemp>=12)
	   ctemp-=12;	  	
	  *(address+1)=SinTbl4_3[ctemp];
	  *(address+3)=CosTbl4_3[ctemp];
  }
  else 
  {
   task_can_en=1;
  }
}
/**************************************************************************************************
*
*
*
***************************************************************************************************/
void motor_update(unsigned char channel)
{
 	volatile unsigned char	ctemp,*motor_channel;
 	unsigned char dir;
	int		temp,itemp;
	
	itemp=final_step[channel]-current_step[channel];
	
	if (itemp!=0)
	{
	  if (itemp<0)
	  {
	    current_step[channel]--;
	    dir=0;
	  }
	  else if (itemp>0)
	  {
	    current_step[channel]++;
	    dir=1;
	  }
	  motor_channel=&MCDC0H+channel*4;
	
	  temp = current_step[channel];
    asm	{
		ldd		temp;
		ldx		#4
		idiv
		stab	ctemp
	  }		
	  if(dir == 1)
	  {
	    if(ctemp==0)
	    {
	      *motor_channel&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(motor_channel+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if(ctemp==1)
	    {
	      *motor_channel&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(motor_channel+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if(ctemp==2)
	    {  
	      *motor_channel|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(motor_channel+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if(ctemp==3)	
	    {
	      *motor_channel|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(motor_channel+2)|=S1_DTC;		//;Duty cycle channel 1 (B PWM /B low)
	    }
	  }
	  else
	  {
	    if(ctemp==0)
	    {
	      *motor_channel&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(motor_channel+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }
	    else if(ctemp==1)
	    {
	      *motor_channel&=~S0_DTC;		//;Duty cycle channel 0 (A low /A PWM)
	      *(motor_channel+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if(ctemp==2)
	    {  
	      *motor_channel|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(motor_channel+2)|=S1_DTC;	//;Duty cycle channel 1 (B PWM /B low)
	    }
	    else if(ctemp==3)
	    {
	      *motor_channel|=S1_DTC;		//;Duty cycle channel 0 (A PWM /A low)
	      *(motor_channel+2)&=~S0_DTC;	//;Duty cycle channel 1 (B low /B PWM)
	    }						  
	  }	   			  			
  }
  /*else		 
  {
	  MotorStatus[channel]=OFF;		
  }*/ 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片欧美视频| 久久欧美中文字幕| 欧美一区二区三区爱爱| 久久综合九色综合97_久久久| 久久久久久久网| 亚洲人亚洲人成电影网站色| 亚洲精品成人精品456| 青青草一区二区三区| 国产成人综合网站| 欧美色图第一页| 久久亚洲欧美国产精品乐播| 1024成人网| 蜜桃视频第一区免费观看| 国产91精品久久久久久久网曝门| 91婷婷韩国欧美一区二区| 日韩一区二区麻豆国产| 国产精品青草久久| 日韩国产欧美三级| 国产91高潮流白浆在线麻豆| 欧美日韩精品一区二区天天拍小说 | 蜜臀av国产精品久久久久| 国产精品中文字幕日韩精品| 91九色最新地址| 久久久久久一级片| 亚洲国产中文字幕| 国产电影一区二区三区| 欧美日韩精品一区二区三区| 国产女人aaa级久久久级| 午夜精品福利久久久| 成人黄色在线视频| 欧美一二三区在线| 亚洲卡通动漫在线| 国产精品99精品久久免费| 欧美三级蜜桃2在线观看| 国产在线视频精品一区| 在线日韩一区二区| 国产精品色眯眯| 精油按摩中文字幕久久| 欧美性大战久久| 亚洲欧洲性图库| 精东粉嫩av免费一区二区三区| 在线观看91精品国产入口| 日本一区二区视频在线| 老色鬼精品视频在线观看播放| 在线视频国内一区二区| 中文字幕中文字幕一区二区| 精品一区二区免费| 91精品国产综合久久久久久久 | 日韩精品视频网站| 91网站在线观看视频| 国产欧美日韩另类一区| 精品一二三四区| 69堂精品视频| 一区二区三区欧美日韩| 94色蜜桃网一区二区三区| 久久精品视频免费| 精品中文字幕一区二区| 欧美一个色资源| 亚洲第一精品在线| 欧美熟乱第一页| 亚洲女性喷水在线观看一区| 成人精品视频一区| 国产色婷婷亚洲99精品小说| 精品一区二区三区久久久| 91精品黄色片免费大全| 亚洲第一激情av| 欧美色图天堂网| 亚洲一区二区欧美日韩| 色网综合在线观看| 亚洲欧美日韩在线不卡| 成人免费看视频| 国产精品无遮挡| 成人免费视频视频在线观看免费 | 国产美女一区二区三区| 精品成人a区在线观看| 免费xxxx性欧美18vr| 日韩三级伦理片妻子的秘密按摩| 性做久久久久久久免费看| 欧美日韩国产高清一区二区| 一区二区三区精品在线| 欧美日韩一区精品| 亚洲第一在线综合网站| 在线不卡免费av| 免费在线看一区| 欧美成人bangbros| 国产一区二区三区在线看麻豆| 精品福利二区三区| 国产成人午夜视频| 韩国精品一区二区| 欧美高清在线一区| 色综合激情五月| 一区二区三区91| 欧美日韩mp4| 久久成人麻豆午夜电影| 久久久久久日产精品| av在线播放成人| 亚洲综合色噜噜狠狠| 欧美肥妇free| 国产在线乱码一区二区三区| 欧美激情在线一区二区三区| 色呦呦国产精品| 同产精品九九九| 精品国产1区二区| 成人av第一页| 亚洲国产精品一区二区久久| 欧美一区二区三区日韩视频| 国产乱码精品一区二区三区忘忧草 | 亚洲午夜av在线| 91精品国产综合久久久久| 精品无人码麻豆乱码1区2区 | 日韩国产在线一| 精品99一区二区| 91视频免费看| 日韩高清在线电影| 中文字幕精品三区| 欧美日韩成人综合| 国产九色sp调教91| 亚洲影院免费观看| 久久亚洲精华国产精华液| 91农村精品一区二区在线| 婷婷夜色潮精品综合在线| 久久蜜臀中文字幕| 欧美日韩一级二级| 高潮精品一区videoshd| 亚洲h动漫在线| 国产农村妇女毛片精品久久麻豆 | 亚洲成在线观看| www精品美女久久久tv| 在线视频你懂得一区| 国产一区日韩二区欧美三区| 亚洲精品乱码久久久久久| wwww国产精品欧美| 亚洲精品国产成人久久av盗摄| 日韩午夜小视频| 色婷婷综合久久久| 国产一区二区美女| 亚洲成人免费看| 一区精品在线播放| 精品美女在线观看| 欧美中文字幕一区二区三区| 国产精品白丝jk黑袜喷水| 视频一区二区国产| 亚洲免费观看高清完整版在线观看 | 欧美一区二区大片| 91视频观看免费| 国产乱码精品一区二区三区忘忧草| 亚洲成人精品一区二区| 日韩一区欧美小说| 久久九九久精品国产免费直播| 欧美浪妇xxxx高跟鞋交| 99精品热视频| 国产不卡一区视频| 久久国产欧美日韩精品| 午夜精品一区在线观看| 日韩一区欧美小说| 国产亚洲一二三区| 日韩欧美国产一区在线观看| 色屁屁一区二区| 不卡大黄网站免费看| 国产精品99久久久久久久女警| 午夜成人在线视频| 亚洲欧美另类综合偷拍| 国产精品天天摸av网| 久久久久久久久免费| 精品国产乱码久久久久久久久| 91麻豆精品国产91久久久久| 在线观看一区不卡| 99国内精品久久| 成人激情校园春色| 国产精品88av| 蜜臀av一区二区三区| 五月婷婷综合激情| 一区二区不卡在线视频 午夜欧美不卡在| 国产婷婷一区二区| 久久亚区不卡日本| 精品美女一区二区| 日韩三级高清在线| 欧美电影免费提供在线观看| 91精品蜜臀在线一区尤物| 欧美精品一二三区| 欧美老年两性高潮| 欧美精品乱码久久久久久按摩 | 国产成人综合亚洲网站| 国产一区二区久久| 国产一区二区在线电影| 久久草av在线| 免费高清在线视频一区·| 日韩精品久久久久久| 五月天丁香久久| 日本不卡中文字幕| 麻豆一区二区三| 精品一区二区免费在线观看| 国产一区二区影院| 成人性视频免费网站| 91亚洲国产成人精品一区二区三 | 国产精品私人影院| 综合久久久久综合| 亚洲一区二区三区在线播放| 天堂成人免费av电影一区| 日本女优在线视频一区二区|