We are creating it!

PCネタ、スマホネタ、デジモノネタ・・・色々やります。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- ] | スポンサー広告

サーボモータ

サーボモータをSpartan-3で操作しようと思い、早速VHDLコードを書いてみた。
サーボはPWM信号を生成すれば、あとはデューティー比の変化のみで操れるので、簡単かとおもいきや・・・

はまりました。

まず最初にやったミスは、std_logic_vectorとintegerを比較していたためのミス。
シミュレータで確認したら、if文での比較部分で変になっていた。

そして、std_logic_vectorをintegerに変換して、シミュレータはきれいに動いていた。

次は、カウンタがうまく動いていなかったようだ。

生成する波形は、間隔20msのPWM信号で、0.1ms単位でデューティー比を変えられるよう、10kHzをつくり、200回カウントしていた。

そこでカウンタのリセットの部分で

if(cnt < 200)then
cnt := cnt + 1;
else
cnt := 0;
end if;

としていた、そしてvariableの宣言は

variable cnt :Integer range 200 downto 0;

まあ、1カウント多いが、特に問題なく動作するはずだった、しかしオシロにつなぐと、波形がおかしい・・・
きちんと20ms+αで繰り返されていない・・・

原因は何かといろいろコードを考えていたが。
とりえずif(cnt < 199)thenにしたら、普通に動いた・・・


なんで・・・
なぞが残る結果でした。

しかしPWM信号を生成するのにかなり手間取ってしまった・・・
この前ステートマシンを書いてたときもかなり手間取った・・・
関連記事

[ 2006/12/13 ] | FPGA/CPLD | CM(0) | TB(0)
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://tfstdio.blog85.fc2.com/tb.php/6-bdb6738d
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

Twietter

ブロとも申請フォーム
プロフィール

T/F

Author:T/F
何かを作るという楽しみ、喜び。
そんなことを伝えていきたいと思います。

基本的にはデジタルガジェットネタと、気になった科学技術のニュースネタで更新します。

QRコード

QR

ブログ内検索

おすすめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。