「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



FM音源をソフトウェアで作れないかというお話
の続き。

あれもこれもと盛り込むと大変なことになっちゃう
ので、ひとまず最低限のスペックでプロトタイプを
作ってみたいと思います。

で、電卓弾きながら紙にメモをざっくりと書き出して
みました。仕様的にはこんな感じ。

・AVRのアセンブラで作る
・PWM使って、頑張って40000Hzを出してみる
・オペレータは2個だけ(1個はキャリア、1個は
 モジュレータ)で、単音発声とする
・LFO、エンベロープはひとまず見送り
・内部のsin関数テーブルは8ビット精度とする
・メロディーデータ(楽譜)は固定決め打ちで
 ドレミド(4つ目のドは1オクターブ上)の4音とする
・キャリアとモジュレータの周波数比はプロコンで
 指定しておくことにして、プログラム修正にて
 1:1から1:7で可変とする
・変調の度合い(キャリアのノコギリ波に加算する
 モジュレータの振幅)もプロコンで指定
・音程は、少し周波数が不正確になっても処理が
 簡単に済むように、40000Hzの割り込み
 タイミングに合わせた長さで丸める
・その他出来るだけ手を抜きつつ、上記で面倒な
 ものがあれば更に手を抜く…音を出すことが
 最優先

といった感じ。
ちなみにドレミドの各音を周波数にすると、

(通常) 262Hz 330Hz 392Hz 523Hz
(試作) 261Hz 331Hz 392Hz 526Hz
         (四捨五入値)

といった具合に数Hzずれます。まぁ、このくらいは
いいことにします。

MEGA8が手元にいっぱいあるのでMEGA8を使いたいと
思うのですが、そうするとクロックは16MHz。
割り込み1回につき400クロックに相当。

MEGA48なら20MHzが使えるから、500
クロック使えるんですが、この間作ったシリアル版の
arduinoボード(MEGA8登載)を流用しちゃえば
はんだ付けもブレッドボードも不要になるので、
流用してしまおうかと思ってます。
(この場合もちろんarduinoのIDEもブートローダー
 も使えませんが)

このくらいに機能を削れば、ひとまず作れないって事は
なさそう。まずは少しずつ進めて、音を出してみようと
思います。



コメント ( 0 )




http://jp.makezine.com/blog/2008/09/balance_a_ball_on_servo_c.html

例によってmakeブログです。

このムービー見てると、機械が
  「おーーーーとっとっと…」
  「お、やべっ」
とか言いながらバランス取ってる声が聞こえて
きそうで、妙な生き物感が伝わってきます。

タッチセンサでボールの位置をセンシングし、
ボールを転がす方向を計算しながら
アクチュエータで角度を制御しているみたいです。

見事です…。

PID制御なんか使ってるんだろうなぁ。きっと。



コメント ( 0 )




昨日あれこれ考えていた、ネコロジーをオシロ化する
上での入力回路周りについてです。ちょっと進みました。

ADコンバーターを壊さないために、ADコンに掛かる
電圧を-0.5V~4Vの間に絶対収めるというお話。

オペアンプの電源電圧を±3V(もしくは3.3V程度)
にすれば、+側は3Vまでしか掛からないことは
昨日のとおり。

もう一方の、負電圧時に0Vまでで食い止めるという
のが残った課題でした。

例によって私のオペアンプのバイブルを引っ張り出して
読み直してみます。理想ダイオード回路のところです。

理想ダイオード回路は、普通のシリコンダイオード
等と違って順方向電圧降下が無い(Vf=0)という
綺麗な動作をする回路です。

回路で言うとこんな感じ。


例の本にはR1から右側の部分しか載ってないのですが、
これだけだと反転出力(R1に0~3Vを入力すると
0~-3Vが出力)になってしまうので、その前段に
反転増幅回路を設けました。これによって、
反転+反転=非反転というわけです。これなら
増幅率(入力レンジの設定)の設計自由度も高いし。

この図中のダイオードを両方ともショットキバリアに
すれば、考えられる範囲で最速の動作をしてくれる
はずなんですけどね。


それにしても高ーーーーい高速オペアンプを2個も
使うのはいかがなものかと思って、いろいろ検索
してみました。

なひたふさんのこのページに、ボルテージフォロアを
使った理想ダイオード回路がありました。↓
http://www.nahitech.com/nahitafu/mame/mame3/ideald.html


こんな回路。

この回路、よく出来てるなぁ…。D2の使い方が
かなり絶妙。非反転の1倍出力です。

さらにこの回路をボルテージフォロアではなく、
非反転増幅を応用すれば適当な増幅率が設定出来る
んですが、非反転なので増幅率は1倍以上にしか
設定できません。
(AD9631は元々1倍以上にしか設定できませんが)


オペアンプのオフセット電圧(誤差)とか、
入力電圧のレンジ設定の設計自由度とか、そういうこと
を考えるとオペアンプ2個で反転+反転にしたほうが
有利なんだよなぁ…。

まぁ、いずれにしてもまずは簡単に、安く、そこそこ
安定して動作してくれればいいってことで、後者を
使うのがベストチョイスかな。AC100V測りたい
とか考えてないので。


これらの回路、本当はショットバリアダイオードでも
スイッチングの時間はゼロじゃないので、極々わずかな
時間だけ負電圧が出力される瞬間があるはずだし、
オペアンプのオーバーシュート等も考慮すると、
本当にADコンバーターに負電圧が掛からないのか
という点で懸念はあるのですが、そもそも
私の頭ではこれ以上は無理です。

これで壊れちゃったらそれはそれということで…。

ま、ちょっとだけ前進。



コメント ( 0 )




http://headlines.yahoo.co.jp/hl?a=20080928-00000002-fliv-moto

金融危機の影響で、F1のスポンサー収入が
危機的な予想になっているようです。

そんな中の今回のシンガポールGP。初の
ナイトレース。

ナイトレースというのは人目を引くのですが、
多分野球のナイターと同レベルかもしくはそれ以上
の電気を使って照明を焚いていることでしょう。

地球には優しくないなぁ…。

そもそもモータースポーツと環境問題は相反する
部分があるのは仕方ないんだけど、かつて
故本田宗一郎氏は
  「より良い製品を作り出す実験場」
として鈴鹿サーキットを作ったのは有名で、
レースの技術は市販車にフィードバックされて
来たのですが、もはや今の時代、F1は時代の
遺物なのかも知れないなぁ。

世界最高峰のレースには違いないんだけど…


ウェイトハンデのルールが盛り込まれている
super-GTの方がシーズン通して楽しめる
ような気がするなぁ。技術的にもベースは市販車
だし、むやみやたらにお金を掛けたら速くなる
わけでもないし。

せめて、回生ブレーキくらいは市販車に還元
できればとも思うんですが、FIAの採用した
回生ブレーキの方式は市販車にはあまり適用
出来ないもの。(っていうか、フェラーリを
贔屓してるとしか思えない…)

そういうところが世の中とズレてるんだよなぁ…。

というわけでレーススタートしました。
ホントにマーライオンの横で走ってるんだなぁ…
絵的に面白い…



コメント ( 0 )




秋月で高速オペアンプAD9631を買ってきました。
1回路入りの超高速オペアンプ。500円なり。
WEBのカタログには載っていないようです。

アナデバのデータシートによると、SR=1300Vの
超高速。ユニティーから安定動作。

こことか見ると、やはりかなり扱いは大変な
代物のようです↓。
http://www.usagi-js.com/acforum/acforum.cgi?no=13&reno=12&oya=12&mode=msgview&page=10

まぁ、これだけの高速アンプだから覚悟はして
いましたが、ずいぶん大変そうねぇ…
ベタグランドにして1mm以内で繋がないと
イケナイとか、+、-の両方に直列で140Ωの抵抗を
入れなさいとか(データシートだと130と140みたいですが)、
+Vs、-Vsピンはチップコンデンサで最短距離で
ベタグランドに接地とか、おやつは300円以内とか…
いろいろ。

まぁ、最高速で使うわけじゃないので、出来る限り
の対応はしておこうというレベルで考えておきます。
LM7171の4100V/usよりは遅いから、もう少し
ぬるくても何とかなるんじゃないかという甘い予想。
あ、
ネコロジー
に繋いでオシロを作っちゃおうという
お話の続きです。

ネコロジーに、8ビットADコンバーターAD9283を
接続し、このアナログ入力回路部分のインピーダンス
を下げるためにAD9631を繋いで、ここにプローブを
接続することにしよう、という考えです。

目下のところせいぜい2.5Msps程度なので、
175MHzのオペアンプや、80Mspsの
ADコンバーターを使うまでもないのですが、
まぁ立ってるものは親でも使えと昔から言うので、
これを使うことにします。
(ホントはCPLD使って高速化するときの布石です)

電源電圧が難しいところ。特にAD9283(ADコンバーター)
の電源周りが。

このIC側は3Vタイプで絶対定格が4V。マイコンと
SRAM側は20MHzで動かすのに5V電源が必要。

と言うわけで、IC間のI/Fには電源変換が必要
になります。
しかも、ネコロジーはSRAMとの接続に変則的な方法
を取っているので、SRAM-AD9283-MEGA48の3者で
電源電圧が混在し、かつ色んな方向にデータが流れます。

特に困るのが、ADコンからSRAMに取り込んだデータ
をMEGA48から読み出す時。この時SRAMの出力信号は
5Vなので、それがAD9283に掛かると壊れちゃう。
SRAMから読み出しする時はADコンをアイソレート
しておく必要あり。その方法を考えないと…


そしてもう一つの難しいところ:信号の入力電圧幅。

仮にオペアンプをユニティーで使うとすると、
オペアンプの入力に掛けていい電圧は-0.5V~
+3.5V。(電源3Vの場合…AD9631の定格による)

このオペアンプは±3Vから使えるので、+Vsは電源電圧
の設定しだいでなんとでも出来るんですが、問題は-Vs
の方。

まず単電源を謳っていないオペアンプなので、
-VsをGND電位にはできません。
ある程度の負値にしてあげないと、GND電位付近が
拾えない(不感領域)ということになります。

じゃぁ、-0.5V~-1V程度を使うとしましょう。
これならGND電位の入力まで出来るようになるんですが、
元々最低±3V電源を前提にしているということは、
-Vs~+Vsの電位差は6Vというわけです。
-Vsを-0.5Vとすると+Vsとの電位差は約3.5V。
これでは、オペアンプが動作できるかわからないし、
動いたとしても電圧不足で高速動作は望めないでしょう。

じゃぁ、電源を±3Vの両電源と仮定します。
この場合、プローブから-3Vの負電圧が入力されると
AD9631にも-3Vまでの負電圧が掛かってしまうことに
なります。ラッチアップしますね。これは回避したい。

どうにかして、この-3Vをカットしてしまいたい
のですが、単純にオペアンプとツェナーでリミッタ回路
組むと、動作が遅すぎてアウト(多分)。ラッチアップ
しちゃうでしょう。

オペアンプの両入力端子か、ADコンの両入力端子を
ショットキダイオードでGNDにショートさせちゃえば
いいかなぁ…というのが目下考えている解決策。

この方法はIC壊さない速さでバイパス動作可能なのか
と言う点と、ショットキバリアダイオードのVfが
0.5V以内に入っているのかというのが懸念事項。
スイッチング特性は一般に数十ピコ秒単位らしい
のですが…このくらいなら大丈夫?

オペアンプの入力段に取り付けるとしたら、順方向の
漏れ電流が大きいのでこれが大きな誤差を作り出しそう
なのは想像に難くないし…

うーん。

普通、この手の処理をする時って、どんな回路を
組むものなんだろう?

仮にオペアンプでリミッタ回路組むとして、ツェナー
ダイオードの代わりにショットキバリアダイオード
を使ってみるっていうのはどうかなぁ?あとでちょっと
考えてみよう…。

そもそもAD9283が5V動作ICならもう少し事態は
簡単に済みそうなんだけどなぁ…。

(後日訂正:記事中の一部間違えを修正しました。
 AD9631とAD9283がゴチャゴチャになってた、など)



コメント ( 0 )



« 前ページ