5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 25888|回复: 104
打印 上一主题 下一主题

【不出成品-博士开讲】FPV基本装备(三)机载快速同步聚焦3X光学变焦CCD摄像机的制作

[复制链接]
跳转到指定楼层
楼主
发表于 2010-3-21 23:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【5iMX不让搞成品,大家再也不要问出成品的事或提投票的事,仅限于DIY,我们不能在这搞商业的模型和模型的商业,这是游戏规则,切忌切记】
我的专辑有一段时间没有更新了,很长一段时间忙于行政事务。
3X变焦镜头CCD摄像机的终于可以交差了。
在此分享给各位。
FPV带来的一个好处就是可以带着玩家的“眼睛”在天上翱翔。
飞得高了,自然也就看得远了。但是因为CCD摄像机本身的像素限制,即便是用目前最好的HQ HAD CCD摄像机看到的景物和视野也是有限的。因此视野与分辨率始终是一个矛盾。
解决这个矛盾的办法就是可以变焦,这样想看大视野可以用小的,想看细节就将远景拉近来看。因此就要用到变焦镜头。
市场目前销售的22X、27X、30X甚至220X的一体化CCD很多,但是价格太贵,而且太重,不适合FPV飞机用。
最要命的是那些一体机,不会快速同步聚焦。稍有晃动,就会要重新聚焦,而且22X的变倍,飞机上基本用不了,太大的倍数,看到的景物会晃到你呕吐。
一般可以选择3~5X比较理想。通常理想的选择有4-9mm,5-15mm,8-20mm
初学者选择4-9mm比较好,这样从3.6mm标准镜头开始,可以变到9mm,具有3倍左右的视力放大,相当于原来33万像素的垃圾CCD被放大到HQ HAD CCD还要好一倍的分辨率水平。
5-15mm适合风景的同步采集;8-20mm的主要用于无人机侦察。


[ 本帖最后由 电动机 于 2010-4-2 07:47 编辑 ]

4-9mm.jpg (50.98 KB, 下载次数: 82)

4-9mm.jpg

评分

参与人数 2威望 +4 收起 理由
耍流氓的小屁孩 + 2 很给力!魔界真正高手!
yljon + 2 【发贴鼓励】感谢分享!

查看全部评分

欢迎继续阅读楼主其他信息

沙发
 楼主| 发表于 2010-3-21 23:51 | 只看该作者

准备材料

(一)同步聚焦镜头,需要自购
先说说这个同步聚焦镜头是怎么回事吧。
变焦摄像头的聚焦,一般由CCD驱动芯片提供一个IS监测信号给CPU,一般从CCD获取的景物里提取高频分量(细节像素),当聚焦清晰时,这个信号就强。这样CPU尝试前后聚焦,当检测到最强点时停下来,就是是聚焦好了,通常聚焦时可以听到镜头“吱吱”的声音。因为这个聚焦需要电路和机械配合来完成,通常需要一段时间和稳定的背景,否则难以快速聚焦。因此,市场上区分一体摄像机好坏的一个标准就是看谁的聚焦速度快(清晰度由CCD厂家决定了,无法进一步提高),所谓的“快球”就可以多卖更贵的价钱。
FPV飞机上看到的景物通常可以达到一个很高的速度,因此在变焦时可能面临一个严峻的挑战,就是快速聚焦的问题,不好的摄像头可能很长时间都不能完成聚焦,因为景物在一直变化。
为了克服上述问题,快速同步聚焦摄像头的原理是这样的:一般我们假设FPV离地面的成像距离远远大于10米以上,最远达到无穷远。这样可以将镜头镜片组的物理“焦点”校准位置连续记录下来,用一个曲槽刻在镜头外壳上,这样当镜片组快速移动时,被限制在这个已经测量好的“轨道上”,因此焦距自然也是清晰的了。从而实现了快速聚焦的目的。电路上就舍弃了那IS监测信号了,这样几乎所以市面上销售的CCD电板都不用在电路上改动,不加改造的就与这个变焦镜头匹配了。
那么这个镜头组件其实就是一个裸件了,除了镜头组的镜片外,还有一个2相4线的微型步进电机,控制镜头镜片的前后移动。我们的电路设计就是要针对这个小电机来进行。
(二)单片机芯片与驱动芯片
1、STC11F01或者其它51兼容的单片机芯片一片,2元。其它可以是ATM98C2051一类的,淘宝上很多,电子市场大把有
(此处涉及广告,删除文字若干,版主留)
2、ULN2003同向驱动芯片,1元。
(此处涉及广告,删除文字若干,版主留)
3、电阻、电容、插头插座若干
原件都非常好找。
4、自己下 载程序需要DIY一个串口转换器。
USB-232,或者USB-232TTL,推荐TTL电平的,这样不用由232电平再转换一次TTL了。
一般都是PL2303驱动的



需要自己将里面的线头挑出来接成下 载线。DIY的方法近似参考
http://info.shouji.com.cn/play/39/400997.shtml
自己做比较简单,旧的手机USB串口适配器可以改装。
5、自己焊的话,需要一小块万用PCB板,5~6块一片,其实只要其中的几毛大小就够了
(此处涉及广告,删除文字若干,版主留)

裸头.jpg (18.93 KB, 下载次数: 87)

裸头.jpg
3
 楼主| 发表于 2010-3-21 23:53 | 只看该作者

二 控制电路

上面讲到实现变焦的关键是控制电路,能够使镜头前后移动。
那么遥控接收输出的只是比例脉宽信号,就是我们常用的舵机信号。
这个舵机信号如何变成能前后驱动电机的信号呢?有模友已经积极探索,将舵机拆了,用舵机里的小齿轮和电机替换了那个步进电机,实现了变焦。其实这有点“画蛇添足”了。直接驱动那个步进电机就OK了。
先了解一下舵机信号吧。舵机PPM信号其实是一个1.5ms脉宽信号,移动摇杆可以在0.9~2.1ms之间变化输出,也就是所谓的舵量了。
单片机要做的工作就是将这个脉宽识别了,再按方向驱动步进电机是正转还是反转。



[ 本帖最后由 电动机 于 2010-3-24 13:53 编辑 ]

SCH原理图.jpg (81.76 KB, 下载次数: 106)

SCH原理图.jpg

评分

参与人数 1威望 +2 收起 理由
huqian1971 + 2 【精品文章】感谢分享希望继续努力发更多更 ...

查看全部评分

4
 楼主| 发表于 2010-3-21 23:57 | 只看该作者

单片机程序

其实可以用的单片机方案很多,51/AVR/PIC/ARM都可以,我这个人有一个原则就是实用简单可靠性。为了通用起见,便于大家制作,因此选用了最通用的51平台了。原件也便宜好找。
推荐国货精品(一般我只用国货,电脑神舟的,手机山寨的,汽车奇瑞的,冰箱海尔的,空调美的的,洗衣机小天鹅的)
(深圳宏晶电子的STC11F01单片机)(此处涉及广告,删除文字若干,版主留)
不到2元的价格,还自带6M左右的晶体,虽然频率随季节有些漂移,但是通过我的程序分频处理还是可以用的(为此我专门放到冰箱里2小时)。另外一片芯片是驱动步进电机用的,原来打算用一片MD127,但是这个芯片成本高很多,管脚也不好焊。关键是一片两片难买到。因此用最常用的ULN2003代替了,一般只要1块钱,我买的是7毛钱的,好像用得还可以。
以下是程序:setp-motor.c
//相机镜头电机驱动板适应于MD127驱动(4MOS门) 或ULM2003(7-OC门)
//本程序由www.5imx.com的模友“电动机”博士友情奉献
//采用任意兼容的51单片机即可实现,推荐深圳宏晶电子的STC单片机STC11F01
#include <reg51.h>

//sfr  WDT_CONTR = 0xE1 ;  //看门狗控制寄存器
//sfr AUXR =0x8e;             //两个STC专用的寄存器
//sfr BRT=0x9c;
//sfr AUXR1 =0xA2;
//舵机信号的抽样间隔比较范围,每100us一个单位
//位于M1~M2之间是舵机的中立位,小于M1是左,大于M2是右,M0和M3是设置的保护区
#define M0 0x02
#define M1 0x0c
#define M2 0x12
#define M3 0x20
//步进电机步进速度单位,越小越快,越大越慢
//电阻选择不合适的话,太快可能动力不足
#define Step_time 5
//test_127是一个循环标志,就是将相位数组依次送出的指针
static char test_127=0;  //相指针变量
//I-O口定义,分别对应A+,A-,B+,B-四个信号
sbit IN1_127=P1^0;
sbit IN2_127=P1^1;
sbit IN3_127=P1^2;
sbit IN4_127=P1^5;
//sbit IN4_127=P1^3;   //其它单片机可以改为连续管脚
sbit Servo=P3^7;   //这是舵机PPM信号输入口管脚定义

//步进脉冲图案相位数组
//const unsigned char motortb[]={0x08,0x0A,0x02,0x06,0x04,0x05,0x01,0x09};//P1.0~P1.3
const unsigned char motortb[]={0x20,0x22,0x02,0x06,0x04,0x05,0x01,0x21};  //P1.0~P1.5
//全局变量
static unsigned char ZOOM;  //镜头方向,0停止,1,2前进后推
static unsigned char flag;   //监测到PPM 信号标志
static unsigned char getsov;  //捕获到的PPM脉冲抽样计数,每100us一个单位

//定时器0 超时处理,用于捕获PPM
void timer0(void) interrupt 1
{
     
  if(Servo){  //PPM高电平处理
     if(flag==1){getsov++;}  //高电平计数
     else{flag=1;getsov=0;}  //捕获上升沿
  }
  else{    //PPM低电平处理
     if(flag==1){
  
         if(getsov>M0){ZOOM=1;}  //Zoom OUT
   if(getsov>M1){ZOOM=0;}  //STOP
         if(getsov>M2){ZOOM=2;} //Zoom IN
         if(getsov>M3){ZOOM=0;} //Error 信号错误
         flag=0;   //处理捕获完毕,清零
}
  }
}
init_system()
{

TMOD = 0x02;  /*定时器0,1-8bit自动重加载模式0*/
//time 0定时加载计数
TH0=206;TL0=206;//置定时数 ,内部6M,每个刻度为2us,100us为50个刻度,256-50 =206
ET0=1; TR0=1;  //开启定时器0
EA=1; /*开中断*/
}      
//延时程序,不同晶体频率可以修改125的值
void PAUSE(unsigned int ms)
{
  unsigned char j;
    while(ms--){
       for(j=0;j<125;j++)
       {;}
     }
}
//stop
void md127_keepmode(void)//钳住相位
{
  IN1_127=0;
  IN2_127=0;
  IN3_127=0;
  IN4_127=0;
}

void md127_reverse(void)//反向后退
{
unsigned char i;
i=P1&0xf0;
i=i+motortb[test_127];
P1=i;
test_127++;
if(test_127>7)
test_127=0;
PAUSE(Step_time);
md127_keepmode();
}
void md127_forward(void)//正向前进
{
unsigned char i;
i=P1&0xf0;
i=i+motortb[test_127];
P1=i;
test_127--;
if(test_127<0)
test_127=7;
PAUSE(Step_time);
md127_keepmode();
}
//主程序
void main()
{
  ZOOM=0;
  init_system();
  while(1){
  if(ZOOM==0){md127_keepmode();}
  if(ZOOM==1){md127_reverse();}
  if(ZOOM==2){md127_forward();}
  }   
}

RC-CAM02.JPG (57.55 KB, 下载次数: 65)

RC-CAM02.JPG
5
发表于 2010-3-22 00:05 | 只看该作者
前排就座,专心听讲
6
发表于 2010-3-22 00:24 | 只看该作者
HOHO!教授又来讲课哦!认真听讲先!:em26:
7
发表于 2010-3-22 00:59 | 只看该作者
博士是我的偶像
8
 楼主| 发表于 2010-3-22 01:12 | 只看该作者
欢迎插队
9
 楼主| 发表于 2010-3-22 01:35 | 只看该作者
继续讲一些原理。舵机捕获的办法很多,但是为了通用期间,我使用了定时器,以便大家将来可以移植到其它单片机。
舵机信号本来是可以细分的,但是为了精确的采样,过多的定时中断没有必要。因为我们只要3档其实都够用了。能够区分左右和中立位就OK。因此采用了一个比较粗的精度,同时也适应晶体精度漂移的不确定性。在0~2.1ms间我大概用了20个样本,每个大概是100us,这样定时器0就设置为8位自动重加载的模式2了,溢出值为206,正好6M的机器周期为2us,50个周期定时为100us。
还有一个地方需要说明的是,那个A+,A-,B+,B-步进电机驱动IO信号,我采用了单独IO位控制来操作的,稍微繁琐了一点,没有按传统的按字节操作,这是考虑到以后可以将输出定义在任意管脚上,比较方便一点。
10
发表于 2010-3-22 02:19 | 只看该作者
学习了,狂顶下:em26:
11
发表于 2010-3-22 08:10 | 只看该作者
:em19:
12
发表于 2010-3-22 08:11 | 只看该作者
有没有程序啊:em19:
13
发表于 2010-3-22 08:23 | 只看该作者
内容很翔实。很好,辛苦了
博士顶你  :em15: :em15:
14
发表于 2010-3-22 08:24 | 只看该作者
学习中
15
发表于 2010-3-22 08:39 | 只看该作者
:loveliness: 好人做到地,出成品吧。

我的动手能力实在太差,特别在电子方面,更是..................
16
发表于 2010-3-22 10:01 | 只看该作者
顶你
17
发表于 2010-3-22 15:13 | 只看该作者
强烈要求出成品
18
发表于 2010-3-22 18:46 | 只看该作者
出成品吧,造福大家。
19
发表于 2010-3-22 19:03 | 只看该作者

支持成品!

:em15:
20
发表于 2010-3-22 20:36 | 只看该作者
我是来听课的:em15:
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表