AMワイヤレス・マイクを作ってみました。 この実験は発振周波数 = 714KHzで行いました。 1〜2mのアンテナで、木造家屋内はもちろん、家の外周辺で十分に聞こえました。 @発振器 AVRのATTINY2313で、PB3/OC1Aに1000Hzの矩形波を、 SW1を設定しRESET SWを押すとPB2/OC0Aに下記の表の矩形波が出力します。 A送信ファイナル アンテナ出力が最大になるように調整します。 その電圧は約70Vp-p (無変調時) となります。 (VCの耐圧に注意) コイルは中波のラジオに使うOSC用コイルです。 Bローパスフィルタ (fc = 1000Hz) 矩形波をサイン波にします。 (テスト用) C変調器 電圧利得は200倍です。 出力の直流電圧は、電源電圧の半分の6Vで、その6Vに音声電圧の±5.5Vpeakが加わります。 (LM386のデータシートの代表的な性能特性の Peak-to-Peak Output Voltage Swing vs Supply Voltageを参照) R2の33Ωは100%まで変調がかかるように直流電圧を落としてます。 その33Ωの両端の電圧は1.7Vだから、2SC1815GRのコレクタ電流は 1.7 / 33 = 52mAです。 (コレクタ電流はR1で決まる) |
SW1 | PB2/OC0A (KHz) | PB3/OC1A (Hz) |
---|---|---|
0 | 500 | 1000 |
1 | 526 | |
2 | 556 | |
3 | 588 | |
4 | 625 | |
5 | 667 | |
6 | 714 | |
7 | 769 | |
8 | 833 | |
9 | 909 | |
10 | 1000 | |
11 | 1111 | |
12 | 1250 | |
13 | 1429 | |
14 | 1667 | |
15 | 2000 |
回路図
SW2をTEST側にした時のアンテナ出力波形 (20V/DIV, 0.2ms/DIV)
実験風景
How to Compile (コンパイルのしかた) プログラム /* * wi_mic.c * @OC0Aピンに * 500, 526, 556, 588, 625, 667, 714, 769KHz, * 833, 909, 1000, 1111, 1250, 1429, 1667, 2000KHz * のいずれか一波を矩形波を出力する。 * AOC1Aピンに1000Hzの矩形波を出力する。 * SWの読み込みは電源オン時一回のみです。 * SWの値は負論理で全部オフ(SWがない状態)でSW=0(500KHz)です。 * ATtiny2313 * * * Fuses(システムクロック:20MHz) * 水晶 * EXTENDED 0xFF * HIGH 0xDB * LOW 0xFF */ #include <avr/io.h> int main(void) { unsigned char sw_data; /* ATtiny2313 */ DDRA = 0b00000000; /* xxxxx xxxxx xxxxx xxxxx xxxxx RESET XTAL2 XTAL1 */ DDRB = 0b00001100; /* SCK MISO MOSI ----- OC1A OC0A ----- ----- */ DDRD = 0b00000000; /* xxxxx ----- ----- ----- SW4 SW3 SW2 SW1 */ PORTA = 0b00000000; PORTB = 0b11111001; PORTD = 0b01111111; TCCR0A = 0b01000011; /* 比較一致でOC0Aピントグル(交互)出力, 高速PWM動作 */ TCCR0B = 0b00001001; /* 高速PWM動作, clk / 1 */ // +----+----------------------+------------------------------------+ // | SW | OCr0A | 比較一致でOC0A ピントグル(交互)出力 | // | | | 高速PWM動作 | // +----+----------------------+------------------------------------+ // | 15 | 20MHz / 5 = 4000KHz | 4000KHz / 2 = 2000KHz (0.5μs) | // | 14 | 20MHz / 6 = 3333KHz | 3333KHz / 2 = 1667KHz (0.6μs) | // | 13 | 20MHz / 7 = 2857KHz | 2857KHz / 2 = 1429KHz (0.7μs) | // | 12 | 20MHz / 8 = 2500KHz | 2500KHz / 2 = 1250KHz (0.8μs) | // | 11 | 20MHz / 9 = 2222KHz | 2222KHz / 2 = 1111KHz (0.9μs) | // | 10 | 20MHz / 10 = 2000KHz | 2000KHz / 2 = 1000KHz (1.0μs) | // | 9 | 20MHz / 11 = 1818KHz | 1818KHz / 2 = 909KHz (1.1μs) | // | 8 | 20MHz / 12 = 1666KHz | 1666KHz / 2 = 833KHz (1.2μs) | // | 7 | 20MHz / 13 = 1538KHz | 1538KHz / 2 = 769KHz (1.3μs) | // | 6 | 20MHz / 14 = 1428KHz | 1428KHz / 2 = 714KHz (1.4μs) | // | 5 | 20MHz / 15 = 1333KHz | 1333KHz / 2 = 667KHz (1.5μs) | // | 4 | 20MHz / 16 = 1250KHz | 1250KHz / 2 = 625KHz (1.6μs) | // | 3 | 20MHz / 17 = 1176KHz | 1176KHz / 2 = 588KHz (1.7μs) | // | 2 | 20MHz / 18 = 1111KHz | 1111KHz / 2 = 556KHz (1.8μs) | // | 1 | 20MHz / 19 = 1052KHz | 1052KHz / 2 = 526KHz (1.9μs) | // | 0 | 20MHz / 20 = 1000KHz | 1000KHz / 2 = 500KHz (2.0μs) | // +----+----------------------+------------------------------------+ sw_data = ~PIND & 0b00001111; OCR0A = 20 - 1 - sw_data; TCCR1A = 0b01000011;; /* 比較一致でOC1Aピントグル(交互)出力, 高速PWM動作 */ TCCR1B = 0b00011001; /* 高速PWM動作, clk / 1 */ OCR1A = 10000 - 1; /* 20MHz / 10000 = 2000Hz, 1000Hz / 2 = 1000Hz (1ms) */ while(1){ ; } } |