电子设计基础训练之无线电台
PWM
Arduino 可以直接输入模拟信号而无法直接输出模拟信号。但是,PWM 引脚可以通过调整占空比来输出不同幅值的电压,从而输出近似的模拟信号。(详见第 10 章)
(实验 10.1.2)使用 PWM 引脚输出近似的模拟信号,并使用模拟引脚读取,得到的电压变化如下图。其中平滑的曲线为理论上输出的电压,反复振荡的曲线是输入引脚读取的电压,也就是 PWM 引脚实际输出的电压。
但是,这个实验的结果很不精确,因为模拟引脚读取速度十分有限。使用示波器可以得到更为精确的结果:
Timer
Arduino Uno 有三个定时器:Timer0、Timer1 和 Timer2。其中:
- Timer0 用于
delay()
、millis()
和micros()
等函数,并控制着 5、6 号引脚的 PWM 输出; - Timer1 在基础实验中不使用,并控制着 9、10 号引脚的 PWM 输出;
- Timer2 用于
tone()
函数,并控制着 3、11 号引脚的 PWM 输出。
产生电磁波
产生电磁波有两个条件:高频振荡信号和开放电路。后者可以通过接天线实现——当然,悬空的杜邦线也是可以的。下面着重说说前者:
本次实验中使用 Timer1 产生高频振荡信号。配置 Timer1 需要修改
TCCR1A
、TCCR1B
、OCR1A
等变量的值,较为麻烦。而 TimerOne 这个第三方库可以用来方便地配置
Timer1。使用以下代码即可在 9 号引脚处生成占空比为 50% 的 PWM 信号:
1 | Timer1.initialize(1); |
产生电报信号
tone()
和 noTone()
函数可以产生指定频率的方波。将方波接入蜂鸣器,即可发声。
电磁波携带电报信号
将高频振荡信号与电报信号通过与门相叠加,再通过开放电路发射出去,即可实现发报功能。
使用示波器测量叠加后的波形,可以看到波形在微秒尺度上具有周期性:
但是,当比例尺缩小到毫秒尺度时,呈现的波形仍然具有周期性。这是为什么呢?我并没有找到原因。可能是因为波形振荡太频繁了,出现了显示错误。
延伸阅读
- 电子设计基础训练 思考11 — coder014