非載波下的紅外光限位,檢測在民用以及工業應用特別廣泛,但是當自然光較強,或者室外效果非常差勁,博主也遇到這個問題。
博主使用紅外對光管做把手檢測,當手握住把手后輸出高電平,撒開把手后輸出低電平。下面是電路圖:
電路的幾點說明:
J3和J1是對插接口,紅外對光管使用的型號是ST178。
當對光管被遮擋后,OUT端電壓降低,如果比較器A-端電壓低于A+端,OUTA就會輸出高電平,此時Q1會導通,輸出高電平。
電路使用R5和R6調節基準電壓。
當兩個對光管都被遮擋后A-端電壓大約在1V左右,A+的電壓基準大概為3.33V。
結果:
最后在現場,我是懵逼的!!! 雖然現場在室內,但是,窗戶的自然采光量已經導致A-端電壓在1V左右,當時大約在中午,下午把手都恢復正常了。但是這肯定不合格。因此為了和環境光區分設計了調制信號版本的紅外對光。
紅外調制版本電路圖:
方案說明:
該方案使用紅外發射管調制38KHZ發射,使用HS1838接收,HS1838收到38KHZ紅外信號后,會輸出低電平(但是不會持續輸出),因此38KHZ也得編碼,這里使用30HZ左右的方波信號進行編碼。和紅外通信原理類似。
第一種版本:
NE555調制版本
電路說明:
上面是發射電路,其中D1是紅外發射管,左邊用三極管構成一個多諧振蕩器產生30HZ開漏輸出信號,右邊是NE555產生38KHZ 60%占空比推挽輸出信號,因此最終30HZ信號載波38KHZ發射出去,接收端會輸出30HZ的方波信號,然后處理器檢測這個30HZ方波信號就可以確定有沒有信號了,如果擋住了發射管,接收管不會有輸出,擋住了接收管也是一個道理啦。
缺點就是元件數量太多了。
因為這個電路要裝進把手里,所以一定要小。原件太多就尷尬了。
第二版本電路
這就簡單多了,J3是HX1838,D2是發射管。單片機是STM8S103F3。
TIM2作為38KHZ 60%占空比輸出。 TIM4產生30HZ編碼信號。
TIM1_CH3輸入捕獲脈沖寬度。
最后完美解決干擾問題。
下面是具體片段代碼:
定時器2產生38KHZ載波信號
TIM2_DeInit(); //定時器2 默認值TIM2_TimeBaseInit(TIM2_PRESCALER_4, 103);// 配置定時器2 主時基TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_DISABLE,60, TIM2_OCPOLARITY_HIGH);//輸出PWM配置TIM2_ARRPreloadConfig(ENABLE); //打開自動裝載TIM2_CCxCmd(TIM2_CHANNEL_2, ENABLE);TIM2_Cmd(ENABLE);//使能
定時器4產生編碼信號
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 125);//1000HZ觸發頻率TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//中斷觸發TIM4_ARRPreloadConfig(ENABLE);TIM4_SetCounter(0x00);TIM4_Cmd(ENABLE);
定時器4中斷進行載波處理
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)//定時器4編碼信號 {static bool flot=0; /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ TIM4_ClearFlag(TIM4_FLAG_UPDATE);numb++;//清除標致 if(numb>15){//做一個延時使用 if(flot) {TIM2_Cmd(ENABLE);flot=0;}//打開及關閉定時器2來控制38KHZ的輸出和關閉 else{ TIM2_Cmd(DISABLE);flot=1;} numb=0;
定時器1進行輸入捕獲
TIM1_TimeBaseInit(1600, TIM1_COUNTERMODE_UP, 10000, 0x00);//定時器一些設定TIM1_ICInit(TIM1_CHANNEL_3, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00);//輸入捕獲設定TIM1_ARRPreloadConfig(ENABLE);//自動重裝載定時器TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);//使能第三通道TIM1_ITConfig(TIM1_IT_UPDATE, DISABLE);//無更新中斷TIM1_ITConfig(TIM1_IT_CC3, DISABLE);//不打開第三通道捕獲中斷 TIM1_Cmd(DISABLE);//關閉定時器
主函數處理
while(1){if(!GPIO_ReadInputPin(GPIOC, GPIO_PIN_3)){ //先檢測到低電平 TIM1_SetCounter(0x0000);//然后清空計數器 TIM1_Cmd(ENABLE);//打開定時器1 while(!TIM1_GetFlagStatus(TIM1_FLAG_CC3));//等待高脈沖 PWMdata= TIM1_GetCapture3();//獲取到脈沖寬度 TIM1_ClearFlag(TIM1_FLAG_CC3);//清除標志位 TIM1_Cmd(DISABLE);//關閉定時器1 等待下次處理 }if((PWMdata>310)&&(PWMdata<330)){ //判斷頻率是否在預設的30HZ左右 如果連續5次都是那就沒問題啦!! a++;if(a>5)LED_ON;}else {LED_OFF;a=0;}}
實物圖
這是發射接收傳感器部分
處理器部分
效果說明:
非常穩定,使用安防監控紅外燈照射,依然波形不亂。明天試試太陽底下效果。
-
電路
+關注
關注
172文章
5846瀏覽量
171905 -
電路圖
+關注
關注
10323文章
10718瀏覽量
528148 -
紅外光
+關注
關注
0文章
59瀏覽量
13041
原文標題:紅外對光管載波方案
文章出處:【微信號:cirmall,微信公眾號:電路設計技能】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論