亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino Nano 自制 1MHz 方波发生器:简易 PWM 电路

元器件与材料

软件与在线服务

项目简介

这是一个简单的方波发生器,利用 TimerOne 库在引脚 9 输出 PWM 信号,频率范围约 5Hz~1MHz,占空比 0~100% 可调。电路极简,仅包含 Arduino Nano、LCD 显示屏、三个上拉电阻和三个按键。

Arduino Nano 自制 1MHz 方波发生器:简易 PWM 电路

通过连接在数字引脚 6、7 的按键调节脉冲重复周期,引脚 13 的按键调节占空比。LCD 第一行显示周期(微秒)和占空比百分比,第二行显示频率(Hz)。最小调节步进为 1μs,因此频率呈离散变化:1μs 对应 1MHz,2μs 对应 500kHz,3μs 对应 333.333kHz……频率越低调节越平滑。高频段调节不够连续,但这是以简易换取的代价。我此前曾用专用 DDS 芯片制作过类似设备,性能更优但电路更复杂。

输出信号用单通道示波器观测。最终装入合适外壳,成为电子实验室又一实用工具。

代码

#include 
#include 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7
unsigned long t = 1000, f, k = 512; // 默认 1000μs (1kHz), 方波, 50%占空比
byte k1, kn, kn1, kn2;
int drive = 0, drive0 = 0;

void setup() {
  lcd.begin(16, 2);
  pinMode(9, OUTPUT);
  pinMode(6, INPUT); // 减周期按键
  pinMode(7, INPUT); // 加周期按键
  pinMode(13, INPUT); // 调占空比按键
}

void loop() {
  Timer1.initialize(t);        // 设置周期
  Timer1.pwm(9, k);            // 设置占空比 (0-1023)

  kn  = digitalRead(6); // 减周期
  kn1 = digitalRead(7); // 加周期
  kn2 = digitalRead(13); // 调占空比

  // 长按加速逻辑:按住时间越长,步进越大
  if (kn == HIGH) {
    drive++;
    if (drive < 30) t -= 1;
    else if (drive < 60) t -= 10;
    else if (drive < 100) t -= 100;
    else t -= 1000;
  } else drive = 0;

  if (kn1 == HIGH) {
    drive0++;
    if (drive0 < 30) t += 1;
    else if (drive0 < 60) t += 10;
    else if (drive0 < 100) t += 100;
    else t += 1000;
  } else drive0 = 0;

  // 限制周期范围
  if (t == 0 || t > 300000) t = 1;
  if (t > 200000 && t < 300000) t = 200000;

  f = 1000000 / t;            // 计算频率
  k1 = k * 100 / 1024;        // 计算占空比百分比

  if (kn2 == HIGH) {          // 循环调节占空比
    k += 16;                  // 步进 16/1024 (可改 8 更平滑)
    if (k == 1024) k = 0;
  }

  // LCD 显示
  lcd.setCursor(0, 0);
  lcd.print("T="); lcd.print(t); lcd.print(" us");
  lcd.setCursor(12, 0);
  lcd.print(k1); lcd.print(" %");
  lcd.setCursor(0, 1);
  lcd.print("F="); lcd.print(f); lcd.print(" Hz");

  delay(300);
  lcd.setCursor(0, 0); lcd.print("                ");
  lcd.setCursor(0, 1); lcd.print("                ");
}

原理图

Arduino Nano 自制 1MHz 方波发生器:简易 PWM 电路

制造工艺

  1. 自制LUMAZOID:基于Arduino的音乐可视化灯光控制器
  2. DIY Arduino单词时钟 – 极简优雅的实时文字显示
  3. 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
  4. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  5. JX 波形发生器 – 基于 Arduino 的 DDS 振荡器,带 OLED 显示屏
  6. 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
  7. DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
  8. Arduino 串口简易计算器:两数四则运算演示
  9. 自制高精度测距轮:Arduino Nano + 旋转编码器 + 1602 LCD
  10. 轻松打造 Arduino 秒表:按钮触发计时器
  11. Arduino 洗手计时器:抗击 COVID-19 的简易 DIY 工具
  12. 理解方波信号:基础与应用