欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32板球系統開源代碼 OV2640攝像頭+兩路PWM
[打印本頁]
作者:
960802025
時間:
2017-8-9 12:15
標題:
STM32板球系統開源代碼 OV2640攝像頭+兩路PWM
聲明:此份代碼純屬開源,拋磚引玉,請不要拿去做倒賣以及牟利工作。謝謝!
此份代碼基于stm32F407,開發板使用正點原子探索者,攝像頭也是正點原子的OV2640攝像頭,兩路PWM。一個在PF9一個在PF7。頻率50HZ,PID定時器中斷20MS,
進行了軟件二值化,并用極其簡單的算法提取質心。PID使用智能車常見的PD控制,參數還需要再仔細調整。攝像頭幀率在27-28幀左右。舵機使用MG996R,很常見,驅動電壓5.9v,采用大功率穩壓器件。由鋰電池穩壓驅動舵機。鋰電池11.4v 3S.
0.png
(33.38 KB, 下載次數: 88)
下載附件
2017-8-10 04:43 上傳
所有資料51hei提供下載:
板球系統開源代碼.7z
(928.63 KB, 下載次數: 506)
2017-8-9 12:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
stm32
單片機源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "usmart.h"
#include "usart2.h"
#include "timer.h"
#include "ov2640.h"
#include "dcmi.h"
#include "string.h"
#include "pwm.h"
//ALIENTEK 探索者STM32F407開發板 實驗35
//攝像頭 實驗 -庫函數版本
//JPEG尺寸支持列表
const u16 jpeg_img_size_tbl[][2]=
{
176,144, //QCIF
160,120, //QQVGA
352,288, //CIF
320,240, //QVGA
640,480, //VGA
800,600, //SVGA
1024,768, //XGA
1280,1024, //SXGA
1600,1200, //UXGA
};
void TIM3_Int_Init(u16 arr,u16 psc);
//RGB565測試
//RGB數據直接顯示在LCD上面
void rgb565_test(void)
{
u8 key;
LCD_Clear(WHITE);
POINT_COLOR=RED;
OV2640_ImageWin_Set((800-480)/2,(600-600)/2,480,600);
OV2640_RGB565_Mode(); //RGB565模式
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA配置
OV2640_OutSize_Set(lcddev.width,600);
DCMI_Start(); //啟動傳輸
while(1)
{
key=KEY_Scan(0);
if(key)
{
DCMI_Stop(); //停止顯示
switch(key)
{
case KEY0_PRES: //對比度設置
break;
case KEY1_PRES: //飽和度Saturation
break;
case KEY2_PRES: //特效設置
break;
case WKUP_PRES:
break;
}
DCMI_Start();//重新開始傳輸
}
delay_ms(10);
}
}
u16 rgb_buf[144][176];
u16 gray;
extern u8 flag;
u16 hang=0;
u8 X_MAX,Y_MAX=0; //小球的坐標信息
u8 X_MAX_LSAT, X_MIN_LSAT, Y_MAX_LSAT, Y_MIN_LSAT=0; //上一次小球坐標位置信息
u8 X,Y=0; //小球的質心信息
u8 X_MIN,Y_MIN=180;
int PWM_X,PWM_Y=0; //pid參數初始化
float Err_X,Err_Y=0;
float Err_X_LAST,Err_Y_LAST=0;
float Aim_X,Aim_Y=0;
float Kp,Ki,Kd=0;
int main(void)
{
u16 i,j;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168); //初始化延時函數
uart_init(115200); //初始化串口波特率為115200
usart2_init(42,115200); //初始化串口2波特率為115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
KEY_Init(); //按鍵初始化
TIM3_Int_Init(200-1,8400-1);//10Khz計數,1秒鐘中斷一次
TIM14_PWM_Init(10000-1,168-1); //重裝載值10000,所以PWM頻率為 150hz. //舵機預留
TIM11_PWM_Init(10000-1,336-1); //重裝載值10000,所以PWM頻率為 150hz.
usmart_dev.init(84); //初始化USMART
POINT_COLOR=RED;//設置字體為紅色
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"OV2640 TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/5/14");
while(OV2640_Init())//初始化OV2640
{
LCD_ShowString(30,130,240,16,16,"OV2640 ERR");
delay_ms(200);
LCD_Fill(30,130,239,170,WHITE);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"OV2640 OK");
OV2640_OutSize_Set(176,144);
OV2640_RGB565_Mode(); //RGB565模式
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)rgb_buf,sizeof(rgb_buf)/4,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);//DCMI DMA配置
DCMI_Start(); //啟動傳輸
while(1)
{
hang=0;
LCD_SetCursor(0,0);
LCD_WriteRAM_Prepare(); //開始寫入GRAM
for(i=0;i<144;i++)
{
for(j=0;j<176;j++)
{
if(j==175)
{
hang++;
LCD_SetCursor(0,i+1);
LCD_WriteRAM_Prepare(); //開始寫入GRAM
}
gray=((rgb_buf[i][j]>>11)*19595+((rgb_buf[i][j]>>5)&0x3f)*38469 +(rgb_buf[i][j]&0x1f)*7472)>>16;
if(gray>=23)
{
if(i>8&&i<136&&j<160&&j>16)
{
if(i>X_MAX) X_MAX=i;
if(i<X_MIN) X_MIN=i;
if(j>Y_MAX) Y_MAX=j;
if(j<Y_MIN) Y_MIN=j;
}
LCD->LCD_RAM=WHITE;
}
else
{
LCD->LCD_RAM=BLACK;
}
}
}
X_MAX_LSAT = X_MAX; //更新pid的real坐標信息 清除掉本次坐標用于再次遍歷最大值 最小值
X_MIN_LSAT = X_MIN;
Y_MAX_LSAT = Y_MAX;
Y_MIN_LSAT = Y_MIN;
X_MAX=0;
X_MIN=180;
Y_MAX=0;
Y_MIN=180;
X=(X_MAX_LSAT+X_MIN_LSAT)/2;
Y=(Y_MAX_LSAT+Y_MIN_LSAT)/2;
// TIM_SetCompare1(TIM14,9340); //修改比較值,修改占空比
// TIM_SetCompare1(TIM11,9300); //修改比較值,修改占空比
}
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
{
Kp=3.4;
Kd=80.9;
Aim_X=72;
Aim_Y=88;
Err_X=X-Aim_X;
Err_Y=Y-Aim_Y;
PWM_X=9340+(Err_X*Kp+(Err_X-Err_X_LAST)*Kd);
PWM_Y=9300+(Err_Y*Kp+(Err_Y-Err_Y_LAST)*Kd);
if(PWM_Y>9370)PWM_Y=9370;
if(PWM_Y<9230)PWM_Y=9230;
if(PWM_X>9410)PWM_X=9410;
if(PWM_X<9270)PWM_X=9270;
Err_X_LAST=Err_X;
Err_Y_LAST=Err_Y;
TIM_SetCompare1(TIM14,PWM_X); //修改比較值,修改占空比
TIM_SetCompare1(TIM11,PWM_Y); //修改比較值,修改占空比
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中斷標志位
}
復制代碼
實驗目的:
學習STM32F4的DCMI接口和OV2640攝像頭模塊的使用.
硬件資源:
1,DS0(連接在PF9)
2,串口1(波特率:115200,PA9/PA10連接在板載USB轉串口芯片CH340上面)
3,ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模塊(通過FSMC驅動,FSMC_NE4接LCD片選/A6接RS)
4,按鍵KEY0(PE4)/KEY1(PE3)
5,DCMI接口(用于驅動OV2640攝像頭模塊)
6,定時器3(用于打印攝像頭幀率等信息)
7,ALIENTEK OV2640攝像頭模塊,連接關系為:
OV2640模塊 ------------ STM32開發板
OV_D0~D7 ------------ PE6/PE5/PB6/PC11/PC9/PC8/PC7/PC6
OV_SCL ------------ PD6
OV_SDA ------------ PD7
OV_VSYNC ------------ PB7
OV_HREF ------------ PA4
OV_RESET ------------ PG15
OV_PCLK ------------ PA6
OV_PWDN ------------ PG9
實驗現象:
本實驗開機后,初始化攝像頭模塊(OV2640),如果初始化成功,則提示選擇模式:RGB565模式,或者
JPEG模式。KEY0用于選擇RGB565模式,KEY1用于選擇JPEG模式。
當使用RGB565時,輸出圖像(固定為:UXGA)將經過縮放處理(完全由OV2640的DSP控制),顯示在LCD
上面。我們可以通過KEY_UP按鍵選擇:1:1顯示,即不縮放,圖片不變形,但是顯示區域小(液晶分辨率
大。,或者縮放顯示,即將1600*1200的圖像壓縮到液晶分辨率尺寸顯示,圖片變形,但是顯示了整個
圖片內容。通過KE0Y按鍵,可以設置對比度;KEY1按鍵,可以設置飽和度;KEY2按鍵,可以設置特效。
當使用JPEG模式時,圖像可以設置任意尺寸(QQVGA~UXGA),采集到的JPEG數據將先存放到STM32F4的內
存里面,每當采集到一幀數據,就會關閉DMA傳輸,然后將采集到的數據發送到串口2(此時可以通過上位
機軟件(串口攝像頭.exe)接收,并顯示圖片),之后再重新啟動DMA傳輸。我們可以通過KEY_UP設置輸
出圖片的尺寸(QQVGA~UXGA)。通過KEY0按鍵,可以設置對比度;KEY1按鍵,可以設置飽和度;KEY2按
鍵,可以設置特效。
同時時可以通過串口1,借助USMART設置/讀取OV2640的寄存器,方便大家調試。DS0指示程序運行狀態,
DS1用于指示幀中斷。
注意事項:
1,4.3寸和7寸屏需要比較大電流,USB供電可能不足,請用外部電源適配器(推薦外接12V 1A電源).
2,本例程在LCD_Init函數里面(在ILI93xx.c),用到了printf,如果不初始化串口1,將導致液晶無法顯示!!
3,本實驗需要自備ALIENTEK OV2640攝像頭模塊一個.
作者:
zhaoming12
時間:
2017-8-10 08:25
你好 這個程序我怎么下載不到我的單片機上尼 需要改哪里嗎
作者:
ICE_J
時間:
2017-8-10 17:47
給力,謝謝樓主的無私分享。。。!
作者:
Ossoona
時間:
2017-8-10 23:53
YUV格式不是可以直接獲取灰度值嗎,感覺會更好處理
作者:
cwx070713
時間:
2017-8-11 14:45
拜服
作者:
y1887655
時間:
2017-8-11 20:43
感謝樓主!
作者:
lslws
時間:
2017-8-12 08:49
好評,贊一個
作者:
zhahl
時間:
2017-8-12 18:06
請問樓主L298N和舵機MG996是怎么連接的?謝謝!
作者:
033676
時間:
2017-8-12 20:23
膜拜大佬。
作者:
zhdming123456
時間:
2018-3-23 09:46
這個資料剛剛用得上,謝謝
作者:
qwchen
時間:
2018-3-23 14:38
感謝樓主的分享
作者:
人生如茶
時間:
2018-4-10 00:25
看看給力,謝謝樓主的無私分享。。。!
作者:
zfzfzfa
時間:
2018-4-18 17:32
666,謝謝分享
作者:
15533962307
時間:
2018-7-18 18:01
感謝樓主分享
作者:
15533962307
時間:
2018-7-18 18:03
這個可以設置成黑白的嗎
作者:
zhimian123
時間:
2018-11-8 20:35
可以用在質心循跡嗎
作者:
charon_1
時間:
2018-12-17 22:12
樓主牛逼
作者:
17660448216
時間:
2019-3-21 22:51
感謝。。
作者:
lxc123gj
時間:
2019-7-10 15:31
這個怎么用。
作者:
stmmsp
時間:
2019-7-15 14:59
這個算法怎么看不懂啊
作者:
q1055652426
時間:
2019-7-22 15:21
給力,謝謝樓主的無私分享!!。。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1