STM32 OV7725 传感器
目錄
- OV7725 傳感器
- 1、選擇輸出格式
- 2、選擇輸出分辨率
- 3、幀率調整
- 4、夜間模式
- 5、消除光帶
- 6、白平衡
- 7、缺陷像素矯正
- 8、黑電平矯正
- 9、視頻模式
- 10、數字縮減
- OV7725 函數
- 1、光模式
- 2、顏色飽和度
- 3、亮度
- 4、對比度
- 5、特效
- OV7725 設置參考
OV7725 傳感器
OV7725攝像機? 圖像傳感器是一種低壓CMOS器件,在一個小封裝中提供單芯片VGA相機和圖像處理器的全部功能。OV7725通過串行攝像機控制總線(SCCB)接口控制,提供多種格式的全幀、亞采樣或加窗8位/10位圖像。
設備有一個圖像陣列,可在VGA中以每秒60幀(fps)的速度運行,用戶可完全控制圖像質量、格式和輸出數據傳輸。所有必需的圖像處理功能,包括曝光控制、伽馬、白平衡、色彩飽和度、色調控制等,
特點
- 低光操作的高靈敏度
- 標準SCCB接口
- 對原始RGB、RGB的輸出支持(GRB 4:2:2,RGB565/555/444)和YCbCr(4:2:2)格式
- 支持圖像大小:VGA、QVGA和任意大小從CIF降到40x30
- 自動圖像控制功能,包括:自動曝光控制(AEC),自動增益控制(AGC)、自動白平衡(AWB),自動帶通濾波器(ABF)和自動黑電平校準(ABLC)
- 圖像質量控制,包括顏色飽和度,色調、gamma、銳度(邊緣增強)和抗信號干擾
- ISP包括降噪和缺陷校正
- 鏡頭陰影校正
- 飽和度水平自動調整(UV調整)
- 邊緣增強級別自動調整
- 降噪水平自動調整
- 幀同步能力
模塊功能框圖
| Image Sensor Array | total array of 656 x 488 pixels, with active pixels 640 x 480 in YUV mode |
| Analog Signal Processor | 模擬信號處理,包括自動增益控制(AGC)、 自動白平衡(AWB) |
| A/D Converters | 數字黑電平矯正,可選擇U/V通道延時;附加模數范圍控制 |
| Test Pattern Generator | 8-bar color bar 模數 |
| Digital Signal Processor (DSP) | 該塊控制從原始數據到RGB的插值以及一些圖像質量控制。?邊緣增強(二維高通濾波器)?顏色空間轉換器(可將原始數據更改為RGB或YUV/YCbCr)?RGB矩陣消除顏色串擾?色調和飽和度控制?可編程伽馬控制?將10位數據傳輸到8位 |
| Image Scaler(圖像裁剪 | 控制發送圖像之前所需的所有輸出和數據格式。此塊將YUV/RGB輸出從VGA縮放到CIF,并且幾乎可以調整CIF下的任何大小 |
| Timing Generator | 通常,正時發生器控制以下功能:?陣列控制和幀生成?內部定時信號生成和分配?幀速率定時?自動曝光控制(AEC)?外部定時輸出(VSYNC、HREF/HSYNC和PCLK) |
| Digital Video Port | |
| SCCB Interface | 類似于I2C |
1、選擇輸出格式
OV7725有四種輸出格式:YCbCr, RGB565/RGB555, Bayer raw RGB and Processed raw RGB
LCD驅動程序的數據格式始終為RGB。例如,RGB444、RGB565、RGB555、RGB888等。數據格式和內存接口始終是壓縮的。壓縮數據是從YCbCr數據壓縮而來的。因此,RGB和YCbCr數據都需要在后端芯片內部。
后端芯片內部分為三種
1)全ISP
可以應用傳感器功能,如缺陷像素校正、鏡頭校正、伽馬、顏色矩陣、去噪、銳度、BLC等。
2)YCbCr ISP
僅僅支持YCbCr。ISP可以將YCbCr轉換為RGB格式用于LCD顯示,并壓縮YCbCr用于存儲
3)沒有ISP
格式轉換用軟件來做
YCbCr to RGB24
Y = 0.299R + 0.587G + 0.114B
Cb = 0.568(B-Y) + 128 = –0.172R – 0.339G + 0.511B + 128
Cr = 0.713(R-Y) + 128 = 0.511R – 0.428G – 0.083B + 128
Y = ((77 * R + 150 * G + 29 * B) >> 8);
Cb = ((-43 * R - 85 * G + 128 * B) >> 8) + 128;
Cr = ((128 * R - 107 * G - 21 * B) >> 8) + 128;
RGB24 to YCbCr
R = Y + 1.371(Cr – 128)
G = Y – 0.698(Cr – 128) – 0.336(Cb – 128)
B = Y + 1.732(Cb – 128)
R = Y + (351*(Cr – 128)) >> 8
G = Y – (179*(Cr – 128) + 86*(Cb – 128))>>8
B = Y + (443*(Cb – 128)) >> 8
2、選擇輸出分辨率
1)如果有ISP
可以做裁剪,OV7725輸出僅僅VGA格式,ISP將VGA圖像縮放到移動設備所需的其他分辨率。
2)沒有ISP
必須使用OV7725的LCD定標器來精確縮放輸出分辨率,使其與LCD大小一致
3、幀率調整
對于60Hz光環境,建議幀速率為30fps和15fps;對于50Hz光環境,建議幀速率為25fps和14.3fps。夜間模式的幀速率較低 Frame Rate Adjustment for 24Mhz、26Mhz 13Mhz input clock
30 fps, PCLK = 24Mhz
SCCB_salve_Address = 0x42; write_SCCB(0x11, 0x01); write_SCCB(0x0d, 0x41); write_SCCB(0x2a, 0x00); write_SCCB(0x2b, 0x00); write_SCCB(0x33, 0x00); write_SCCB(0x34, 0x00); write_SCCB(0x2d, 0x00); write_SCCB(0x2e, 0x00); write_SCCB(0x0e, 0x65);4、夜間模式
有兩種設置,一種是固定幀率,另外一種是自動幀率
For 24Mhz/26Mhz Clock Input
For 24Mhz/26Mhz Clock Input
15fps ~ 3.75fps night mode for 60Hz light environment SCCB_salve_Address = 0x42; write_SCCB(0x11, 0x03); write_SCCB(0x0e, 0xe5);25fps ~ 3.125fps night mode for 50Hz light environment SCCB_salve_Address = 0x42; write_SCCB(0x11, 0x01); write_SCCB(0x0e, 0xf5);5、消除光帶
Not n/100, has band = n/100, no band
辦公室燈光的強度并不均勻。它隨交流頻率而變化。例如,如果交流頻率為50Hz,則燈光強度在100hz時發生變化。通過將曝光設置為n/100(n/120持續60Hz)秒,光帶被移除。
Banding Filter Setting for 24Mhz Input Clock
30fps for 60Hz light frequency SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xff); //banding filter enable write_SCCB(0x22, 0x7f); //60Hz banding filter write_SCCB(0x23, 0x03); //4 step for 60hz15fps for 60Hz light frequency SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xff); //banding filter enable write_SCCB(0x22, 0x3f); //60Hz banding filter write_SCCB(0x23, 0x07); //8 step for 60hz25fps for 50Hz light frequency SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xff); //banding filter enable write_SCCB(0x22, 0x98); //50Hz banding filter write_SCCB(0x23, 0x03); //4 step for 50hz光帶不能去除的情況
正常情況下,光帶是可以通過帶狀濾波片去除。
但也有一些特殊情況,如太陽光和辦公室光混合,熒光燈拍照,光帶無法去除。原因是50hz光環境的曝光時間小于1/100秒,60hz光環境的曝光時間小于1/120秒,因此無法移除光帶。
6、白平衡
1)簡單白平衡
簡單白平衡假設為“灰色世界”。這意味著世界的平均顏色是灰色的。
優點:簡單的白平衡不依賴于鏡頭。簡單白平衡的一般設置可適用于具有不同鏡頭的所有模塊。
缺點:在“灰色世界”不真實的情況下,顏色不準確。例如,背景有巨大的紅色、藍色或綠色等。前景的顏色會不準確。如果相機的目標顏色單一(如紅、藍、綠)簡單的白平衡會使單色變成灰色。
2)高級白平衡
高級白平衡使用色溫信息檢測白色區域并進行白平衡。
優點:顏色比簡單白平衡更加準確,甚至在單一背景情況下,相機也不會使單色變成灰色。
缺點:高級白平衡設置取決于鏡頭。必須為每個帶有新鏡頭的模塊調整設置。調整必須由光學實驗室的光學設備進行。
白平衡模式如何選擇?
通常,對于低分辨率相機模塊,如CIF、VGA和1.3M,選擇簡單AWB。對于高分辨率相機模塊,如2M、3M,選擇高級AWB。
7、缺陷像素矯正
缺陷像素包括死像素和傷像素。
死像素包括白死像素和黑死像素。白色死像素始終是白色的,無論實際圖片是亮還是暗。黑死像素始終為黑色,無論實際圖片是亮還是暗。
受傷的像素可能會隨著光線而變化,但不會像正常像素那樣變化。白色受傷像素比普通像素亮得多,但不是完全白色。黑色受傷像素比正常像素暗得多,但不是完全黑色。
OV7725具有內置的缺陷像素校正功能。如果OV7725輸出YCbCr、RGB565、處理后的原始RGB,則可以啟用缺陷像素校正功能來修復缺陷像素。但如果使用Bayer原始RGB,則無法使用傳感器的缺陷像素校正功能。應使用后端芯片的缺陷像素校正。
8、黑電平矯正
黑電平校準(BLC)的功能是在圖像的黑暗區域產生準確的顏色。OV7725內置自動BLC功能。它應該總是打開的。
9、視頻模式
視頻模式需要高幀速率,通常固定為15fps。視頻模式沒有夜間模式。
10、數字縮減
如果OV7725輸出的圖像小于QVGA,則可能支持數字變焦。例如
VGA不支持數碼變焦
QVGA 1x,2x
QVGA 1x、2x、4x
QCIF 1x,1.8x
QQCIF 1x、2x、3.6x
OV7725 函數
1、光模式
Auto SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xff); //AWB on write_SCCB(0x0e, 0x65); write_SCCB(0x2d, 0x00); write_SCCB(0x2e, 0x00);Sunny SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xfd); //AWB off write_SCCB(0x01, 0x5a); write_SCCB(0x02, 0x5c); write_SCCB(0x0e, 0x65); write_SCCB(0x2d, 0x00); write_SCCB(0x2e, 0x00);Cloudy SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xfd); //AWB off write_SCCB(0x01, 0x58); write_SCCB(0x02, 0x60); write_SCCB(0x0e, 0x65); write_SCCB(0x2d, 0x00); write_SCCB(0x2e, 0x00);Office(辦公室模式) SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xfd); //AWB off write_SCCB(0x01, 0x84); write_SCCB(0x02, 0x4c); write_SCCB(0x0e, 0x65); write_SCCB(0x2d, 0x00); write_SCCB(0x2e, 0x00);Home 家模式 SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xfd); //AWB off write_SCCB(0x01, 0x96); write_SCCB(0x02, 0x40); write_SCCB(0x0e, 0x65); write_SCCB(0x2d, 0x00); write_SCCB(0x2e, 0x00);Night(夜晚模式) SCCB_salve_Address = 0x42; write_SCCB(0x13, 0xff); //AWB on write_SCCB(0x0e, 0xe5);2、顏色飽和度
OV7725的色彩飽和度可以調整。高色彩飽和度會使圖片看起來更生動,但副作用是噪音更大,膚色不準確。
Saturation + 4 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x80); write_SCCB(0xa8, 0x80);Saturation + 3 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x70); write_SCCB(0xa8, 0x70);Saturation + 2 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x60); write_SCCB(0xa8, 0x60);Saturation + 1 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x50); write_SCCB(0xa8, 0x50);Saturation 0 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x40); write_SCCB(0xa8, 0x40);Saturation -1 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x30); write_SCCB(0xa8, 0x30);Saturation - 2 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x20); write_SCCB(0xa8, 0x20);Saturation - 3 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x10); write_SCCB(0xa8, 0x10);Saturation - 4 SCCB_salve_Address = 0x42; write_SCCB(0xa7, 0x00); write_SCCB(0xa8, 0x00);3、亮度
OV7725的亮度可以調整。亮度越高,圖片越亮。高亮度的副作用是圖片看起來有泡沫
Brightness +4 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x48); write_SCCB(0xab, 0x06);Brightness +3 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x38); write_SCCB(0xab, 0x06);Brightness +2 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x28); write_SCCB(0xab, 0x06);Brightness +1 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x18); write_SCCB(0xab, 0x06);Brightness 0 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x08); write_SCCB(0xab, 0x06);Brightness -1 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x08); write_SCCB(0xab, 0x0e);Brightness -2 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x18); write_SCCB(0xab, 0x0e);Brightness -3 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x28); write_SCCB(0xab, 0x0e);Brightness -4 SCCB_salve_Address = 0x42; write_SCCB(0x9b, 0x38); write_SCCB(0xab, 0x0e);4、對比度
OV7725的對比度可以調整。對比度越高,圖像越清晰。但副作用是失去了動態范圍
Contrast +4 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x30);Contrast +3 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x2c);Contrast +2 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x28);Contrast +1 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x24);Contrast 0 SCCB_salve_Address = 0x42 write_SCCB(0x9c, 0x20);Contrast -1 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x1c);Contrast -2 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x18);Contrast -3 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x14);Contrast -4 SCCB_salve_Address = 0x42; write_SCCB(0x9c, 0x10);5、特效
OV7725支持一些特殊效果,如黑白、負片、深褐色、藍色、redish、綠色等。如果用戶需要其他特殊效果,應該由后端芯片支持
Normal SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x06); write_SCCB(0x60, 0x80); write_SCCB(0x61, 0x80);B&W SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x26); write_SCCB(0x60, 0x80); write_SCCB(0x61, 0x80);Bluish SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x1e); write_SCCB(0x60, 0xa0); write_SCCB(0x61, 0x40);Sepia SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x1e); write_SCCB(0x60, 0x40); write_SCCB(0x61, 0xa0);Redish SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x1e); write_SCCB(0x60, 0x80); write_SCCB(0x61, 0xc0);Greenish SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x1e); write_SCCB(0x60, 0x60); write_SCCB(0x61, 0x60);Negative SCCB_salve_Address = 0x42; write_SCCB(0xa6, 0x46);OV7725 設置參考
13.1 YCbCr //OV7720, YCbCr, VGA //15fps at 24MHz input clock, 4x maximum gain //2/27/2007 write_SCCB(0x12, 0x80); // Reset Delay(2ms); write_SCCB(0x3d, 0x03); write_SCCB(0x17, 0x22); write_SCCB(0x18, 0xa4); write_SCCB(0x19, 0x07); write_SCCB(0x1a, 0xf0); write_SCCB(0x32, 0x00); write_SCCB(0x29, 0xa0); write_SCCB(0x2c, 0xf0); write_SCCB(0x2a, 0x00); write_SCCB(0x11, 0x01); write_SCCB(0x42, 0x7f); write_SCCB(0x4d, 0x09); write_SCCB(0x63, 0xe0); write_SCCB(0x64, 0xff); write_SCCB(0x65, 0x20); write_SCCB(0x66, 0x00); write_SCCB(0x67, 0x48); write_SCCB(0x13, 0xf0); write_SCCB(0x0d, 0x41); // 0x51/0x61/0x71 for different AEC/AGC window write_SCCB(0x0f, 0xc5); write_SCCB(0x14, 0x11); write_SCCB(0x22, 0x7f); write_SCCB(0x23, 0x03); write_SCCB(0x24, 0x40) write_SCCB(0x25, 0x30); write_SCCB(0x26, 0xa1); write_SCCB(0x2b, 0x00); write_SCCB(0x6b, 0xaa); write_SCCB(0x13, 0xff); write_SCCB(0x90, 0x05); write_SCCB(0x91, 0x01); write_SCCB(0x92, 0x03); write_SCCB(0x93, 0x00); write_SCCB(0x94, 0xb0); write_SCCB(0x95, 0x9d); write_SCCB(0x96, 0x13); write_SCCB(0x97, 0x16); write_SCCB(0x98, 0x7b); write_SCCB(0x99, 0x91); write_SCCB(0x9a, 0x1e); write_SCCB(0x9b, 0x08); write_SCCB(0x9c, 0x20); write_SCCB(0x9e, 0x81); write_SCCB(0xa6, 0x06); //Gamma write_SCCB(0x7e, 0x0c); write_SCCB(0x7f, 0x16); write_SCCB(0x80, 0x2a); write_SCCB(0x81, 0x4e); write_SCCB(0x82, 0x61); write_SCCB(0x83, 0x6f); write_SCCB(0x84, 0x7b); write_SCCB(0x85, 0x86); write_SCCB(0x86, 0x8e); write_SCCB(0x87, 0x97); write_SCCB(0x88, 0xa4); write_SCCB(0x89, 0xaf); write_SCCB(0x8a, 0xc5); write_SCCB(0x8b, 0xd7); write_SCCB(0x8c, 0xe8); write_SCCB(0x8d, 0x20); // for 30 fps, 60Hz write_SCCB(0x33, 0x00); write_SCCB(0x22, 0x7f); write_SCCB(0x23, 0x03); // for 25 fps, 50Hz //write_SCCB(0x33, 0x66); //write_SCCB(0x22, 0x99); //write_SCCB(0x23, 0x03); // Lens Correction, should be tuned with real camera module write_SCCB(0x4a, 0x10); write_SCCB(0x49, 0x10); write_SCCB(0x4b, 0x14); write_SCCB(0x4c, 0x17); write_SCCB(0x46, 0x05); write_SCCB(0x0e, 0x65);總結
以上是生活随笔為你收集整理的STM32 OV7725 传感器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OV7670手册相关摘要
- 下一篇: mac 安装jq