自由落下モデル
function Y = nand_gate(A, B)
% NANDゲートの実装(閾値2.5V, ハイ: 5V, ロー: 0V)
% 入力: A, B (入力電圧)
% 出力: Y (NANDゲートの出力)
% 閾値電圧
Vth = 2.5;
% NAND論理判定
if A > Vth && B > Vth
Y = 0; % 両方が閾値を超えた場合、出力はロー (0V)
else
Y = 5; % それ以外はハイ (5V)
end
end
function Y = pwm_comparator(input1, input2)
% PWM用の2入力コンパレータ
% 入力: input1, input2
% 出力: Y (5V: ハイ, 0V: ロー)
% 出力電圧の定義
HIGH = 5; % ハイの電圧
LOW = 0; % ローの電圧
% 比較処理
if input1 > input2
Y = HIGH; % 入力1が入力2より大きいなら5V
else
Y = LOW; % 入力1が入力2以下なら0V
end
end
Pythonコード
import matplotlib.pyplot as plt
import numpy as np
# PWM信号生成関数
def generate_pwm(frequency, duty_cycle, duration):
"""
PWM信号を生成してプロットする
:param frequency: PWM信号の周波数 (Hz)
:param duty_cycle: デューティ比 (0~100%)
:param duration: シミュレーション時間 (秒)
"""
# 基本パラメータ
T = 1 / frequency # PWM周期 (秒)
t = np.linspace(0, duration, int(1000 * duration)) # 時間軸
# PWM波形の生成
pwm_wave = ((t % T) < (duty_cycle / 100) * T).astype(float) # デューティ比に基づいて波形を生成
# プロット
plt.figure(figsize=(10, 4))
plt.plot(t, pwm_wave * 5, color='blue') # 5V信号として表示
plt.title(f"PWM Signal (Frequency: {frequency} Hz, Duty Cycle: {duty_cycle}%)")
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
plt.grid(True)
plt.ylim(-0.5, 5.5)
plt.show()
# パラメータ設定
frequency = 10 # PWM周波数 (Hz)
duty_cycle = 30 # デューティ比 (%)
duration = 0.5 # シミュレーション時間 (秒)
# PWM信号生成関数を呼び出し
generate_pwm(frequency, duty_cycle, duration)