当前位置:首页 > 智能车光电组程序
#include
ui average_yuanshi[12]; ui average_daxiao; ui average_daxiao_former; ui kuai; ui zhong; ui man;
ui chengxuleixing; ui tingcheshineng;
ui qipaoxian_shineng;/////方案中是否有起跑线 ui qipaoxian_geshu; //////现场数出来的起跑线个数 ui qipaoxian;
ui shousuokongzhi;////////出现波动情况下的收敛
ui xiuzhengliang;/////////通过连续记录得到的路径对当前舵量进行修正
ui flag_yunsu;
ui flag_shache;///////////刹车标志 ui flag_tuxiang;//////////图像采集标志 ui flag_caijiwancheng;////黑线提取标志 ui heidian;///////////////一排图像中黑点的个数 ui heidianjilu[10];///////记录一排中黑点的位数 ui i; ui counter;
ui add;///////////////////全白情况下舵量的增量
ui LED[5];////////////////下排光电五路 ui DOWN;//////////////////下排黑线位置 ui DOWN_former; ui DOWN_biaozhun;
ui heidian_down;//////////下排黑点个数,用于判断起跑线、坡道、十字交叉
/////速度、舵量 ui zhiturn[12]; ui Speed[100]; ui sudu[12]; ui SPEED; ui wansu; ui speed;
ui mid; ui fast;
/////记录走过的路径用于宏观控制速度 ui AVERAGE; ui lushu_servo; ui lushu_speed; ui lushu_bodong; ui heixianjishu_bodong; ui heixianjishu_servo; ui heixianjishu_speed; ui heixianjilu_bodong[20]; ui heixianjilu_servo[20]; ui heixianjilu_speed[20];
/////采集到的值 ui heixianbiaozhun[12]; ui baixianbiaozhun[12]; ui average[12]; ui BLACKLINEUP; ui LASER[12]; ui LASER_chucai[12]; ui BLACKLINEUP_former;
/////////////////PLL初始化(时钟选择PLL输入)/////////////// void PLLInit(void) {
REFDV=1;
SYNR=5; //总线时钟=16MHz*(SYNR+1)/(REFDV+1)=48MHz while(CRGFLG_LOCK==0); // wait here till the PLL is locked. CLKSEL=0x80; }
void PIT_init(void) {
PITCFLMT_PITE=0; //定时中断通道0关
//中断的触发周期=(高8位时基)×(低16位计数器)/(总线时钟平率) //周期=100×500/50000000=1ms ////点亮1ms
PITCE_PCE0=1;//采集定时器通道0使能 PITMTLD0=100-1; //(8位 0~255) PITLD0=500-1; //(16位0~65535)
PITINTE_PINTE0=1; //定时器中断通道0中断使能
//周期=200×1000/50000000=250ms //每隔记录一次黑线位置
PITCE_PCE1=1;//记录黑线位置定时器通道1使能 PITMTLD1=200-1; PITLD1=5000-1;
PITINTE_PINTE1=0; //定时器中断通道1中断使能
PITCFLMT_PITE=1; //定时器通道0使能 }
//////////////////////////PWM初始化/////////////////////////// //PWM 0,1~舵机 //PWM 2,3~33886正传
//PWM 4,5~33886为零(赋大于23的值时为反转)
//33886的两个OUT1并联接在电机正极,两个OUT2接在负极) void PWMInit(void) {
PWMCTL=0x10; //将PWM4和PWM5合成16位,PWM01合并,PWM23合并,PWM67合并
PWMPRCLK=0x33; //时钟A=时钟B=bus clock/8=50M/8=6.25M PWMSCLA=0x01; //时钟SA=时钟A/2/1=3.125M PWMSCLB=0x01; //时钟SB=时钟B/2/1=3.125M
PWMCLK=0x03; //舵机PWM01以SA为时钟,33886用PWM23,45,都以A或B为时钟
PWMPOL=0xFF; //所有通道位极限为1 PWMCAE=0x00; //所有通道左对齐
PWMPER01=62500; //舵机周期20ms F=3.125MHz/62500=50Hz PWMDTY01=4500; //舵机居中
PWMPER23=625; //33886一路IN F=6.25MHz/625=10KHz PWMDTY23=0;
PWMPER45=625; //33886另一路IN F=6.25MHz/625=10KHz PWMDTY45=0; ATD0CTL5=0x0f;
PWME=0xFF; }
///////////////////////////IO初始化/////////////////////////// void IOInit(void) {
DDRM=0xff;
DDRA=0xff; //A口输出 DDRB=0xff; //B口输出
DDRK=0xf0; //拨码开关K口低四位设为输入 PORTB=0x00; //B口接的LED亮 }
//////////////////////////SCI初始化//////////////////////////// //可以把参数发送到超级终端显示,以便实时监控 //使用了0通道 void SCIInit(void) {
SCI0BD=52;//波特率=BUS/(16*BD)=48
SCI0CR1=0x00;//正常工作,8个数据位,1个停止位 SCI0CR2=0x0c;//允许收发 }
//////////////////////////ECT初始化///////////////////////////// void ECTInit(void) {
TIOS=0x0F; //0-3通道设置为输出比较,4-7通道设置为输入捕捉 TIE=0; //初始时屏蔽所有通道的中断
TSCR2=0x04; //溢出中断,计时器频率由总线频率16分频得到==3.125MHz TCTL3=0x40; //检测上升沿
TSCR1=0x80; //启动ECT模块及计数器 IRQCR=0; //关闭行同步中断(IRQ) }
void ATDInit(void)//正在用的 {
ATD0CTL1=0x48; //7:1-外部触发,65:00-12位精度,4:放电,3210:ch ATD0CTL2=0x40; //禁止外部触发, 中断禁止
ATD0CTL3=0x80; //右对齐无符号,每次转换16个序列, No FIFO,结果存放于寄存器,Freeze模式下继续转
ATD0CTL4=0x00; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1] ATD0CTL5=0x30;
ATD0DIEN=0x00; //禁止数字输入 IRQCR=0; }
//******************************************************** ////////////////////////////初始化//////////////////////
//******************************************************** void HardInit(void) {
PLLInit(); DisableInterrupts; PIT_init(); IOInit(); PWMInit(); SCIInit(); ECTInit(); ATDInit(); }
共分享92篇相关文档