先说说我的CLK设置 因为事先分析过各类CLK(抱歉我说的这么直白)的关系 实际我要用到唯一需要改变的CLK部分(摄像头部分和友善之臂配套的裸机CAMCLK一致)只有舵机部分 因为要把基础时间弄到US级 所以改了MPLL 48M
/*upll*/ChangeUPllValue(56,2,1);//UPLL 96M
/*mpll*/ChangeMPllValue(56,2,2);//MPLL 48M
rCLKDIVN=1<<3; // UCLK=UPLL/2=48M HCLK=MPLL=PCLK=FCLK=48M
rTCFG0=(0x2f<<8)|(0x2f);// CLK FOR TIMER input=48M/(47+1)/100=10K HZ T=0.1US
rTCFG1=0;//all timer clk=input clk =5K T=0.2us
因为该改变并不影响CAMCLK 摄像头仍可以正常工作
好了 先不说CLK 因为CAMCLK 和 PWM的CLK都在我的容忍范围之内 每帧的扫描速度和舵机的反应速度都在我的预定之内
心情不太好 直接说问题吧 ARM9配套的摄像头是可以直接提取出RGB数据 光到色转换是已经完成不需在程序设置的 那么我是把摄像头的RGB地址和240*320液晶屏的地址做了重叠的 也就是说我所需要的数据范围压缩为240*320*16(RGB565)一帧 那么我首先做的并不是划分三基色域 而是只捕捉一帧图像的最亮点 因为三基色的最大值都为白 最小值都为0 所以我第一次实验就是将灯都关掉 然后将打火机在摄像头前点亮 然后看舵机是否能带摄像头转到与火焰最亮点的行值重合 因为火焰的颜色在漆黑背景下最接近三基色最大值 所以你只需要将SDRAM中转存的RGB按照液晶屏的地址顺序读出 每读一个与前一个数据进行对比 记录下一帧数据里最大的一个RGB值 那么该值肯定就是火焰最亮点 因为我只有一个舵机 摄像头架设在舵机上面 也就是摄像头只能水平转动 所以可以将行的像素点数据 和 舵机的转角和PWM控制转角的信号 做一个量化 舵机是0到180度 像素点是1到240号 PWM是1.5MS到2.5MS 将这三者进行一个量化 比如我火焰最亮点在地Y行第X个(240*320) 那么我只用保留X 也就是1到240个像素点这范围内的第X个 180度/240P 每个PIXEL对应舵机的0.75度 又因为舵机转角和PWM 2000US对应是 每度2000US/180度 所以可以算出每PIXEL对应PWM多少US 设这个值为Z 比如火焰亮点在X 那么只需用XZ就可以控制舵机带动摄像头转动 直到摄像头的中心点240/120与X点重合(有误差 且实际不能用0到180度做量化)