这是一个简单的方波发生器,主要使用TimerOne库,可让您在引脚9产生PWM信号。硬件部件:ArduinoNanoR3×1个Adafruit标准LCD-16x2蓝色白色×1个按钮开关,瞬间×3单圈电位器-10k欧姆×1个软件应用程序和在线服务:ArduinoIDE这是一个简单的方波发生器,主要使用TimerOne库,使您可以在引脚9处生成PWM信号,范围约为5Hz至1Mhz,并且可以将占空比从0调整到100%。原理图:设备非常易于构建,仅包含几个组件:ArduinoNano微控制器液晶显示器三个上拉电阻三个按钮脉冲发生器可以使用连接到Arduino数字输入6和7的按钮来调整脉冲重复周期。13个输入引脚可让您调整占空比。持续时间和占空比读数显示在LCD16×2指示器的第一行中,频率读数显示在第二行中。调整脉冲重复周期的最小步长是1μs,因此频率将离散变化,例如1μs是1MHz,2μs是500kHz,3μs是333.333Hz,依此类推,并且随着频率的降低,其调整的平滑度增加。这在较高的频率上是不切实际的,但这就是简化的代价。为了可视化输出信号,我使用了小型单通道示波器。最后,将设备安装在合适的盒子中,这是电子实验室中的另一个有用工具。源码:#include#includeLiquidCrystallcd(12,11,5,4,3,2);//RS,E,D4,D5,D6,D7unsignedlongt=1000,f,k=512;//default1000μs(1000Hz),meander,pulsedurationisequaltodutycyclek=512(50%)bytek1,kn,kn1,kn2;intdrive,drive0;voidsetup(){lcd.begin(16,2);//LCD16X2pinMode(10,OUTPUT);pinMode(6,INPUT);//buttonatinput6pinMode(7,INPUT);//buttonatinput7pinMode(13,INPUT);//buttonatinput13}voidloop(){Timer1.initialize(t);//periodTimer1.pwm(9,k);//k-fillfactor0-1023.Weremovethesignalfromtheoutput9kn=digitalRead(6);//buttoninput6(-pulseperiod)kn1=digitalRead(7);//buttoninput7(+pulseperiod)kn2=digitalRead(13);//buttoninput13(+circlefillfactor)if(kn==HIGH){//decreasingtheperioddrive++;if(drivet=t-1;}//ifthebuttonisheldforalongtime,thecorrectionofthepulseperiodx10x100x1000isacceleratedelseif(drive>30&&drivet=t-10;}elseif(drive>=60&&drivet=t-100;}elseif(drive>=100){t=t-1000;}}else{drive=0;}if(kn1==HIGH){//addingaperioddrive0++;if(drive0t=t+1;//ifthebuttonisheldforalongtime,thecorrectionoftheperiodx10x100x1000isaccelerated}elseif(drive0>30&&drive0t=t+10;}elseif(drive0>=60&&drive0t=t+100;}elseif(drive0>=100){t=t+1000;}}else{drive0=0;}if(t==0||t>300000){//limitingthepulsedurationtotheminimum,if0μsormorethan300ms(3.33Hz),thentheperiodis1μst=1;}if(t>200000&&tt=200000;}f=1000000/t;//calculatethefrequencyk1=k*100/1024;//calculate%fillfactorif(kn2==HIGH){//buttonforadjustingthefillfactor(inacirclefrom50to100%,thenfrom0to100%)k=k+16;//step16outof1024(youcando8forsmootheradjustment)}if(k==1024){k=0;}//displayinginformationontheindicatorlcd.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("");}