Arduino Nano 实现 AM 调幅广播发射机
物料清单(极简版)
| 组件 | 数量 |
|---|---|
| Arduino Nano R3 (ATmega328P) | 1 |
| 10 kΩ 电阻 | 2 |
| 10 µF 电解电容 | 1 |
| 面包板 + 跳线 | 1 |
核心原理:数字引脚如何产生 AM 信号?
ATmega 只有高/低电平,无法直接输出连续振幅。本项目采用 PWM 调制载波 思路:
- Timer2 产生方波载波(默认 600 kHz,可调 31 kHz – 8 MHz),输出于 D11 (PB3)
- Timer1 以 10-bit Fast PWM 模式生成音频包络,占空比由 ADC 实时采样的音频信号决定
- 载波仅在 PWM 高电平时输出(通过
DDRB动态切换 D11 为输出/高阻),形成调幅波形 - 普通 AM 收音机的 LC 滤波器充当低通,还原音频
⚠️ 仅为原理验证,实际发射需在音频输入端加抗混叠低通、RF 输出端加谐波抑制低通,并遵守当地无线电管理法规。
关键寄存器配置速查
| 模块 | 寄存器 | 关键设置 |
|---|---|---|
| 载波 (Timer2) | TCCR2A/B, OCR2A | CTC 模式、无分频、OC2A 翻转输出 |
| 音频 PWM (Timer1) | TCCR1A/B, OCR1A | 10-bit Fast PWM、无分频、溢出/比较中断 |
| ADC | ADMUX, ADCSRA, DIDR0 | 内部 1.1 V 基准、自由运行、18.5 kS/s、关数字输入 |
完整固件(含注释)
/* Arduino AM Transmitter - CC BY-SA 4.0 */
#define ANTENNA_PIN PB3 // D11
void setup() {
Serial.begin(115200);
// ---- 载波 600 kHz ----
uint32_t fTransmit = 600; // kHz
DDRB |= (1 << ANTENNA_PIN);
TCCR2A = (1 << COM2A0) | (1 << WGM21); // CTC, Toggle OC2A
TCCR2B = (1 << CS20); // No prescaler
OCR2A = F_CPU / (2000 * fTransmit) - 1;
Serial.print("Broadcast at "); Serial.print(F_CPU / (2 * (1 + OCR2A)) / 1000); Serial.println(" kHz");
// ---- 音频 PWM (Timer1, 10-bit) ----
TCCR1A = (1 << WGM11) | (1 << WGM10);
TCCR1B = (1 << WGM12) | (1 << CS10);
TIMSK1 = (1 << OCIE1A) | (1 << TOIE1);
// ---- ADC 单通道自由运行 ----
ADMUX = (1 << REFS1) | (1 << REFS0); // 1.1 V 内部基准
ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (1 << ADPS2) | (1 << ADPS1); // /64
DIDR0 = (1 << ADC0D); // 关闭 A0 数字缓冲
}
ISR(TIMER1_OVF_vect) { // PWM 周期开始:读取 ADC,置载波输出使能
uint8_t adcl = ADCL, adch = ADCH;
OCR1A = (adch << 8) | adcl; // 更新占空比
DDRB |= (1 << ANTENNA_PIN); // 启用载波输出
}
ISR(TIMER1_COMPA_vect) { // PWM 周期结束:禁用载波输出
DDRB &= ~(1 << ANTENNA_PIN);
}
void loop() { } // 所有工作在中断中完成
接线示意

音频源(如手机耳机孔)经 10 kΩ 分压 → A0;D11 接 1 m 长导线作天线;收音机调至 600 kHz 即可收听。
进阶改进方向
- 更换
OCR2A实现多频段切换 - 用
SoftwareSerial传入数字音频,脱离模拟 ADC - 配合功率 MOSFET 推大天线,延伸覆盖范围(需合规)
制造工艺
- 经典点唱机的传承与演变
- 乐谱:从中世纪手稿到现代出版——行业全景
- 交通信号灯:工程原理、历史沿革与未来创新
- 自制LUMAZOID:基于Arduino的音乐可视化灯光控制器
- DIY 蓝牙控制 Arduino 间谍小车
- Arduino 解码遥控接收机 PPM 信号——分步指南
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- 热敏电阻测温轻松上手:Arduino 分步实战教程