资源描述:
《巡线小车源程序(MSP430-PID).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、巡线小车源程序(MSP430,PID)首先是各种宏定义的头文件[cpp]viewplaincopyprint?1"myhead.h"2#ifndefxxxx_xxx3#definexxxx_xxx4#defineP435#defineI0.016#defineD1007#defineLeftMotorTurnNeg{P3OUT
2、=BIT0;P3OUT&=~BIT1;}8#defineLeftMotorTurnPos{P3OUT&=~BIT0;P3OUT
3、=BIT1;}9#defineRightMotorTurnNeg{P3OUT
4、=BIT3;P3OUT&=~BIT2
5、;}10#defineRightMotorTurnPos{P3OUT&=~BIT3;P3OUT
6、=BIT2;}11#defineLeftPwmOutTACCR112#defineRightPwmOutTACCR213#defineF1000014#defineT(/F)15#defineBASIC10016#definesimpletime(unsignedint)517#defineLEFT10018#defineRIGHT10019#endif接下来就是点击驱动的头文件[cpp]viewplaincopyprint?20"Motor.h"21#ifndefMot
7、or22#defineMotor23#include"myhead.h"24#include"msp430x14x.h"1voidMotorLeft(floatleft)2{3LeftMotorTurnPos//正转4if(left<0)5{6LeftMotorTurnNeg//反转7left=-left;8}9LeftPwmOut=(int)(left*T/100);10}11voidMotorRight(floatright)12{13RightMotorTurnPos//正转14if(right<0)15{16RightMotorTurnNeg//17righ
8、t=-right;18}19RightPwmOut=(int)(right*T/100);20}21voidDriveMotor(floatPIDout)22{23floatleft=BASIC+PIDout;24floatright=BASIC-PIDout;25if(left>100)left=100;26if(left<-100)left=-100;27if(right>100)right=100;28if(right<-100)right=-100;29MotorLeft(left);30MotorRight(right);//工作正常1}2#endif再下
9、来是主文件[cpp]viewplaincopyprint?3”main.c"45#include"Motor.h"6floatlasterror,sumerror;7floatSensor[]={-4,-3,-2,-1,0,1,2,3,4};8intflag;9voiddelay(inttime)10{}11voidtimer_inti()12{13TACTL=TASSEL_2+MC_1+TAR+ID_0;//SMCLK,增计数模式,清零,不分频;允许定时器溢出中断14TACCR0=/F;//其中F为PWM的频率15TACCTL1=OUTMOD_7;16TACCTL
10、2=OUTMOD_7;1718TBCTL=TASSEL_2+MC_1+TBR+ID_0+CNTL_0;//SMCLK,增计数模式,清零,不分频;允许定时器溢出中断,16WEI19TBCCTL0
11、=CCIE;20TBCCR0=8000*simpletime;//控制采样时间21_EINT();22}23voidIO_inti()24{1P1DIR=BIT3+BIT2;//用于定时器输出2P1SEL=BIT3+BIT2;34P3DIR=0X7f;//用作传感器输入跟电机驱动5P5DIR=0X00;//用于传感器输入67P6DIR=0XFF;//用于流水灯输出,纯粹调试用
12、89P2DIR
13、=BIT4;//外部中断,用于壁障10P2IE=BIT4;11P2IES=BIT4;1213}14voidPID_inti()15{16sumerror=0;17lasterror=0;18flag=0;19}20voidCrystal()//晶振启振程序21{22BCSCTL1&=~XT2OFF;23do24{25inti;26IFG1&=~OFIFG;27for(i=255;i>=0;i--);28}while(IFG1&OFIFG);29BCSCTL2=SELM_2+DIVM_0+SELS+DIVS_0;//SMCLK=MCLK=XT2;D