OpenPLCハット作成

  Raspberry Pi

転職して産業系の知識が必要になってくるのでPLCの勉強をしようと思う。
ただ、PLCも安いものではないし、使い勝手はメーカに結構左右されるらしいので、Raspberry Pi上にOpnePLC入れることを検討。

何事も形から入ることをモットーとしてるので、
まずはOpenPLCに使えるハードウェアを用意しようと思う。

色々とネットでOpenPLCに対応しているラズパイハットを探してみたが、
どうもUnipi位しか無さそうだが、数万円と高い。
これなら三菱とかオムロンとかのPLC買うのと変わらないし、
どうせ金を払うなら自作しようと思う。

 

Contents

仕様

という訳で、まずは仕様を固める。

 

IOピン仕様

OpenPLC公式に記載されているOpenPLC on Raspberry PiのIO仕様:

入力も出力もすべて使うことは全く考えていないので、リレー用に4ピン、デジタル出力用に4ピン、デジタル入力用に4ピン程度かな。
まぁ、足りなくなったらスタックするなり、作り直す。

 

電源仕様

ラズパイの入力はUSB 5Vだけど、産業用途としてはこれはきつい。
やはり、DC24V対応させるために、24V->5V電源は必須。

5Vの消費電流は以下のように約2.8[A]。

# 分類 容量 備考
1 ラズパイ 2.4 [A] USB給電なければ1.2Aほど
2 LED 0.1 [A] input x4, output x4, Power On x1, etc x1
10[mA] x 10 = 0.1[A]
3 リレー 0.3 [A] SRD-05VDC-SL-C 71.4[mA]
71.4[mA] x4 = 0.3 [A]

~20Wほどの降圧DCDCが必要。
色々探してみたけど、最近のDCDCはQFNだったり、SOPでも部品裏パッドなど、手付け半田ができないタイプが多い。
まぁ、一枚しか作成する気はないので、高価だけどDIPのモジュールタイプにする。

¥2,300と高価だけど許容範囲であるので、TI製 PTN78020Wを使うことにする。

ただ、実設計を行った結果、PTN78020Wではどうしても基板サイズが110 x 56mmになってしまい、基板コストが$77以上となってしまう。
基板サイズを100 x 56mmにすると、$44程度になるため、若干容量に不安はあるけど、3A品のTI製PTN78060Wを使用することにする。

 

 

出力仕様

リレー出力

リレー切り替え入力は5Vを使う。
中華製で怪しいけど、このようなハット系でよく使われているSRD-05VDC-SL-Cを採用することにする。

当初はリレー x4個を用意する予定だったけど、基板サイズを100mm以下に抑えるためx3個に変更。

 

デジタルIO出力

ラズパイの3.3V IOから、フォトカプラを挟んでNPNトランジスタのエミッタフォロア出力で24Vを出力するようにする。

[2020/9/18 追記]
よく考えたら、論理反転させるのを忘れていた。
このままでは、OpenPLC側からLow出力の時に+24Vが出力されてしまう。

単純に、1pin, 3pin共にカットして、1pinにQX0_0出力を繋いで、3pinをGNDに繋ぐようにする。

 

入力仕様

相手側の24V出力をフォトカプラで受けて、ラズパイの3.3V IOに接続する。

 

 

プリント基板

基板サイズを100 x 56mmとした。
ラズパイよりも若干大きくなってしまうが、許容範囲。

ラズパイのLAN, USBコネクタがある面にデジタルInputとOutput用のターミナルブロックを、HDMIコネクタがある面にリレー用と24V電源用のターミナルブロックを配置。

3Dモデルがない部品が多いけど、3D表示すると以下の感じ。

 

プリント基板発注

今回もelecrowでプリント基板を作成する。

ガーバー出力

ファイル -> プロットから、以下の設定で”製造ファイル出力”を実行。
\GERBER配下にがーばファイルが出力される。

 

ドリルファイル出力

上図の右下にある”ドリルファイルを生成”をクリックして、
以下の設定でドリルファイルを出力する。

 

ファイル名変更

elecrowの注記にあるようにファイル名を変更する。

ファイル種類 Kicad出力ファイル名 elecrow用ファイル名
部品面パターン PLC_HAT_R03-F_Cu.gtl PLC_HAT.GTL
内層1パターン PLC_HAT_R03-In1_Cu.g2 PLC_HAT.G1
内層2パターン PLC_HAT_R03-In2_Cu.g3 PLC_HAT.G2
半田面パターン PLC_HAT_R03-B_Cu.gbl PLC_HAT.GBL
部品面レジストマスク PLC_HAT_R03-F_Mask.gts PLC_HAT.GTS
半田面レジストマスク PLC_HAT_R03-B_Mask.gbs PLC_HAT.GBS
部品面シルク PLC_HAT_R03-F_SilkS.gto PLC_HAT.GTO
ドリルファイル PLC_HAT_R03.drl PLC_HAT.TXT
基板外形図 PLC_HAT_R03-Edge_Cuts.gm1 PLC_HAT.GML

 

 

基板到着

9/11に発注して、9/17に到着。1週間も経ってない。相変わらず早い。
今回は、レジストを青色にした。

下がラズパイで、上が今回作成したPLCハット。

 

電源実装

まずは電源のみ実装して、正常に5V出力してラズパイに電源供給できるか確認。

TI製PN78060Wとその周辺回路、スイッチ、ターミナルブロック、スタックコネクタのみを搭載。

ラズパイにスタックして、ターミナルブロックに24V入力してラズパイが正常に起動することが確認できた。

 

完成

リレー -> 入力部 -> 出力部(布線改造対応込み)と
1ブロックだけ作って動作確認 -> 残りの全ブロック実装と
都度確認しながらくみ上げていく。

最終的な完成体:

左上の黄色の線が改造部。
かなり細かい作業になってしまった。

 

 

DINレール実装

ラズパイDINレールに取り付けたRaspberry PI 3Bにスタックして、
DINレールに搭載した例が以下:

右端から順に以下。
 ・ACDCコンバータ (100V -> 24V 1.5A)
 ・Raspberry Pi 3 model B rev. 1.2
 ・PLC HAT (今回作成した基板)
 ・リレー+リレーソケット

 

 

失敗

・QX0.0~QX0.3の極性が反転
・D1~D3, D21-D23のカソードシルクの向きが逆
・CN5のDC24V入力は2.54mmピッチではなく5mmピッチのターミナルブロックが良い
・Q1~Q3のフットプリントがSOT-23なので、SOT-23-HandSoldingが良い
  => 配置密集してる&実装さほど難しくないため、そのまま

・CN1のシルク位置が悪い(回路図修正後の更新で置き換わってしまった模様)
・ラズパイの基板に面合わせしたけど、USBコネクタに面合わせの方が良い
・D11, D12のカソードシルクが移動されてない

 

出力ピン(QX)に注意

OpenPLC for Raspberry Piは、ラズパイ起動時に立ち上がるようになっているが、GPIO設定がされていない。

ラズパイ起動時のgpioの状態:

全てIN設定になっている。

QX0.4~6には10kΩプルダウンを付けているが、内部プルアップのせいで0.5V程の電位が出てしまい、Transistorが微妙にONしてしまう。

プルアップ抵抗値の値はフォーラムの中に記載されていた。

When a Pi is first powered up, the first eight GPIOs have pull-ups enabled, and the rest have pull-downs enabled. After it has finished booting, you can change that if you wish, in your software.

The pull-ups don’t “supply voltage” – they merely connect a high-value resistor (about 50k) between the 3v3 rail and the GPIO
If nothing else is connected to it, that resistor supplies enough electrons – current for a certain time – to the GPIO, such that its voltage rises to 3v3.
A pull-down works similarly – electrons are removed so that its voltage reaches 0v

In your Arduino drawing, the 10k resistor does the job of the pull-down – it removes electrons to reduce the voltage to ground.

GPIO0~8までは内蔵プルアップが、その他は内蔵プルダウンが有効で、値は~50kΩ程度だと。

QX側の内蔵プルアップ/プルダウン情報をまとめると以下。

OpenPLC PLC HAT BCM プルアップ/プルダウン
%QX0.0 Digital Output#0 GPIO14 プルダウン
%QX0.1 Digital Output#1 GPIO15 プルダウン
%QX0.2 Digital Output#2 GPIO23 プルダウン
%QX0.3 Digital Output#3 GPIO24 プルダウン
%QX0.4 Relay#1 ON GPIO25 プルダウン
%QX0.5 Relay#2 ON GPIO8 プルアップ
%QX0.6 Relay#3 ON GPIO7 プルアップ

問題になるのは、%QX0.5と%QX0.6のみ。
プルダウン抵抗が10kΩだと、3.3 x (10k/(10k+50k)) = 0.55VでIceに0.1mA程度の電流を流してしまう。
周囲温度が高くなるともっと増えてしまう。
Base抵抗と同じ3.3kΩに変更しておく。

 

Power on Reset時に注意

QX0.0は内蔵プルダウンが有効になるはずなのに、電源投入時にHighになる。

色々調べた結果、UART TXDのデュアルピンであり、Raspberry Pi OSでは初期値(デバイスツリー)はUART TXDになっており、Highドライブされる。
その後、raspi-configの設定に従ってGPIOに切り替えられるらしい。

ドライブされてしまうので、基板上にプルダウン抵抗を置いても無駄。
QX0.0は使用不可になってしまう・・・

QX0.1もUART RXDとして内蔵プルアップが有効になるとのこと。
ただ、こちらは10kΩのプルダウン抵抗を基板に置くことで対応可能。

QX0.0の使用はあきらめていたが、ブート中のピン設定が変更できた。
詳細についてはブート中のGPIO設定変更を参照。

これを適用することでブート中もHighドライブすることはない。

 

 

 

One Reply to “OpenPLCハット作成”

LEAVE A COMMENT