![]() |
發布時間: 2018-9-20 10:08
正文摘要:這段程序,led bee 和wind heat reve 五個同樣的定義 ,同樣在P1口,程序也放在一起,led bee能夠正確的輸出0或1,wind heat reve也就是P1.5 P1.6 P1.7這三個端口的輸出電壓始終是0.17V |
風158 發表于 2018-9-20 15:16 謝謝老哥的建議 |
1276366627 發表于 2018-9-22 13:22 我沒把程序放完整,我的錯 |
你好像沒有寫循環 |
注意IO 要有個拉高電阻。 |
在沒有接任何負載的情況下測試一下,應該是虛焊 |
ULN2003驅動能力有限,換大點的驅動模塊,電源功率也要足夠大才能穩 |
破案了,軟件上有一點小問題,主要還是我用的小馬達,啟動時電流太大,電壓源會猛降,小馬達驅動不起來,用個繼電器就ok了 |
原理圖來看沒問題,你試試配置下IO口成推挽輸出看看. |
P1.5 P1.6 P1.7這三個端口,外圍電路截圖看看,看上去是三極管導通后的電壓 |
看負載電流是否超出單片機允許最大值 |
while (1) //主循環 { SS=ReadADC(0); SS=(float)SS*100/256; //數據轉換 LCD_Write_String(0,0,"T1:"); //顯示實時孵化溫度 LCD_Write_String(9,0,"T2:"); //顯示設定溫度參數 LCD_Write_String(5,0,"."); LCD_Write_String(6,0,"C"); LCD_Write_String(14,0,"."); LCD_Write_String(15,0,"C"); TempData1[0]=SS/10; TempData1[1]=SS%10; sprintf(temp1,"%d",(int)TempData1[0]); LCD_Write_String(3,0,temp1); sprintf(temp1,"%d",(int)TempData1[1]); LCD_Write_String(4,0,temp1); TempData2[0]=CK/10; TempData2[1]=CK%10; sprintf(temp2,"%d",(int)TempData2[0]); LCD_Write_String(12,0,temp2); sprintf(temp2,"%d",(int)TempData2[1]); LCD_Write_String(13,0,temp2); /*------------------------------------------------ 報警及溫度控制 ------------------------------------------------*/ if( SS >= CK ) //檢測的溫度高于設定值 { if(SS>=40) { wind=1; heat=0; led=0; bee=0; //報警 //散熱 } else { wind=1; heat=0; led=1; bee=1; } } if( SS < CK ) { if(SS<=35) { heat=1; wind=0; led=0; bee=0; //報警 //加熱 } else { heat=1; wind=0; led=1; bee=1; } } } 這是循環部分的代碼 |
diy1997 發表于 2018-9-20 11:58 不是硬件的原因,硬件測試都ok,軟件我在每個wind=1/0下面都加了heat=0/1就能夠輸出高電平了,但是新的問題出現了,這個判斷只進行一次就沒了,風扇轉一下就停了,其他一切正常 |
可能是被外部元件拉低了,斷開連接試試看。 |
看芯片規格書,結合硬件分析 |