最近在玩Arduino,買的是Arduino uno R3 這塊板,上面的晶片是ATmega328p

看的是 <<超圖解Arduino 互動設計入門(第二版) >> 這本書

之前做了開關電路,拿來控制Relay,書上說開關用上拉電阻或下拉電阻的配置方式都可以

但實際上,因為這個IC沒有支援上拉的配置,所以建議還是使用下拉電阻配置為佳,

使用上拉電阻雖然在負載小時可以工作,但負載高時就會誤動作

詳細的討論可以參考知乎上的這個討論串

或是去查ATmega328P的data sheet

 

然後之前我接成上拉電阻配置,去給別人用,結果在現場它變成開關一直跳動,當場漏氣

所以:書上講的是有問題的!!還是不要接成上拉電阻比較好XD

 

===

為了搞清楚這塊板子的特性,於是乎這兩天做了實驗,測了開關電路上拉跟下拉配置的實際電流電壓量測,實際結果分享給有需要的人看看

因為篇幅有點長,這篇就先貼上拉電阻的測試結果

===

測試(A)上拉電阻配置

接法如上,5V跟GND都是接在Arduino的板子上,R就是上拉電阻,Signal_to_DI是接到DI的腳位,這次實驗是接pin12,用來控制其他腳位的DO的動作。

SW1是一個開關按鈕,不按就是開路,按了就是短路

如果是如上圖的配置的話,一般都會認為,不按的話,Signal_to_DI應該是5V,按下後Signal_to_DI變0V,然而,實際量測結果卻不是這樣!!

 

讓我們來看看實際結果吧,如下圖所示,其中,電流的單位是uA,micro ampere,10的-6次方,電壓則是指跨接在上拉電阻R上的電壓

這裡我測試了3個阻值的上拉電阻,想說可以看看有沒有什麼不理想的特性

然後,內建的上拉電阻先輸入pinMode(SW,LOW)把它關了(SW是自設的變數,這邊是設成 const byte SW = 12,表示腳位12 )

 

由結果可看出,電阻從1k換到5.1k、10k時,電流的變動量大致符合比例,但看起來還是一條曲線,而不是直線

由上圖可知,按下開關按鈕SW1後,Signal_to_DI並不會變成0V。

接著我把Arduino裡的內建上拉電阻打開,就是輸入程式碼把pin12的上拉電阻打開,看看有沒有不同,結果如下圖所示,依然沒有如預期的拉到0V,

結論就是ATmega328p 這塊IC確定不支援上拉電阻的配置!

 

接著我又把上圖測試A-2的電壓跟電流拿出來分別作圖看看(橫軸沒弄成對數的圖,不過還是可以加減看),結果如下:

電壓圖↓,可看出按下按鈕後,上拉電阻上的電壓會稍微變動,但也無法造成0V到5V這種差別,然後,另一方面,也可以發現,Arduino上的5V,其實並不會真的輸出5V,而是會稍微少一點

電流圖↓,單位是uA。

按下開關時,接1K的上拉電阻時,換算成A就是約0.00484安培,下圖可看出電流變動很小。

綜合上述兩點,就可以知道為什麼上拉電阻的配置拿去當開關會不正常了

====

以下則分享開關電錄用上拉電阻配置時,DO的輸出情況

為提高可信度,一次測試了六根DO腳位,pin4、5、6、7、8、9

DO接了不同阻值的電阻,當作負載,順便可以觀察一下是否有呈現線性的改變

 

結果如下圖:

 

由上圖可看出,就算DI部分的開關電路是用上拉電阻的配置,ATmega328P沒有支援,但DO還是會有些微的電壓電流變動,

所以我自己用這塊板拿來驅動Relay時(阻值比上面的測試都要小),其實Relay還是會開關動作,但環境雜訊大時,開關電路吸了雜訊,就可能會導致誤動作

 

下一篇則分享使用開關電路使用下拉電阻配置的量測結果,當然,結果就比這個好很多,而且實測上,也穩定許多。

 

 

arrow
arrow
    創作者介紹
    創作者 迷途工程師 的頭像
    迷途工程師

    迷途工程師的網路雜記

    迷途工程師 發表在 痞客邦 留言(0) 人氣()