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

0 件のコメント:
コメントを投稿