如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
电机的控制原理电机控制板0.5ms<T<2.5ms0<Angle<180舵机case7:PWM7=0;OCR1AH=1000>>8;OCR1AL=1000;uiTimeCnt+=1000;ucT1CompareCnt++;break;case8:OCR1AH=(18432-uiTimeCnt)>>8;OCR1AL=(18432-uiTimeCnt)&0XFF;ucT1CompareCnt=0;T20ms_Routine();break;default:ucT1CompareCnt=0;break;}UpdatePWM();}串转并voidUpdatePWM(void){L1=0;SDO=0;SCK=0;SCK=1;SDO=PWM7;SCK=0;SCK=1;SDO=PWM6;SCK=0;SCK=1;SDO=PWM5;SCK=0;SCK=1;SDO=PWM4;SCK=0;SCK=1;SDO=PWM3;SCK=0;SCK=1;SDO=PWM2;SCK=0;SCK=1;SDO=PWM1;SCK=0;SCK=1;L1=1;L1=0;}直流电机直流电机驱动Out1->EN1OUT2->DIR1Out3->EN2Out4->DIR2T=1msf=1kHzFASTPWMvoidSetMotorSpeed(unsignedcharucChannel,charcSpeed){unsignedcharucLocalChannel;charcLocalSpeed;cLocalSpeed=cValueLimit(cSpeed,-100,100);switch(ucLocalChannel){case1:#ifdefMOTOR1if(cLocalSpeed>0)OUT2=1;elseOUT2=0;if(cLocalSpeed==0)//为零则关闭输出{TCCR0A&=~0x80;M1Velocity=0;}elseif(cabs(cLocalSpeed)>=100)//为100则全速输出{TCCR0A&=~0x80;M1Velocity=1;}else//PWM{TCCR0A|=0x80;OCR0A=(float)cabs(cLocalSpeed)*2.55;}#endifbreak;};UpdateOut();}正转:A->B->nA->nB反转:A->nB->nA->BvoidSetStepMotor(unsignedcharucChannel,charcSpeed,intiStep){#ifdefSTEPMOTOR1if(ucLocalChannel==1){OCR0A=210-2*ucLocalSpeed;if(iStep==0){iStepMotor1Step=0;TIMSK0&=0xfd;}else{iStepMotor1Step=iStep;TIMSK0|=0x02;}}#endif}interrupt[TIM0_COMPA]voidtimer0_compa_isr(void){staticsignedcharucIntCnt=1;unsignedcharucTotalStep=4;switch(ucIntCnt){case1:M1Velocity=1;OUT2=1;M2Velocity=0;OUT4=0;break;case2:M1Velocity=0;OUT2=0;M2Velocity=1;OUT4=0;break;case3:M1Velocity=1;OUT2=0;M2Velocity=0;OUT4=0;break;case4:M1Velocity=0;OUT2=0;M2Velocity=1;OUT4=1;break;default:M1Velocity=0;M2Velocity=0;break;}#endifUpdateOut();if(iStepMotor1Step>=30000){ucIntCnt++;}elseif(iStepMotor1Step>0){iStepMotor1Step--,ucIntCnt++;}elseif(iStepMotor1Step==0){TIMSK0&=0xfd;}elseif(iStepMotor1Step>-30000){iStepMotor1Step++,ucIntCnt--;}else{ucIntCnt--;}if(ucIntCnt<=0)ucIntCnt=ucTotalStep;elseif(ucIntCnt>=ucTotalStep+1)ucIntCnt=1;}voidGetRemoteKey(void)