右边两部分是三角波和锯齿波发生器的部分,想知道锯齿波发生器部分的工作原理,还有怎么调幅
由上图可以看到,方波发生器由两个反馈网络组成:
(1)同相输入端,R3,R5和输出端组成了正反馈网络。
(2)反向输入端,C1,R2和输出端组成了负反馈网络。
上电之时,U+ = U- = 0,此时输出端为零,当某一时刻,输出端产生了一个微小的电压跳变时,这个微小的电压将会在输入端引起压差,因为理想运放的放大倍数为无穷大,从而使得输出端电压饱和。
如果假设U+ > U-,那么输出端就达到正向饱和,Uo = +Vcc,U+ = (R3xUo)/(R3+R5) = (R3xVcc)/(R3+R5),电容开始充电,当电容电压大于同相输入端电压时,U- > U+,Uo = -Vcc,U+ = (R3xUo)/(R3+R5) = -(R3xVcc)/(R3+R5),此时电容开始放电,由此往复,从而产生方波信号。
锯齿波发生器的工作原理与调幅方法:
锯齿波发生器采用了积分器电路实现,下面是一个基于运放的锯齿波发生器电路图:
具体工作过程如下:
为了调幅,我们可以在输入端(最上面的极点)加上一个调制信号,来控制输出波形的振幅。
代码实现如下(以Arduino为例):
const int outputPin = 9; // 锯齿波输出引脚
const int modulationPin = A0; // 调制信号输入引脚
const float vRef = 5.0; // 电压参考值(根据你使用的电源或稳压器设定)
void setup() {
pinMode(outputPin, OUTPUT); // 将输出引脚设为输出
}
void loop() {
float modulation = analogRead(modulationPin) / 1023.0; // 读取模拟信号并将其转换为0-1之间的值
float voltage = modulation * vRef; // 将0-1之间的比例值转换为实际电压值(0-vRef之间)
int outputValue = voltage / vRef * 255; // 计算需要输出的PWM值(利用255个占空比级别)
analogWrite(outputPin, outputValue); // 输出PWM信号
delay(10); // 等待10ms,以便模拟较低频的信号
}
需要注意的是,这样的调幅方法并不是很精确,因为锯齿波形并不是一个理想的正弦波,而且调制信号的频率不能太高,否则将无法看到明显的效果。如果需要更高精度的调幅,可以考虑使用其他类型的波形发生器。