智能车制作

标题: 关于激光分时发射的疑惑。。。。 [打印本页]

作者: 飞飞小神猪219    时间: 2012-3-5 22:54
标题: 关于激光分时发射的疑惑。。。。
我用138分时选通,用P2口输出180kHZ的信号。 然后用PIT定时0.3ms让6个激光头循环点亮,问题出现了:如果只点亮1个或挨着的2个激光头,接受管可以接收到,后面的指示灯也适时熄灭。但是如果分时点亮超过2个,接受管就接受不到信号了,郁闷啊,这个问题想了一下午,头都大了,初次做这个知识有限,还望大家多多提提想法,看看怎么回事这是?我想它P2给的180kHZ信号不停的给着,而导通信号控制导通,又不会影响180kHZ 的频率,接受管怎么就接受不到呢???

附上调试的程序,大家多讨论哈

#include <hidef.h>      /* common defines and macros */
#include <mc9s12xs128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
     
#define uchar unsigned char
#define uint unsigned int
#define PITTIME  60//设定为0.3MS定时
void pllclk(void)//Busclock=32MHz
{
       CLKSEL=0X00;  //CLKSEL第七位置零,即选择时钟源为外部晶振OSCCLK
       PLLCTL=0xe1;   //禁止锁相环PLL,即PLLCTL_PLLON=0
       SYNR=3;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
       REFDV=1;
       PLLCTL=0X60;  //打开PLL电路,即PLLCTL_PLLON=1
       asm  NOP;
       asm  NOP;
       asm  NOP;
       while((CRGFLG&0X08)==0);//时钟校正同步
       CLKSEL=0X80;   //允许锁相环时钟源PLL为系统提供时钟,即CLKSEL_PLLSEL=1
}
void initPIT(void)//定时中断初始化函数 50MS定时中断设置
{
    PITCFLMT_PITE=0; //使PIT使能关断
    PITCE_PCE0=1;//定时器通道0使能
    PITMTLD0=160-1;//8位定时器初值设定。160分频,在32MHzBusClock下,为0.2MHz。即5us.
    PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.005MS
    PITINTE_PINTE0=1;//定时器中断通道0中断使能
    PITCFLMT_PITE=1;//定时器通道0使能
}
void PWM_Init(void)
{
   PWME_PWME2=0;   //关闭7通道
   
   PWMPRCLK=0X20;   //对总线时钟进行与分频,总线为32M,分频后为8M
   
   PWMCLK_PCLK2=0;  //设B为其时钟源
   
   PWMPOL_PPOL2=1; //上升沿反转
  
   PWMCAE_CAE2=0;   //左对齐输出
   
   PWMDTY2=0x0b;  //占空比为25%
   
   PWMPER2=0X29;   //输出180KHZ的波   0x2c
   
   PWME_PWME2=1;  //7通道使能
}
void IIOO_Init(void)
{
    DDRA=0XFF;
    PORTA=0Xff;
}
//********************主函数*****************************//
void main(void)
{
   DisableInterrupts;
   pllclk();
    PWM_Init();
    initPIT();
    IIOO_Init();
     
     EnableInterrupts;
    while(1)
    {
     ;
  
    }
}   

//**************************定时中断****************************//
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
    static unsigned int count1;
   
  //  PORTA=count1;
    count1++;
   
   if(count1%6==0)
    PORTA=0X00;
   if(count1%6==1)
    PORTA=0X01;         //如果只点亮这2个激光,接受管可以接受到啊,再多就接受不到了
/*  if(count1%6==2)
    PORTA=0X02;     
   if(count1%6==3)
    PORTA=0X03;           
     if(count1%6==4)
    PORTA=0X04;
     if(count1%6==5)
    PORTA=0X05;        */
      
    if(count1==1000)
    count1=0;
     PITTF_PTF0=1;//清中断标志位
}


作者: 飞飞小神猪219    时间: 2012-3-5 22:55
嗯,大家给力哈
作者: 飞飞小神猪219    时间: 2012-3-6 09:01
大家给激光送180k的信号是用调制管还是PWM啊,我看好多人的比赛程序,在他们PWM初始化是没看到用那个口生成180k啊,难道都是用调制管啊?我相信还是有很多人用单片机调制的,能不能附上你们分时点亮的程序啊
作者: 飞飞小神猪219    时间: 2012-3-6 11:57
自己顶啊
作者: maple___10    时间: 2012-3-14 14:09
同求。同问。顶。
作者: maple___10    时间: 2012-3-14 14:09
+顶
作者: Originition    时间: 2012-3-14 22:23
你加个延时试试~?
作者: lijunyuan    时间: 2012-3-19 10:09
你的接收激光的程序是什么?
作者: etech    时间: 2012-3-19 12:49
用的是K60分时,X128不熟没仔细看,但感觉PORTA那块儿,0x00-0x01-0x02...这个不是间隔点亮,而是点亮一个不灭,接着点亮下一个...
作者: 飞飞小神猪219    时间: 2012-3-20 00:32
呵呵,好长时间没上网了,现在问题解决了。其实,激光高速点亮的时候,后面的指示灯就不管用了,我感觉指示灯只在调试的时候有用。采集的 时候不用管后面的指示灯,只看采集的结果就可以。
作者: 恋May    时间: 2012-3-21 15:54
飞飞小神猪219 发表于 2012-3-20 00:32
呵呵,好长时间没上网了,现在问题解决了。其实,激光高速点亮的时候,后面的指示灯就不管用了,我感觉指示 ...

是的啊= =,

作者: 夏天C的微笑    时间: 2012-3-22 20:28
不能帮助你啊。。
作者: 夏天C的微笑    时间: 2012-3-22 20:29
唉。。。。
作者: 亦友寒    时间: 2012-6-2 16:29
采集的结果怎么看啊???
作者: congcongword    时间: 2012-6-5 20:30
头好大……
作者: 拼命五狼    时间: 2012-6-20 16:15
亦友寒 发表于 2012-6-2 16:29
采集的结果怎么看啊???

用串口读回数据啦!!

作者: 无叶    时间: 2013-8-26 21:50
能不能参考一下你的分时点亮的程序,我是新手,谢谢





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2