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通電確認用です。