2018年12月4日(火) 21:28
まてよ、PWMを使用しているのはモーター制御と送信機だけではない。メイン基板だって使用している。砲身上下位置をデジタル受信したあと、それをサーボパルスに変換するためだ。
そんなもの動作するに決まってるだろ?と確認を後回しにしていたのだが、オシロで確認してみた。約60Hzで、パルス幅1.5ミリ秒。期待通りにPWM波形が出力できている。
なぜモーター制御PICからは、何も出力されないのか?PIC機種は同じで、どちらもMCCにより設定しているのに。
だが、このPWMがマヤカシであることに気付いた。というのも、送信機スティックを操作してもDUTYが変化しないのだ。パルス幅は1.5ミリ秒のまま、変わらない。そういうことか!
PWMが出力できていないのではない。PWMのパルス幅が変更できていないのだ。
メインPICのこのパルスは、MCC上で行った初期設定がパルス幅1.5ミリ秒である。それに対し、モーター制御PICのパルスは、初期設定がDUTYゼロだ。
さっそくネットを漁る。話は単純だった。16ビットPWMは10ビットPWMより機能豊富で、その代わりに余分の手順を必要とする。
大半のPICが搭載している10ビットPWNは、PWM1_DutyCycleSet() だけでPWM幅を変えられる。それに対し16ビットPWMは、PWM1_LoadBufferSet() を実行するまでPWM幅の設定が反映されない。
いちいち2つの関数を続けて実行しないと、PWM幅が変化しない。
取り合えずメインPICが出力する砲身上下サーボ駆動用パルスは、送信機のスティックに反応して変化するようになった。
written by higashino [バトルタンク改造Tiger1] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4