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

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

  • 音信号が入るまで、平時は90秒に1回50msのフォーカス信号をE-M10mkIIに送る
  • 第2接触の10秒前に音信号が入ったら確認用LEDを点灯し、ダイヤモンドリング撮影でZ6の連写を18秒行う
  • その100ms後に偏光撮影を開始する
    • E-M10mkIIのHDR撮影1組(1/4000-1/2秒・7コマ)は概ね2,500msかかるので、レリーズ信号は2,500ms送り、100ms待つ
    • ステッピングモータでは素通しと4つの偏光フィルターの5つの開口を持つターレットを回転させる
      • ステッピングモータは200ステップ/1回転なので、40ステップ動かすと1/5回転する
      • 30ms(33Hz)から回り始め2ステップ2msずつ20ステップで12ms(83Hz)まで加速する。のち逆に減速し停止する、台形制御ならぬ山形制御で1/5回転を430ms×2=860msで実行する (計算上)
    • 撮影~フィルターターレット回転、静止後1,000ms待って振動を止めてから、次の撮影~フィルターターレット回転を行う
    • 5回、撮影~フィルターターレット回転を繰り返し、最後に再度撮影を行い動作を終了する
    • 偏光撮影は、1周り6回レリーズで26秒程度かかる。
    • 偏光撮影終了後自動終了し待機状態に入る
  • 第3接触前に音信号が入ったらZ6IIの18秒の連写を行う
 

プログラムリスト (Down Load

  1 /*
  2  * File:   newmain.c
  3  * Author: M?@Lab. of Eclipse code
  4  *
  5  * Created on 2020/11/07
  6  * Modified 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     TRISA = 0b00000011;
 35     TRISB = 0b00000111;
 36     ANSEL = 0x00;
 37     
 38     int i, k;
 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     k = 0;
 50     while(1){
 51         
 52         //
 53         while(k == 0)
 54         {
 55             //音信号が入る迄、90秒に1回E-M10mkIIにフォーカス信号を送る
 56             for(i=1; i<=9000; i++)
 57             {
 58                 __delay_ms(10);
 59                 //音信号が入ったら動作開始LEDを点灯し
 60                 //Z6を連写し偏光撮影を開始する
 61                 //終了後ループを抜ける
 62                 if(RB2 == 0)
 63                 {
 64                     RB3 = 1;
 65                     k = 1;
 66                     
 67                     //休眠打破のため、E-M10mkIIへフォーカス信号
 68                     RB6 = 1;
 69                     __delay_ms(100);
 70                     RB6 = 0;
 71                     //Z6IIで連続撮影・ダイヤモンドリング対応
 72                     ContCapture();
 73                     //E-M10mkIIで偏光撮影
 74                     Polarization();
 75                     RB3 = 0;
 76                     break;
 77                 }
 78                 //偏光撮影
 79                  elseif(RB1 == 0)
 80                 {
 81                     Polarization();
 82                 }
 83                 //緊急時スイッチ1での動作
 84                 //偏光撮影をしてZ6IIの18秒連写
 85                  elseif(RA1 == 0)
 86                 {
 87                     Polarization();
 88                     ContCapture();
 89                 }
 90                 //緊急時スイッチ2での動作:Z6IIで連写する
 91                  elseif(RA0 == 0)
 92                 {
 93                     ContCapture();
 94                 }
 95             }
 96             //撮影終了のLED点灯
 97             RB6 = 1;
 98             __delay_ms(50);
 99             RB6 = 0;
100         }
101         
102         //2度目の音信号を得たらZ6II連写を行う
103         while(k == 1)
104         {
105             __delay_ms(20);
106             if(RB2 == 0 && k == 1){
107                 k = 0;
108                 ContCapture();
109 
110                 break;
111             }
112         }
113         k = 0;
114     }
115     return ;
116 }
117 
118 //Z6IIを18秒レリーズする
119 void ContCapture(void) {
120 
121     RB4 = 1;
122     __delay_ms(50);
123     RB5 = 1;
124     __delay_ms(9000);
125     __delay_ms(9000);
126     RB5 = 0;
127     __delay_ms(50);
128     RB4 = 0;
129     
130     return;        
131 }
132 
133 //偏光撮影
134 void  Polarization(void) {
135     //シャッターを切る
136     void HDRCapture(void);
137     //偏光板を回転させる
138     void Rotation(void);
139     
140     
141     for(int j=1; j<=5; j++)
142     {
143         HDRCapture();
144         Rotation();
145         //ブレ止め
146         __delay_ms(1000);
147     }
148     HDRCapture();
149     
150     //表示LEDを切る
151     __delay_ms(100);
152     RB6 = 0;
153 }
154 
155 //E-M10mkIIをレリーズする
156 void HDRCapture(void)
157 {
158     RB7 = 1;
159     __delay_ms(2500);
160     RB7 = 0;
161     __delay_ms(100);
162     return;
163 }
164 
165 //フィルタターレットを1/5開店する
166 
167 void Rotation(void)
168 {
169     int i, j, k;
170 
171     //30msから10msに加速
172     for(i = 10; i>= 1; i--)
173     {
174         for(k = 1; k <= 2; k++)
175         {
176             RA2 = 1;
177             for(j=0; j<i; j++){
178                 __delay_us(1000);
179             }
180             __delay_ms(5);
181             RA2 = 0;
182             for(j=0; j<i; j++){
183                 __delay_us(1000);
184             }
185             __delay_ms(5);
186         }
187     }
188  
189     //10msから30msに減速
190     for(i = 1; i<= 10; i++)
191     {
192         for(k = 1; k <= 2; k++)
193         {
194             RA2 = 1;
195             for(j = 0; j <= i; j++){
196                 __delay_us(1000);
197             }
198             __delay_ms(5);
199             RA2 = 0;
200             for(j = 0; j <= i; j++){
201                 __delay_us(1000);
202             }
203             __delay_ms(5);
204         }
205     }
206     return;
207 }
inserted by FC2 system