不稳定多谐器建模
本例将演示不稳定多频振荡器的建模。
不稳定多频振荡器是一种能产生连续矩形脉冲的自动振荡电路。它没有稳定状态,会在两个晶体管之间自动切换,产生周期性信号。
多频振荡器可用于在各种系统中产生时钟信号。
数学描述
脉冲和暂停的持续时间由晶体管基极电路中的 RC 电路决定。
每个晶体管 "导通 "状态的持续时间:
总振荡周期(对称电路):
信号频率
模型示意图

定义加载和运行模型的函数:
In [ ]:
function start_model_engee()
try
engee.close("npn_transistor", force=true) # закрытие модели
catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
m = engee.load("$(@__DIR__)/astable_multivibrator.engee") # загрузка модели
end;
try
engee.run(m, verbose=true) # запуск модели
catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
m = engee.load("$(@__DIR__)/astable_multivibrator.engee") # загрузка модели
engee.run(m, verbose=true) # запуск модели
end
end
Out[0]:
运行模拟
In [ ]:
start_model_engee();
将模拟数据写入变量:
In [ ]:
t = simout["astable_multivibrator/правый"].time[:]
V_right = simout["astable_multivibrator/правый"].value[:]
V_left = simout["astable_multivibrator/левый"].value[:]
I_R1 = simout["Resistor 1.i"].value[:]
I_R4 = simout["Resistor 4.i"].value[:]
Out[0]:
数据可视化
In [ ]:
using Plots
两个晶体管集电极-发射极电压的可视化:
In [ ]:
plot(t, V_left, linewidth=2)
plot!(t, V_right, linewidth=2)
Out[0]:
可视化连接到晶体管集电极的电阻上的电流:
In [ ]:
plot(t, I_R1, linewidth=2)
plot!(t, I_R4, linewidth=2)
Out[0]:
处理模拟结果:
运行统计库
In [ ]:
using Statistics
定义查找电压波动频率和周期的函数:
In [ ]:
function calculate_oscillation_properties(time::Vector{T}, x::Vector{T}) where T <: Real
# Проверка длины векторов
if length(time) != length(x)
error("Векторы времени и сигнала должны быть одинаковой длины")
end
n = length(time)
n < 2 && return (NaN, NaN) # Недостаточно данных
# Находим среднее значение сигнала
avg = sum(x) / n
# Ищем моменты пересечения среднего значения снизу вверх
up_crossings = T[]
for i in 2:n
if x[i-1] < avg && x[i] >= avg
# Линейная интерполяция для точного определения времени пересечения
t = time[i-1] + (time[i] - time[i-1]) * (avg - x[i-1]) / (x[i] - x[i-1])
push!(up_crossings, t)
end
end
# Проверка достаточного количества пересечений
length(up_crossings) < 2 && return (NaN, NaN)
# Расчёт периодов (в единицах времени)
periods = diff(up_crossings)
mean_period = mean(periods)
frequency = 1 / mean_period
return "Частота колебаний: $frequency Гц. Период колебаний: $mean_period с."
end
Out[0]:
将函数应用于电压值矢量(任何信号均可替代):
In [ ]:
calculate_oscillation_properties(collect(t)[:,1], collect(V_left)[:,1])
Out[0]:
结论
在本示例中,我们考虑了一个不稳定多频振荡器模型,其中决定振荡频率和周期的关键因素是基极电阻器(R2、R3)和构成延时 RC 电路的电容器。集电极电阻(R1、R4)不影响信号的频率,其作用仅限于限制通过晶体管的电流和形成输出电压的振幅。