稼働中

Raspberry Pi Pico(d_02)内部機能用GPIOとコア温度

GPIO23,24,25,29とコア温度ADC(4)

ボード内の機能に使用されるGPIO23、GPIO24、GPIO25、GPIO29とコア温度ADC(4)について記載します。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
内部機能用GPIOについては、Raspberry Pi Pico Datasheet(https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf)の2.1. Raspberry Pi Pico pinoutに記載があります。
以下に示した4つがあります。
GPIO23 DC/DC スイッチングモード設定 SMPS(switch mode power supply)
GPIO24 バス電圧測定用
GPIO29 VSYS/3  システム電圧測定(ADC3)
GPIO25 user LED駆動

GPIO23 SMPSのモード設定

Raspberry Pi Picoに搭載されている電源用のDC/DC converter RT6150B-33GQWで3.3V電源を得ています。
GPIO23でRT6150B-33GQWのPSピン入力を制御してスイッチングモードを切替ます。(下図を参照)Switched Mode Power Supply (SMPS)
GPIO23を’1’にするとPWM(パルス幅変調)のスイッチングになります。Defaultは’0’でPFM(パルス周波数変調)のスイッチングになります。PFMでは低負荷時に周波数が下がりスイッチング損失が減るので高効率を保てます。負荷が大きい場合にはPSピン状態に係わらずPWMモードになるそうです。


Thonnyのshellで実行
>>> from machine import Pin
>>> Pin(23)
Pin(23, mode=OPEN_DRAIN)        # GPIO23の初期状態はOPEN_DRAINでした
>>> Pin(23,mode=Pin.IN)
Pin(23, mode=IN)
>>> Pin(23).value()
0                               # 0なので通常PFMを確認
>>> Pin(23, mode=Pin.OUT)
Pin(23, mode=OUT)
>>> Pin(23).value(1)            # 1を出力したのでPWMになっているハズ

DC/DC電源回路図
※Raspberry Pi Pico Datasheetより抜粋、枠追加

GPIO24 USB電源接続検出

GPIO24の入力はVBUSを5.6kΩと10kΩで分圧しています。(下図)USBが接続されていればGPIO24の入力はHighになります。GPIO24を調べてUSB接続の有無を確認できます。



Thonnyのshellで実行
>>> from machine import Pin
>>> Pin(24,mode=Pin.IN)
Pin(24, mode=IN)
>>> Pin(24).value()
1                           # USB接続されている
>>> 

GPIO29 ADC(3) VSYS電圧検出

GPIO29_ADC(3)でVSYS電源電圧が測定できます。ADC(3)の値はVSYS/3になります。(下図参照)
GPIO29_ADC3
※Raspberry Pi Pico Datasheetより抜粋、枠追加


VSYS電圧測定 ADC3
>>> from machine import Pin, ADC
>>> a=ADC(Pin(29))      # ADC(3)と同じ
>>> d=a.read_u16()      # A/Dを読む
>>> v=d*3.3/2**16       # デジタル値を電圧換算 3.3V/16bit
>>> v
1.670544
>>> vsys=v*3            # 電源電圧は3倍
>>> vsys
5.011633                # USB給電電圧値
>>> 

>>> ADC(Pin(29))
<ADC channel=3>

>>> ADC(3)
<ADC channel=3>

ADC(Pin(29))とADC(3)は同じなので、ADC(3)でも良さそうです。
>>> from machine import ADC
>>> v=ADC(3).read_u16()*3.3/2**16
>>> v*3
5.016467

コア温度

内部機能にアクセスするGPIOではありませんが、ADC(4)でコア温度測定できます。


>>> help(ADC)
object <class 'ADC'> is of type type
  read_u16 -- 
  CORE_TEMP -- 4

>>> from machine import ADC
>>> v=ADC(4).read_u16()*(3.3/2**16)
>>> temp=27-(v-0.706)/0.001721   # コア温度の計算式
>>> temp
30.79575                    # コア温度
>>> 

GPIO25 user LED

GPIO25は基板上のLEDに接続されています。下図のLEDです。
GPIO25_LED
以下のboot.pyをRaspberry Pi Picoに保存しておけば、Raspberry Pi PicoをUSB接続後にboot.pyが実行され自動的にLEDが点灯します。給電状態がLEDのONで目視できるようになります。


boot.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin
led = Pin(25,Pin.OUT)
led.value(1)        # LED ON
#led.value(0)        # LED OFF

まとめ

内部機能用GPIO23(SMPS)、24(VBUS)、25(LED)、29(VSYS/3ADC(3))とADC(4)コア温度測定ADC(4)について記載しました。
Raspberry Pi Picoの起動時にLEDが点灯するboot.pyをRaspberry Pi Picoに保存しました。