Lab. of Voynich Code
2023年オーストラリア・インドネシア    金環皆既日食のたくらみ
偏光画像の撮影システム
PICを使った制御:ファームウェア
2020.10.10: Open  2020.12.15 Update

ファームウェアに組み込むレリーズとステッピングモータの制御

  • 音信号が入るまで、平時は90秒に1回50msフォーカス信号を送る
  • 第2接触の10秒前に音信号が入ったら確認用LEDを点灯し、Z6の連写を18秒行い、のちE-M10mkIIにレリーズ信号を送る
    • HDR撮影1組(1/4000-1/2秒・7コマ)は概ね1,800msかかるので、レリーズ信号は1,800ms送り、100ms待つ
  • ステッピングモータでは素通しと4つの偏光フィルターの5つの開口を持つターレットを回転させる
    • ステッピングモータは200ステップ/1回転なので、40ステップ動かすと1/5回転する
    • 30ms(33Hz)から回り始め2ステップ2msずつ20ステップで10ms(100Hz)まで加速する。のち、5msから2ステップ10msずつ30msまで減速して停止する。台形制御ならぬ山形制御で1/5回転を440ms×2=880msで実行する (計算上)
    • 回転静止後500ms待って振動を止めてから撮像する。
  • HDR撮影とフィルター回転1セットで3280ms程として、第2接触の8秒後に撮影を始めると10セット撮影して最後に素通しを1組撮影すると34.6秒程。第3接触まで11秒程、この間2度目の音信号が入るのを待つ
  • 第3接触の8秒前に音信号が入ったら18秒の連写を行う
  • 連写が終わったら動作確認LEDを消灯し、PICを使った撮影は終了
 

プログラムリスト (Down Load

  1 /*
  2  * File:   newmain.c
  3  * Author: M@Lab. of Eclips code
  4  *
  5  * Created on 2020/11/07
  6  * Finished on 2020/12/15
  7  */
  8 
  9 
 10 #include <xc.h>
 11 #include <stdlib.h>
 12 #include <stdio.h>
 13 
 14 #pragma config WDTE = OFF
 15 #pragma config PWRTE = ON
 16 #pragma config MCLRE = ON
 17 #pragma config BOREN = ON
 18 #pragma config LVP = OFF
 19 #pragma config CPD = OFF
 20 #pragma config WRT = OFF
 21 #pragma config CCPMX = RB3
 22 #pragma config CP = OFF
 23 #pragma config FOSC = HS
 24 
 25 #define _XTAL_FREQ 12000000 //12MHz
 26 
 27 void ContCapture(void);
 28 void Polarization(void);
 29 void Rotation(void);
 30 void HDRCapture(void);
 31 
 32 void main(void) {
 33     
 34     //0は出力、1は入力
 35     TRISA = 0b00000011;
 36     TRISB = 0b00000111;
 37     //全てデジタル
 38     ANSEL = 0x00;
 39     
 40     RB3 = 0;
 41     RB4 = 0;
 42     RB5 = 0;
 43     RB6 = 0;
 44     RB7 = 0;
 45     RA0 = 1;
 46     RA1 = 1;
 47     RA2 = 0;
 48     
 49     int i, k;
 50     
 51     k = 0;
 52     while(1){
 53         
 54         //音信号が入るまでE-M10に90秒毎にフォーカス信号を送る
 55         while(k == 0)
 56         {
 57             //90秒に1回ループを抜ける設定
 58             for(i=1; i<=9000; i++)
 59             {
 60                 __delay_ms(10);
 61                 //音信号が入ったら動作開始LEDを点灯し
 62                 //Z6を連写し偏光撮影を開始する
 63                 //終了後ループを抜ける
 64                 if(RB2 == 0)
 65                 {
 66                     RB3 = 1;
 67                     k = 1;
 68                     ContCapture();
 69                     Polarization();
 70                     break;
 71                 }
 72                 //偏光撮影をする
 73                 else if((RB1 == 0))
 74                 {
 75                     Polarization();
 76                 }
 77                 //音信号で起動しなかった時の緊急時SWで起動
 78                 //偏光撮影とZ6で連写をする
 79                 else if(RA1 == 0)
 80                 {
 81                     Polarization();
 82                     ContCapture();
 83                 }
 84                 //Z6の連写のみ行う
 85                 else if(RA0 == 0)
 86                 {
 87                     ContCapture();
 88                 }
 89             }
 90             //90秒毎にE-M10mkIIへフォーカス信号を送る
 91             RB6 = 1;
 92             __delay_ms(50);
 93             RB6 = 0;
 94         }
 95         
 96         //先のループを抜けた後、次に音信号が入ったら連写する。
 97         while(k == 1)
 98         {
 99             __delay_ms(20);
100             if(RB2 == 0 && k == 1){
101                 k = 0;
102                 ContCapture();
103                 RB3 = 0;
104                 break;
105             }
106         }
107     }
108     return ;
109 }
110 
111 //Z6の18秒連写
112 void ContCapture(void) {
113 
114     RB4 = 1;
115     __delay_ms(50);
116     RB5 = 1;
117     for(int m = 1; m<=10; m++)
118     __delay_ms(1800);
119     RB5 = 0;
120     __delay_ms(50);
121     RB4 = 0;
122     
123     return;        
124 }
125 
126 //偏光撮影
127 void  Polarization(void) {
128     //多段階撮像をする
129     void HDRCapture(void);
130     //フィルターターレットを回転させる
131     void Rotation(void);
132     
133     for(int j=1; j<=10; j++)
134     {
135         HDRCapture();
136         Rotation();
137         //振動を抑えるため待つ
138         __delay_ms(500);
139     }
140     HDRCapture();
141     
142     //終了サイン
143     RB6 = 1;
144     __delay_ms(50);
145     RB6 = 0;
146 }
147 
148 //E-M10mkIIのシャッターを2秒押す
149 void HDRCapture(void)
150 {
151     RB7 = 1;
152     __delay_ms(1800);
153     RB7 = 0;
154     __delay_ms(100);
155     return;
156 }
157 
158 //偏光フィルターターレットを1/5回転させる
159 void Rotation(void)
160 {
161     int i, j, k;
162 
163     //1ステップ30msから10ms迄増速
164     for(i = 10; i>= 1; i--)
165     {
166         for(k = 1; k <= 2; k++)
167         {
168             RA2 = 1;
169             for(j=0; j<i; j++){
170                 __delay_us(1000);
171             }
172             __delay_ms(5);
173             RA2 = 0;
174             for(j=0; j<i; j++){
175                 __delay_us(1000);
176             }
177             __delay_ms(5);
178         }
179     }
180  
181     //1ステップ10msから30ms迄減速
182     for(i = 1; i<= 10; i++)
183     {
184         for(k = 1; k <= 2; k++)
185         {
186             RA2 = 1;
187             for(j = 0; j <= i; j++){
188                 __delay_us(1000);
189             }
190             __delay_ms(5);
191             RA2 = 0;
192             for(j = 0; j <= i; j++){
193                 __delay_us(1000);
194             }
195             __delay_ms(5);
196         }
197     }
198     return;
199 }
inserted by FC2 system