DIY 简单方波发生器,频率高达 1MHz
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
这是一个简单的方波发生器,它基本上使用 TimerOne 库,允许您在引脚 9 处生成范围从 5Hz 到 1 Mhz 的 PWM 信号,并且您可以将占空比从 0 调整到 100%。
设备的构建非常简单,仅包含几个组件:
- Arduino Nano 微控制器
- 液晶显示
- 三个上拉电阻
- 和三个按钮
脉冲发生器能够使用连接到 Arduino 的数字输入 6 和 7 的按钮来调整脉冲重复周期。 13 个输入引脚允许您调整占空比。持续时间和占空比读数显示在 LCD 16 × 2 指示器的第一行,频率读数显示在第二行。调整脉冲重复周期的最小步长为1 μs,因此频率会离散变化,例如1 μs为1 MHz,2 μs为500 kHz,3 μs为333.333 Hz,依此类推,随着频率的降低,其调整的平滑度增加。这在较高频率下是非常不切实际的,但这是简单的代价。在我之前的一个视频中,我描述了类似设备的构造,但借助专用 DDS 芯片,该芯片没有这些缺点,范围更大,但构建起来更复杂
为了可视化输出信号,我使用了小型单通道示波器。最后,将设备安装在合适的盒子中,这是电子实验室中另一个有用的工具。
代码
- Arduino 代码
Arduino 代码C/C++
#include#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// RS,E,D4,D5,D6,D7unsigned long t=1000 ,f,k=512;// 默认 1000 μs (1000 Hz),曲折,脉冲字节 k1,kn,kn1,kn2;int drive,drive0;void setup(){ lcd.begin(16, 2);// LCD 16X2 pinMode(9, OUTPUT); pinMode(6,INPUT);// 输入 6 处的按钮 pinMode(7,INPUT);// 输入 7 处的按钮 pinMode(13,INPUT);// 输入 13 处的按钮}void loop(){ Timer1.initialize(t ); // 周期 Timer1.pwm(9, k); // k - 填充因子 0-1023。 kn=digitalRead(6);//按键输入6(-脉冲周期) kn1=digitalRead(7);//按键输入7(+脉冲周期) kn2=digitalRead(13);//按键输入13(+圆圈填充) factor) if(kn==HIGH){ // 减少周期 drive++;如果(驱动<30){ t =t-1; } // 如果按键长按,脉冲的修正 else if(drive>30 &&drive<60 ){ t=t-10; } else if(drive>=60 &&drive<100){ t=t-100; } else if(drive>=100){ t=t-1000; } } else{ 驱动器=0; } if(kn1==HIGH){// 添加一个句点 drive0++; if(drive0<30){t=t+1; // 如果按键长按,修正 } else if(drive0>30 &&drive0<60 ){ t=t+10; } else if(drive0>=60 &&drive0<100){ t=t+100; } else if(drive0>=100){ t=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=k+16 的圆圈中;// 1024 步中的第 16 步(您可以做 8 次以进行更平滑的调整)} if(k==1024){ k=0; }// 显示指标信息 lcd.setCursor(0,0); lcd.print("T="); lcd.print(t); lcd.print( "我们"); 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( " ");}
示意图
制造工艺