2017/03/19から2日間に渡って
ロボコンの東海北陸地域の高専の交流会がありました。
今回の交流会は第二回ということでまだまだ歴史の浅い交流会
でしたが、私は今回が初参加ということで
正直あんまり期待していませんでしたが、
思いの外皆さんのプレゼンが面白くて、
そして私も良い刺激を受けることができました。
この場を借りて幹事の方々、イベント関係者様に感謝申し上げますm(_ _)m
さて、二日目の展示で釣れるかわからないですが、
富山射水のテーブルでPSoC5LPで書いた
PWMサーボのソースを公開しておりました。
みなさんのお話を聞いてると、存在は知っているが
ほとんど使ってないという方が結構おられて
正直知ってる人が割りといて驚きました(笑)
きっと皆さんがPSoCに手を出してない大きな理由として
情報が少ないというのがあると思います。
私も最初はそれに手こずりましたが、
基礎的な部分の壁を超えると、応用の方は
結構ググれば情報が出てきました。
なのでそこはなんとか気合でがんばって乗り切りましょう
(;´∀`)
PSoCは昔の開発環境としてPSoCDesignerと言うものがありましたが、
2010年頃にCypressはPSoC Creatorという全くあたらしい
開発環境を発表すると同時に後発のPSoCもPSoCCreatorに対応したものとなりました。
まあ、それはいいのですが、PWMのサーボの情報が
昔のPSoCDesignerの方のものしか無い!!
という状況に陥り、悩んだという事態に陥りました。
ですが、なんとかPSoCCreatorにてPWMサーボを扱えたので
備忘録として残しておこうと思います。
とりあえずC++にしてますが、
もしCのほうがいいという方がおられたら、
コメントいただけるとなんとかCのもあげます。
なお、修正点や改善点等ございましたら、
ぜひコメントいただけるとすごくうれしいです。
環境はPSoCCreator4.0
PSoC5LP prototyping kit
ifdef __cplusplus extern "C" { #endif #include <project.h> #ifdef __cplusplus } #endif class CompareConverter{ public: int us2compare(int servonum){ if(635>servonum){ return 316; } if(2350<servonum){ return 1175; } return 315+((servonum-635)/2); } int degree2compare(int Servonum){ float servonum = (float)Servonum; if(0>servonum){ return 316; } if(180<servonum){ return 1175; } return 315+((servonum)*4.77); } }; int main(void) { CyGlobalIntEnable; /* Enable global interrupts. */ CompareConverter compconv; //通電確認用 power_Write(1); for(;;) { PWM_1_WriteCompare(compconv.degree2compare(90)); } }
ピン配置、PGAの配置等
PWM自体の設定
電源はPSoCのVCCとGNDで
PWMの信号は1_6ピンに刺すと
サーボモータが90度を指すところに回転する...はず(笑)
只今帰宅途中のバスで書いてるので実際試してないです(おい
ちなみに2_1のピンに設定してあるpowerってのは
ただのPSoC通電確認用です。