Deprecated: Assigning the return value of new by reference is deprecated in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 25

Deprecated: Assigning the return value of new by reference is deprecated in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 30

Warning: Cannot modify header information - headers already sent by (output started at /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php:25) in /home/users/2/floppy.jp-999953/web/kagakusukimono/class/View.php on line 81
科学好き者の日々

PSoCによる正弦波出力 まだ使いこなせない開発環境

20061114064152.jpg

本当は正弦波が欲しいのだが、「コペルニクス的転回」により矩形波で間に合わせてしまった発振器ですが、最近使い出したCypressのPSoC(Programmable System-on-Chip)というマイコンだと正弦波を出せそうです。

PSoCはクロック24MHzのM8Cという8bitマイコンにADコンバーター、DAコンバーター、PWMモジュール、フィルター、アンプなどのアナログ回路を内蔵したマイコン?です。

PICなどではアナログ部分は外付け回路で作らなければならないわけです。(12F675のようにADコンバーターを内蔵しているものもあるが、あってもADコンバーターだけですね)
アナログ回路は経験で使いこなすところがあって、難しいですね。
それが内蔵されているので微小信号を取り扱うなどには有難いですね。

ただ、いくつか問題がありまだ充分に使いこなせていません。
ポピュラーなCY8C27443という石では、
1.パッケージがDIP28pinスリムタイプで大きい
2.価格が500円と高価だった。(最近秋月で350円で売っているのでまぁいいか)
3.開発環境に慣れていない。
まあ、3番が一番の問題なのですがね。

プログラムはDevice editorでモジュールの配置とモジュール間の配線を行い、Application editorでモジュールの起動と動作を記述します。

Application editorは通常のC言語なのでそれほどの違和感はないのですが、Device editorはなかなか慣れません。どういうモジュールを使うべきか、モジュールのinput、outputはどうすべきか、モジュール間はどう接続するか、そして、最後にIOピンにどう接続するか。。。。がイマイチ自由に使いこなせていないのです。editorの画面の大きさが小さいのも老眼に辛いものがありますし。。。。

なにはともあれ、写真は、入門書としては、日本にはこれしかない「はじめてのPSoCマイコン」桑野雅彦著 に載っていた例を少々変えて作成した、20kHzの正弦波です。
矩形波からバンドパスフィルターにより正弦波を作っています。

楽譜データの入力

発振器のマイコン化のなかで、テーマソングの演奏を遊びで組み入れて見ました。
音楽演奏は楽譜データを用意して、それを順次読み出して演奏するわけですが、楽譜データは音の高さと長さの二つのデータが必要になります。ドレミファソラシドと4分音符か8分音符かということですね。

onpu.jpg

さて、楽譜の入力です。問題は2つあります。
1つ目は周波数を入力するのですが、3桁の数値の入力に間違いが多いあるいは神経を使うということです。
2つ目は音階によって同じ8分音符の長さでもその間に入る波数が違うことです。マイコンは何サイクル波形を作ったかで時間を決めています。
そこで、エクセルで上に表示されているような表を作ります。
1列目は8分音符での長さ(8分音符いくつ分かということ)です。2列目は音階でド、ド#、レ。。。。のように入力します。3列目は2列目の音階の周波数、4列目は実際の音の長さ(ここではテンポを120として8分音符の長さは0.25秒です)です。5列目は周波数×音の長さで発声しているサイクル数を表しています。
マイコンに与えるデータはこの3列目の周波数と5列目のサイクル数です。
周波数の入力は直接入れると間違いやすいので右の変換表を作っておいて、表から検索するようにします。VLOOKUP関数です。3列目には =VLOOKUP(K2,$P$1:$R$13,3,FALSE) の関数がいれてあります。
あとは単なる掛け算です。

音の高さはマイコンのループ回数をカウントして作るので、音階本来の周波数にぴったりした周波数になりません。PICでクロックを4MHzで作動させようとすると、高音で最悪3%と結構誤差は大きいものになります。絶対音感をお持ちの方は気持ち悪いでしょうね。俺程度の音感だと気にはならないが。。。

取り合えずテーマソングが高らかに鳴って、本日の発振器くんの仕事のスタートです。

テルミンのマイコン化

675.jpg


昨日のオーディオ用の発振器のVRに相当するものを、手が近づいたことを感知するセンサーとすればテルミンになることに気がつきました。

うーん。どうするかなぁ。近接センサーなので、通常は静電センサーや焦電センサーなどが普通ですね。でも少々高そうです。
手に磁石を持ってよければ、磁気センサーが使えますが、これもアナログ量がでるものは高価ですね。
シャープ 測距センサユニット GP2D12というのを千石で見つけました。750円かぁ。

http://www.straycats.net/html/news190.html
CdSで光量を検出する方式でやっている例がありました。CdSの上に懐中電灯を置いて、CdSはフードで囲っています。この上で手を動かすのですかね。

取り合えず実験として、まえに作ったCdSの光センサーを改造してみることにしました。

改造といっても、ハードは直す必要は無く、PICの12F675のソフトを入れ替えるだけです。
発振器と光センサーは使用しているIOポートのアサインが違う(やれやれ、互換性を持たせて作ってね)ので発振器のソフトを修正して,再アセンブルします。

できました。

ふーむ。前の555タイマーによるアナログテルミンより安定感がありますね。

もっとも、555タイマーでも、高周波の唸り方式ではなく、直接CdSの抵抗変化で周波数可変にすれば、安定度は上がるはずですね。そうすると555タイマーひとつでテルミンができることになり(20円)、CdSは40円で究極の安価なテルミンでしょうか?
しかし、テルミンの味は不安定さにあるような気もするのですが。。。

いつか確認してみます。

オーディオ発振器のマイコン化

オーディオ帯域の発振器を、555タイマーを用いて矩形波の発振器としてしまいましたが、矩形波でいいならマイコンを使ってもいいと思いました。
コスト面では555タイマー(¥20)のほうがずっと有利ですが、マイコン(¥150)なら自由度がずっと大きくなります。
回路図

例によってPICの12F675でVRの値をADコンバータで読み取り、ADコンの値(0〜255)に比例するディレイを作ります。ディレイ長さで出力をONあるいはOFFすればディレイ長さの2倍が周期となる矩形波となるわけです。
ところが、Cで書くと遅くて高い音が出ません。仕方なくアセンブラーで書いてやっと500Hzから12kHzまでになりました。

スイッチを2つ付けているのは、マイコンならでの遊びで、スイッチ1をONとして電源をいれると、テーマソングを演奏してから通常の発振器となります。(実をいうと、この部分がソフトのなんと90%!!を占める。遊びはたかくつくねぇ)
スイッチ2をONとすると連続音ではなく、「ピーッ ピーッ」という100msの無音期間をいれた断続音になります。

電源は単三の電池2本で3Vです。

残念ながら2台は不必要で、555タイマーくんが活躍しているので、このマイコンくんはベンチを暖めている毎日です。


東大生産技術研究所の見学

正門と受付

西千葉にある東大生産技術研究所の千葉実験所の公開があり、見学してきました。

いやぁー 広大な敷地ですね。面積は9.3haで、実験棟が点在しています。
受付で記帳するのですが、一般市民より大学や企業の研究所からの来場が多いですね。

構内

内容は?
「建物の動的破壊を追う」
「車両空間の快適性評価」
「剛な一体型壁面を有する補強土擁壁工法の耐震性」
「地球水循環と社会」
「プロペラファン空力騒音の予測」
などなど、さっぱり判りません。

駒場では実施困難な研究や大規模な装置や広い土地を必要とする研究がやられているそうです。

良い環境で良い研究を進めて頂きたいものです。


エクセル条件付き書式 値と数式

エクセルの条件付き書式は便利だと思いませんか?
書式の違いをフォントのスタイル、下線、色(セルや文字)、取り消し線などで表すので、視覚障害者には使えない(違いが認知できない)のが残念です。

A列に日付のデータがあって、今日までの日に印をつけたいとします。(今日はどこ?)

1.条件付き書式で値を比較する。
ALT 書式 条件付書式 でエンターキーを押します。
条件付き書式 値

上のダイヤログがでます。ここではセルの値が を選び 次の値以下 を選びます。 次に絶対参照で$2$Aが入っているのは A2のセルに TODAY() 関数を入れてあるからです。つまり この条件は A2に入っているTODAY()(今日の日付のシリアル値を返す)より 以下のセル(今日と今日以前の日付け)には薄緑で色をつけろ といっています。

上の方法だとTODAY()関数を置いておくセルが必要です。今日は何日だろう?とある場所をみれば(ここではA2ですが)すぐ分るので、それもいいですが、ただ、条件付き書式で参照するだけの目的なら、以下のように数式で見れば不要になります。

2.条件付き書式で数式で比較する。
ALT 書式 条件付書式 でエンターキーを押します。
条件付き書式 式

上のダイヤログがでます。ここでは数式が を選び 次の条件のところに =TODAY()>=A104 を入れます。 これはA104のセルがTODAY()より小さいか同じ(以下ということ)という式が満たされていたら A104のセルには薄緑で色をつけろ といっています。Aの列には日付が今日を挟むようにいれてあるので、今日と今日よりも前の日付のセルは薄緑で色がつきます。

条件付き書式での参照は絶対参照になるので、2番目の方法でひとつのセルで条件付き書式を作成して、他のセルに書式をコピーするには、A104など相対参照にする必要があります。F4キーで絶対参照から相対参照に変更します。

テルミンって?

テルミンをご存知ですか?
確かロシアの科学者が発明した電子楽器です。
http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AB%E3%83%9F%E3%83%B3
高周波発振器を2つ使ってその差の周波数(うなり)をオーディオ信号として取り出し、楽器として演奏するというものです。
片方の高周波発振器の発振周波数を変えることにより音程が変わります。高周波発振器の発振周波数は通常LとCで決まります。コンデンサに並列にアンテナを接続し、アンテナに人の手を近づけることにより分布容量が変わって総合容量が変わり、発振周波数が変わることを利用しています。

その昔、真空管で!!(おいおい、いつの話?)作ったことがあります。演奏がものすごく難しいこと、音程が安定しない(固定の高周波発振器の周波数安定度が悪いため)ことで、楽器としては実用にならないと思いましたが、演奏家もいるようですので努力なのか、それなりの楽器にしているのか不明ですが、演奏可能なのでしょう。

なぜかテルミンに興味を持った人がいて、作ってみたいとのことでしたので、最新技術??の555タイマーで作ってみました。

555.jpg

12pFのコンデンサと33kΩの抵抗で約1.8MHzの周波数となります。規格上は3MHzが上限らしいので、安全を見込めば1.8MHzでいいでしょう。
これを2つ作り、片方はアンテナをつけ、もう片方は微調整のためのVRをつけます。両方の出力をOPアンプで加算します。特にローパスフィルターなどは必要なさそうです。

OPアンプの出力を定番のLM386でアンプしてスピーカを駆動します。

電源は006Pの9Vの電池です。

手が離れた位置で、音が出ないようにボリュームで調整します。さあ、手をアンテナに近づけます。ヒューという音です。近づけるに従って音は高くなります。がやはり音楽にするには物凄く難しいです。
ただ、ヒューヒューというばかりです。
演奏家はいったいどうしているのでしょうね。

俺は演奏は諦めました。。。。。

オーディオ発振器のコペルニクス的転回

20061106213849.jpg

人の聴力は年とともに特に高音が悪くなるそうです。いわゆる耳が遠いということですかね。

知人が、簡易的にどの周波数まで聞こえるのかを調べるため、500Hz〜10kHz程度の周波数可変のできる発振器が欲しいと言うので、作ってみました。

CRでのウイーンブリッジ発振器が定番なのですが、生憎手元にある資料ではディスクリートの回路しかない。最近ディスクリートは使ってないからなぁ。。。。ちと自信がない。
すると単電源のOPアンプひとつでできる回路図があり、これを参考に作ってみました。
これがまずOPアンプの型番がLM170と言うんですが、資料がないのですね。まあ汎用でいいやと思って、LM324で代用しました。周波数を変えるための、帰還抵抗が2つ必要で、2連のボリュームです。
ところが、周波数特性が悪くて、低域では飽和して矩形波のようだし、高域では振幅が小さくなりすぎだしで思ったようになりません。
昭和50年!!出版の本にある回路で、あまり動作を理解していない回路で作るとこういう羽目になるという見本です。

考えてみると、音が聞こえるかは何も正弦波でなくても、矩形波は正弦波の集まり(奇数高調波はどうせ聞こえない)なのだから、矩形波の発振器でもいいだろうと、555タイマーを使って矩形波の発振器にしてしまいました。

555タイマーでの発振器ならシングルボリュームでOKです。
コペルニクス的発想の転回です。(できなかったことの負け惜しみです。)

とりあえず使ってもらっています。
なんと俺も10kHzは聞こえないのですよ! 8kHzがぎりぎり。。。しようがないねぇ。。。。
Calendar
<< May 2024 >>
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
262728293031
search this site.
tags
archives
recent comment
recent trackback
others
admin

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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111