組み込み系のスキルアップに向けて(第8話)

Raspberry Pi 3BのCPU温度確認と冷却 (Ubuntu Server)

Raspberry Piの温度上限について

前回の第7話でRaspberry PiのCPUチップを指で触ると、ずっと触っていられないくらい熱かったので心配になり、Raspberry PiのCPU温度について以下のラズパイの公式サイトで調べてみた。

 https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#frequency-management-and-thermal-control

上記によると、全てのRaspberry Piモデルの初期設定では、「85℃を超えないようにCPUのクロック周波数や電圧を下げることで温度を下げる」動作をするようだ。因みに、Raspberry Pi OSでは80~85℃の間で警告が出るようだ。

現在のCPU温度の確認

CPUの温度を確認するコマンドはいくつかあるようだが、今回は以下のコマンドを使用した。

cat /sys/class/thermal/thermal_zone0/temp

測定結果を1000倍した温度が表示されるので、だいたい47℃前後で安定しいるようだ。何も動作させていない時はこんなもんだということが分かった。因みに、CPU内蔵のチップ表面を指で触ると、前回よりは温度が低いように感じる。

CPUに負荷をかけて温度を測定

そこで、以下のCPUに負荷をかけ続けるコマンドであえて温度を上昇させてみる。これは、1回のコマンドで1つのCPUコアに100%近い負荷をかけるようだ。

yes > /dev/null &

とりあえず、Raspberry Pi 3BのCPUはコアが4つあるので、4回実行してどれくらい温度が上がるか確認してみた。

不安になるくら、どんどん温度が上がっていく。

80℃付近で上がらなくなった。恐らく、CPUのクロックや電圧が調整されたのだろう。これで、室温(24℃)において、放熱フィン等が無い状態で全てのCPUコアに100%近い負荷をかけると、温度によるリミットがかかることが分かった。

しかし、この制御が効いている状態だと、これから試す放熱フィンの効果について、放熱フィンによる温度の減少なのか、クロックや電圧の調整による温度減少なのかが分からなくなる。

そこで、先ほどCPUにかけていた4つの負荷を1つ減らしてみる。以下のコマンドを使用

jobs

上記は現在実行しているコマンド(ジョブ)を表示する

kill %1

上記はジョブを終了させるコマンド。パラメータの%1の「1」は、jobsコマンドで一番左に表示されたジョブの番号

1つジョブ(yesコマンド)を終了させると温度が下がり始めた。

さらに少しずつ下がり続けて、73℃付近で安定した。

放熱フィン(ヒートシンク)を取り付けて温度測定

次に、近くのパーツセンターで購入してきた放熱フィンを取り付けて温度を確認する。

30mm□のもの(330円)を購入した。本当はいくつかサイズの違うものを購入してサイズによる効果の違いを確認したかったが、取り付け/取り外しを繰り返してチップに不用意に力を加えたくなかったので、搭載可能なサイズで最大のものにした。チップは15mm□なのでチップからははみ出してしまう。

左:放熱フィン搭載前、右:放熱フィン搭載後

ちょっと危険だったけど、状況を維持したまま効果を確認したかったので、Raspberry Piの電源はONのまま放熱フィンを搭載。放熱フィンに付属していた取り付け用の両面シールをフィンの底面に貼りつけてチップに搭載。チップ回りの部品に接触しないように注意しながら。特に上の左側写真で、チップの右上に見えるコンデンサ(茶色い四角い部品)には要注意。

さっそく温度を確認

57℃まで下がった。放熱フィン無しの時の約73℃と比べて約16℃下がった。

放熱フィン有の時のCPU負荷無しと全負荷で温度測定

次にCPUにかけていた負荷を全て解除して温度を測定してみる。

当然だが温度が下がり始めた。

38℃付近で安定した。放熱フィン無しの時の約47℃と比べて約9℃下がった。放熱フィンは温度が高いほうがより効果があるようだ。

最後にCPUの4つのコア全てに100%近い負荷をかけたときの放熱フィンの効果を確認してみる。

温度が上がり始めた。

上昇中

63℃付近で安定したようだ。

結論として、室温(約24℃)において、全てのCPUコアに100%近い負荷をかけた場合、放熱フィン無しだと80℃でリミットがかかっていたが、30mm□の放熱フィンを付けると63℃付近までの温度上昇に抑えられることが分かった。

コメント

タイトルとURLをコピーしました