エアガン測定

エアガンに関する色々を測定したりしなかったりしています http://www.eonet.ne.jp/~daisaku-tech/index.html

STM32duinoはWindows Store版Arduino IDE 1.8.5ではダメ

Windows Store版Arduino IDE 1.8.5(2018/08/27時点)を使用して、STM32duinoによりBlue Pill(STM32F103 minimum development board)にsketchを書き込もうとすると、IDE下部のログ表示部分に「アクセスが拒否されました」とエラーが出て書き込めません。

この現象については、Arduino for STM32のサイトに「windows 10 upload "Access is denied" error on bluepill」として出ています。

windows 10 upload "Access is denied" error on bluepill - Arduino for STM32

日本語環境の場合、Access is deniedの部分が、アクセスが拒否されました、となります。

私も上記投稿者と同じ、Windows Store版Arduino IDE 1.8.5を使用しており、問題の現象が発生していました。Windows Store版を削除し、arduino.ccからダウンロードした1.8.6をインストールすると、問題が解決しsketchを書き込むことができました。

Arduino IDEバージョン1.8.5の問題なのか、Windows Store版の問題なのかは不明です。

STM32F103(STM32duino)の環境は、次のWebサイトを参考にしています。

https://ht-deko.com/arduino/stm32f103c8t6.html

私の環境は次の通り。

  • Blue Pillは2018年7月にAmazonで「HiLetgo® 2個セット STM32F103C8T6 ARM STM32 Minimum システム 開発ボードモジュール Arduinoと互換」を購入。
  • 片方のボードは、USBシリアルによるbootloader書き込み(stm32flash.exeでgeneric_boot20_pc13.bin書き込み)時にエラー(Failed to init device.)が発生して使用できず。もう片方のボードでは成功。
  • bootloader書き込みには、USBシリアル変換を使用した、シリアル通信による方法を使用。
  • USBシリアル変換には、FTDIチップが搭載されているものを使用。どこで購入したかは失念。基板裏面に「Deek-Robot」と記載あり。
  • このUSBシリアル変換基板は3.3V出力がなく、5V出力なので、Blue Pillの5Vピン(B9の右隣)に接続して電源供給。
  • Blue PillのUSBの不具合対策は、R10チップ抵抗交換ではなく、1.8KΩの抵抗をA12と3.3Vピンに接続することで実施。
  • STM32 bootloaderは、githubのrogerclarkmelbourne/STM32duino-bootloader の、2018/08/26時点のmasterを使用。

上記STM32F103のWebサイト中、「永続ブートローダモード」などで記載がある「オンボードLED」とは、ボード上に「PC13」と記載されている緑色LEDです。「PWR」の赤色LEDのことではありません。

私の環境では、次の状態でした。

  • STM32duino bootloaderのbinaries/generic_boot20_pc13.binを書き込むと、ボードの起動時に緑色LEDが1~2秒間点滅した後消灯。
  • bootloader_only_binaries/generic_boot20_pc13.binを書き込むと、ボード起動後、緑色LEDが点滅したまま。

Arduino IDEでのsketch書き込みは、緑色LEDが1~2秒間点滅した後消灯する、binaries/generic_boot20_pc13.binを書き込んだ状態で実施。

sketchの書き込みは成功し、PC13(緑色)LEDの制御が行えることは確認したのですが、sketch書き込み時、IDE下部のログの最後に「error resetting after download: usb_reset: could not reset device, win error: 指定されたファイルが見つかりません。」と表示されます。ですが、手動でリセットボタンを押すことなく、書き込んだsketchが動作します。

弾速計試作1

銃口に取り付けるタイプの弾速計を試作しています。

 

youtu.be

 

  • BB弾の検出には、2つのフォトリフレクタを使用しています。
  • A/Dコンバータ内蔵のマイコンとしてArduino M0 proを使用しています。
  • 2箇所のフォトリフレクタの電圧変化を検出し、その時刻から速度を検出しています。
  • 弾数カウンタは、単純にBB弾の通過をカウントしています。

Arduino(M0 pro含む)は、標準では1回のA/D変換が約100μsとなっているため、内蔵ADCの設定を変更して約16μs程度になるよう高速化しています。それでも80~90m/sの速度で通過するBB弾を検出するにはちょっと遅いので、もっと高速にA/D変換する方法を検討中。Arduinoでは、M0 proでもこれ以上の高速化はできないっぽいので。

フォトリフレクタを取り付けているのは塩ビパイプです。それを銃口にテープでぐるぐる巻きにして取り付けています。次の試作では、プラスチック製のサプレッサーに穴をあけてフォトリフレクタを取り付ける予定。

 

弾速計XCORTECH X3200 mk3はフォトトランジスタの電圧をA/D変換か?

弾速系XCORTECH X3200 mk3を分解しました。

mkIIのような差動コンパレータや、シュミットトリガインバータのような部品は見当たりません。

f:id:daisaku_tech:20180513154720p:plain

f:id:daisaku_tech:20180513154739p:plain

f:id:daisaku_tech:20180513154752p:plain

プロセッサはM058ZDN(Cortex-M0ベース)となっています。

f:id:daisaku_tech:20180513155648p:plain

ADCが800kSPSということなので、フォトトランジスタの出力をプロセッサでA/D変換して、ソフトウェアで電圧が閾値を下回ったこと(上回ったこと)を判断し、2つのフォトトランジスタからの入力の時間差で速度を計算、だと思います。

弾速計XCORTECH X3200 mkIIは差動コンパレータの値をプロセッサで読み取って速度計算

弾速計XCORTECH X3200 mkIIを分解しました。

数年前に購入。たぶん本物、と思います。メイン基板はこれ。

f:id:daisaku_tech:20180513144646p:plain

基板下の部分にLM393(差動コンパレータ)が2つ。たぶん、BB弾が通る筒の中2箇所にあるフォトトランジスタの電圧が閾値を上回ったら(下回ったら)0(または1)を出力、という回路かと。

 

プロセッサには出荷検査時に張り付けた?と思われるシールがあるので、それをはがしました。

f:id:daisaku_tech:20180513144858p:plain

差動コンパレータからの出力をMPC89L58AP(8bitプロセッサ)で読み取り、2つの時間差で速度を計算、だと思います。