|  | 1 | = BBBでGPIOを用いたリレー制御 = | 
          
            |  | 2 |  | 
          
            |  | 3 | この記事は、以前cERLでLaserOscillatorの微小温度制御用ヒーターを作った時のものです。[[br]] | 
          
            |  | 4 | まだ、EPICS環境が少し古い状態のまま作成していますが、やっていることは同じなので、作成例として転載します。[[br]] | 
          
            |  | 5 |  | 
          
            |  | 6 |  | 
          
            |  | 7 | == Laser Oscillator用ヒーター制御 == | 
          
            |  | 8 |  | 
          
            |  | 9 | Laserで使用しているoscillatorは、出力するレーザー周波数を加速器の周波数に同期させるためにpiezoを使って調整しているが、piezoの調整範囲を超えるとリセットがかかり、再度同期するまで周波数が不定になる。burstではさほど問題ではないがCWでは問題になるので、piezoの調整範囲(35~65)を超えそうになった場合には、一旦ビームを止めて手動でリセットしていた。[[br]] | 
          
            |  | 10 | 偶に測定中に勝手にリセットがかかり、測定が中断することがあったので、この問題をある程度解決するために、oscillatorの下にヒータを入れて温度制御してやることにした。 | 
          
            |  | 11 |  | 
          
            |  | 12 | == 機器 == | 
          
            |  | 13 |  | 
          
            |  | 14 | ヒーターをPWM制御することで、温度調整を行うようにした。[[br]] | 
          
            |  | 15 | 回路としては、ヒーター電源をリレーでON/OFFすることでDUTYを調整する。 | 
          
            |  | 16 |  | 
          
            |  | 17 | === ヒーター === | 
          
            |  | 18 |  | 
          
            |  | 19 | ヒーター本体は、ユニバーサル基板に1w10Ω抵抗を4つ直列に接続したものを6列並列接続したものを作成。 | 
          
            |  | 20 |  | 
          
            |  | 21 | === 電源 === | 
          
            |  | 22 |  | 
          
            |  | 23 | ヒーター用の電源は18V汎用直流電源を使用。 | 
          
            |  | 24 |  | 
          
            |  | 25 | === 制御部 === | 
          
            |  | 26 |  | 
          
            |  | 27 | 制御部は、!BeagleBone Black(以下、BBB)に専用ユニバーサル基盤を載せて、リレー回路を実装したものを作成。[[br]] | 
          
            |  | 28 | リレーの回路図は以下のようにした。 | 
          
            |  | 29 |  | 
          
            |  | 30 | [[Image(relay_schematic.png,300)]] | 
          
            |  | 31 |  | 
          
            |  | 32 | このリレー回路のON/OFFは、BBBのP8-11(GPIO45)pinに接続した。[[br]] | 
          
            |  | 33 | このピンを使用したのは、起動時に特別は設定を行わなくてもGPIOとしてLOW状態のまま使用可能なため。起動時にHIGHになっているピンもある。[[br]] | 
          
            |  | 34 | 詳細は[http://www.si-linux.co.jp/techinfo/index.php?BeagleBoneBlack#led4e8ec このページ]を参照。 | 
          
            |  | 35 |  | 
          
            |  | 36 | == IOC == | 
          
            |  | 37 |  | 
          
            |  | 38 | BBBのOSはDebian7.0で、開発環境はBBBのローカルに構築して今の所はNFSは使用していない。[[br]] | 
          
            |  | 39 | BBB用のepics環境は、{{{/opt/epics}}}に構築するように設定している。ファイルは他のBBBで以前構築したものをコピーして使用。[[br]] | 
          
            |  | 40 | {{{/cerl/epics/embed/BeagleBoneBlack/debian/epics_bbb_debian.tar.gz}}}にコピーしておく。[[br]] | 
          
            |  | 41 |  | 
          
            |  | 42 | === device support === | 
          
            |  | 43 |  | 
          
            |  | 44 | 今回は、GPIOしか使用しないため、[https://github.com/ffeldbauer/epics-devgpio epics-devgpio]を使用してみた。[[br]] | 
          
            |  | 45 | 以下のようにしてインストール。ファイルはgit-hubからダウンロードしたものをコピー。 | 
          
            |  | 46 |  | 
          
            |  | 47 | {{{ | 
          
            |  | 48 | root@beaglebone:~# cd /opt/epics/R314.12.4/modules/soft | 
          
            |  | 49 | root@beaglebone:/opt/epics/R314.12.4/modules/soft# mkdir devgpio | 
          
            |  | 50 | root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio# unzip epics-devgpio-master.zip | 
          
            |  | 51 | root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio# mv epics-devgpio-master 1.0 | 
          
            |  | 52 | root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio/1.0# emacs -nw configure/RELEASE | 
          
            |  | 53 |  | 
          
            |  | 54 | EPICS_BASE=/opt/epics/R314.12.4/base | 
          
            |  | 55 |  | 
          
            |  | 56 | root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio/1.0# make | 
          
            |  | 57 | }}} | 
          
            |  | 58 |  | 
          
            |  | 59 | === app === | 
          
            |  | 60 |  | 
          
            |  | 61 | appはrootのホームディレクトリに作成。 | 
          
            |  | 62 |  | 
          
            |  | 63 | {{{ | 
          
            |  | 64 | root@beaglebone:~# mkdir -p epics/dio/ | 
          
            |  | 65 | root@beaglebone:~# cd epics/dio/ | 
          
            |  | 66 | root@beaglebone:~/epics/dio# makeBaseApp.pl -t example dio | 
          
            |  | 67 | root@beaglebone:~/epics/dio# makeBaseApp.pl -i -t example dio | 
          
            |  | 68 | root@beaglebone:~/epics/dio# emacs -nw configure/RELEASE | 
          
            |  | 69 |  | 
          
            |  | 70 | SNCSEQ=$(EPICS_BASE)/../modules/soft/seq/2.2.4 | 
          
            |  | 71 | DEVGPIO=$(EPICS_BASE)/../modules/soft/devgpio/1.0 | 
          
            |  | 72 |  | 
          
            |  | 73 | EPICS_BASE=/opt/epics/R314.12.4/base | 
          
            |  | 74 |  | 
          
            |  | 75 | }}} | 
          
            |  | 76 |  | 
          
            |  | 77 | 始めはGPIOをON/OFFするためのレコードを[https://github.com/ffeldbauer/epics-devgpio/blob/master/documentation/devgpio.pdf マニュアル]を参照して作成。 | 
          
            |  | 78 |  | 
          
            |  | 79 | {{{ | 
          
            |  | 80 | record(bo, "$(user):bbb:GPIO:45:OUT") | 
          
            |  | 81 | { | 
          
            |  | 82 | field(DESC, "BBB GPIO_45(P8_11) OUT") | 
          
            |  | 83 | field(DTYP, "devgpio") | 
          
            |  | 84 | field(OUT,  "@P8_11 H") | 
          
            |  | 85 | field(ZNAM, "L") | 
          
            |  | 86 | field(ONAM, "H") | 
          
            |  | 87 | } | 
          
            |  | 88 |  | 
          
            |  | 89 | }}} | 
          
            |  | 90 |  | 
          
            |  | 91 | コンパイル時には、{{{dioApp/src/Makefile}}}にdevgpioの設定を追加。 | 
          
            |  | 92 |  | 
          
            |  | 93 | {{{ | 
          
            |  | 94 | dio_DBD += devgpio.dbd | 
          
            |  | 95 | dio_LIBS += devgpio | 
          
            |  | 96 | }}} | 
          
            |  | 97 |  | 
          
            |  | 98 |  | 
          
            |  | 99 | ブレッドボード上にLEDをつけて、起動時にOFF状態でレコードからON/OFFできることは確認した。[[br]] | 
          
            |  | 100 | リレーのON/OFF時間をPWM制御する部分はsequencerで作成。10秒を1サイクルとしてON/OFFするようにした。[[br]] | 
          
            |  | 101 |  | 
          
            |  | 102 | === PI制御 === | 
          
            |  | 103 |  | 
          
            |  | 104 | 始めは手動でdutyを変えていたが、キチンと制御するために、以前iBNCTで作成した冷却水温度のPI制御シーケンスを使用することにした。[[br]] | 
          
            |  | 105 | sequencerは、duty制御用とは別に作成し、piezoの値変化から、dutyを制御するように作成した。[[br]] | 
          
            |  | 106 | 以下のようになって、一応制御できているようだ。 | 
          
            |  | 107 |  | 
          
            |  | 108 | [[Image(oscilator_ctrl.png, 300)]] | 
          
            |  | 109 |  | 
          
            |  | 110 |  | 
          
            |  | 111 | 但し、現状では0%や100%になった場合には、手の出しようがないのでそのまま任せておくしかない。[[br]] | 
          
            |  | 112 | これを解決するには、電源電圧を上げるか、抵抗を増やして発熱量を上げるか、外部からの温度変化が少なくなるように工夫するしかない。 |