BluePillはUSB不具合対策しなくてもスケッチ書き込みできるものがある
BluePill(STM32F103ボード)にはUSB関連で不具合があります。R10抵抗値が間違っており、1.5KΩであるべきところが、10KΩまたは4.7KΩが実装されています。そのため、USB接続でArduino IDEからスケッチを書き込もうとすると、エラーになって書き込めません。対策は次のいずれかになります。
- R10を1.5KΩに取り換える
- 3.3VとPA12間に1.8KΩの抵抗を接続してプルアップ
が、同じBluePillでも、シルクやリセットスイッチなどが異なるものが存在し、R10が10KΩのまま、不具合対策なしでもスケッチ書き込みできるものがありました。ただし、私の環境でたまたま書き込めただけ、という可能性があり、必ず同じ状態とは限りません。
Amazon.co.jpでSTM32F103を検索すると、複数のメーカーのものがヒットします。HiLetgoの2個セットのものと、Homylのものを2個、USB不具合がないBlackPillも2個購入しました。
HiLetgoのものは2個とも、不具合対策なしではスケッチ書き込みできませんでした。それに対してHomylのものは2個とも、不具合対策なしでスケッチ書き込みできました。
Blue Pill(STM32duino)のanalogRead実行時間は約7μs
STM32duino環境のBlue Pillボード(STM32F103)によるanalogRead実行速度は約7μsです。次のsketchで実行時間を見てみました。
int val[10];
unsigned long startTime;
unsigned long endTime;void setup() {
pinMode(PA0, INPUT_ANALOG);
Serial.begin(115200);
}void loop() {
delay(1000);
startTime = micros();
val[0] = analogRead(PA0);
val[1] = analogRead(PA0);
val[2] = analogRead(PA0);
val[3] = analogRead(PA0);
val[4] = analogRead(PA0);
val[5] = analogRead(PA0);
val[6] = analogRead(PA0);
val[7] = analogRead(PA0);
val[8] = analogRead(PA0);
val[9] = analogRead(PA0);endTime = micros();
Serial.println(endTime - startTime);
}
analogReadを10回実行し、その時間(μs)を出力しています。forループにしていないのは、ループ処理の時間を含まないようにするためです。
実行結果は、次のような感じです。1秒ごとに結果出力。
70
70
71
70
70
70
70
71
70
70
70
arduino UNOでは、標準状態ではanalogRead実行時間は約100μsで、高速化(ADCの分周値16に変更)して約16μsぐらい。arduino M0 proも、標準の実行時間は約100μsと合わせられており、高速化(ADCの分周値64に変更)して、こちらも約16μsぐらいなので、Blue PillはUNOやM0に比べるとanalogReadがだいぶ高速です。ただし、精度については未確認。
おそらく、UNOやM0でも分周値をさらに小さくしてADCのクロックを速くすれば高速化できると思いますが、精度が悪くなると思われます。そのため、ググって見つかるanalogRead高速化では分周値16(UNO)になっていると思われます。
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
銃口に取り付けるタイプの弾速計を試作しています。
- 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でもこれ以上の高速化はできないっぽいので。
フォトリフレクタを取り付けているのは塩ビパイプです。それを銃口にテープでぐるぐる巻きにして取り付けています。次の試作では、プラスチック製のサプレッサーに穴をあけてフォトリフレクタを取り付ける予定。