Changes between Initial Version and Version 1 of epics/bbb/debian/gpio_relay


Ignore:
Timestamp:
06/22/17 13:58:31 (2 years ago)
Author:
michkawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/bbb/debian/gpio_relay

    v1 v1  
     1= BBBでGPIOを用いたリレー制御 = 
     2 
     3この記事は、以前cERLでLaserOscillatorの微小温度制御用ヒーターを作った時のものです。[[br]] 
     4まだ、EPICS環境が少し古い状態のまま作成していますが、やっていることは同じなので、作成例として転載します。[[br]] 
     5 
     6 
     7== Laser Oscillator用ヒーター制御 == 
     8 
     9Laserで使用している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 
     38BBBのOSはDebian7.0で、開発環境はBBBのローカルに構築して今の所はNFSは使用していない。[[br]] 
     39BBB用の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{{{ 
     48root@beaglebone:~# cd /opt/epics/R314.12.4/modules/soft 
     49root@beaglebone:/opt/epics/R314.12.4/modules/soft# mkdir devgpio 
     50root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio# unzip epics-devgpio-master.zip 
     51root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio# mv epics-devgpio-master 1.0 
     52root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio/1.0# emacs -nw configure/RELEASE 
     53 
     54EPICS_BASE=/opt/epics/R314.12.4/base 
     55 
     56root@beaglebone:/opt/epics/R314.12.4/modules/soft/devgpio/1.0# make 
     57}}} 
     58 
     59=== app === 
     60 
     61appはrootのホームディレクトリに作成。 
     62 
     63{{{ 
     64root@beaglebone:~# mkdir -p epics/dio/ 
     65root@beaglebone:~# cd epics/dio/ 
     66root@beaglebone:~/epics/dio# makeBaseApp.pl -t example dio 
     67root@beaglebone:~/epics/dio# makeBaseApp.pl -i -t example dio 
     68root@beaglebone:~/epics/dio# emacs -nw configure/RELEASE 
     69 
     70SNCSEQ=$(EPICS_BASE)/../modules/soft/seq/2.2.4 
     71DEVGPIO=$(EPICS_BASE)/../modules/soft/devgpio/1.0 
     72 
     73EPICS_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{{{ 
     80record(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{{{ 
     94dio_DBD += devgpio.dbd 
     95dio_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]] 
     105sequencerは、duty制御用とは別に作成し、piezoの値変化から、dutyを制御するように作成した。[[br]] 
     106以下のようになって、一応制御できているようだ。 
     107 
     108[[Image(oscilator_ctrl.png, 300)]] 
     109 
     110 
     111但し、現状では0%や100%になった場合には、手の出しようがないのでそのまま任せておくしかない。[[br]] 
     112これを解決するには、電源電圧を上げるか、抵抗を増やして発熱量を上げるか、外部からの温度変化が少なくなるように工夫するしかない。