Maak een Fortran-programma om een eenvoudige elektrische schakeling te modelleren
description
Door deze prompt te gebruiken, kun je elektrische schakelingen effectief simuleren en analyseren, waardoor je begrip van schakelinggedrag en ontwerprincipes in Fortran wordt versterkt.
prompt
try_prompt
Help me een Fortran-programma schrijven dat een eenvoudige elektrische schakeling simuleert met de volgende specificaties: - Schakelingonderdelen (bijv. weerstanden, condensatoren): {{circuit_onderdelen}} - Waarden van de spanningsbronnen: {{span ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een eenvoudig Fortran-programma dat een basis simulatietool voor een elektrische schakeling implementeert. Het model simuleert de stroom door R1 in een RC-kring, waarbij de condensator C1 wordt opgeladen door een spanningsbron V1 via weerstand R1.
Het programma gebruikt een eenvoudige Euler-methode om de spanning over de condensator te berekenen over tijd.
```fortran
program RC_Schakeling_Simulatie
implicit none
! Parameters
real, parameter :: R1 = 100.0 ! weerstand in Ohm
real, parameter :: C1 = 10.0e-6 ! capaciteit in Farad (10 μF)
real, parameter :: V1 = 5.0 ! spanningsbron in Volt
real, parameter :: dt = 1.0e-4 ! tijdstap in seconden
integer, parameter :: max_tijd = 0.5 ! maximale simulatie tijd in seconden
! Variabelen
real :: t = 0.0 ! huidige tijd
real :: Vc = 0.0 ! spanning over condensator
real :: I_R1 ! stroom door R1
! Open bestand om output te schrijven
open(unit=10, file='simulatie_output.csv', status='replace')
write(10,*) 'Tijd,Spanning_C,Stroom_R1'
! Simulatie loop
do while (t <= max_tijd)
! Bereken stroom door R1: I = (V1 - Vc) / R1
I_R1 = (V1 - Vc) / R1
! Euler update voor condensatorspanning
Vc = Vc + (dt / C1) * I_R1
! Output naar CSV
write(10,'(F8.4,1x,F8.4,1x,F8.6)') t, Vc, I_R1
! Verhoog tijd
t = t + dt
end do
close(10)
print *, 'Simulatie voltooid. Resultaten opgeslagen in simulatie_output.csv'
end program RC_Schakeling_Simulatie
```
**Hoe de resultaten te interpreteren:**
- Het CSV-bestand bevat drie kolommen: tijd (s), spanning over de condensator (V), en stroom door R1 (A).
- Aan het begin (t=0) is de spanning over de condensator 0V en de stroom maximaal (V1/R1).
- Naarmate de tijd vordert, laadt de condensator op en de spanning stijgt asymptotisch naar V1 (5V).
- De stroom door R1 neemt af naar nul zodra de condensator volledig is opgeladen.
**Gedrag in de loop van de tijd:**
- De spanning over de condensator volgt ongeveer een exponentiële op- en ontlaadcurve, met een tijdconstante τ = R1 * C1 = 100 Ω * 10 μF = 0,001 seconde.
- Je kunt de resultaten visualiseren door het CSV-bestand te importeren in een grafiekprogramma (zoals Excel, LibreOffice Calc, of Python met matplotlib) en de spanning en stroom uit te zetten over de tijd.
**Aanpassingen:**
- Voor meer complexere schakelingen kun je het model uitbreiden met meerdere componenten en vergelijkingen.
- Voor een gedetailleerdere simulatie kun je een hogere orde numerieke methode toepassen of gespecialiseerde simulatiesoftware gebruiken.
provider: deepseek
model: deepseek-chat
Hier is een eenvoudig Fortran-programma dat een RC-schakeling simuleert en de stroom door weerstand R1 berekent. De schakeling bestaat uit een spanningsbron V1, een weerstand R1 en een condensator C1 in serie.
```fortran
program rc_circuit_simulation
implicit none
! Declaratie van variabelen
real :: V1 = 5.0 ! Bronspanning (V)
real :: R1 = 100.0 ! Weerstand (Ω)
real :: C1 = 10e-6 ! Capaciteit (F)
real :: dt = 0.001 ! Tijdstap (s)
real :: total_time = 0.1 ! Totale simulatie tijd (s)
real :: time, I_R1, V_C, Q_C
integer :: n, steps
! Initialisatie
steps = nint(total_time / dt)
V_C = 0.0 ! Initiële spanning over condensator
Q_C = 0.0 ! Initiële lading op condensator
! Open bestand voor output
open(unit=10, file='rc_circuit_results.txt', status='replace')
! Schrijf header naar bestand
write(10, *) 'Tijd(s)', ' Stroom_R1(A)', ' Spanning_C(V)'
! Hoofdsimulatie loop
do n = 0, steps
time = n * dt
! Bereken stroom door R1 (I = (V_bron - V_C) / R)
I_R1 = (V1 - V_C) / R1
! Update lading op condensator (Q = Q + I * dt)
Q_C = Q_C + I_R1 * dt
! Update spanning over condensator (V_C = Q / C)
V_C = Q_C / C1
! Schrijf resultaten naar bestand
write(10, '(F8.4, 2F12.6)') time, I_R1, V_C
end do
! Sluit bestand
close(10)
print *, 'Simulatie voltooid. Resultaten opgeslagen in rc_circuit_results.txt'
end program rc_circuit_simulation
```
## Interpretatie van de simulatie resultaten:
### Wat het programma berekent:
- **Stroom door R1**: I_R1 = (V1 - V_C) / R1
- **Spanning over condensator**: V_C = Q_C / C1
- De stroom start hoog en neemt exponentieel af naarmate de condensator oplaadt
### Belangrijke karakteristieken om te observeren:
1. **Initieel gedrag** (t=0):
- Stroom: I_max = V1 / R1 = 5V / 100Ω = 0.05A
- Condensatorspanning: 0V
2. **RC tijdconstante**:
- τ = R × C = 100Ω × 10μF = 0.001 seconden
- Na 1τ is de stroom gedaald tot ~37% van beginwaarde
- Na 5τ is de schakeling praktisch gezien in steady-state
3. **Steady-state** (lange termijn):
- Stroom nadert 0A
- Condensatorspanning nadert 5V
## Visualisatie van resultaten:
### Met Python (aanbevolen):
```python
import matplotlib.pyplot as plt
import numpy as np
data = np.loadtxt('rc_circuit_results.txt', skiprows=1)
time = data[:,0]
current = data[:,1]
voltage = data[:,2]
plt.figure(figsize=(12,4))
plt.subplot(1,2,1)
plt.plot(time*1000, current*1000) # tijd in ms, stroom in mA
plt.xlabel('Tijd (ms)')
plt.ylabel('Stroom door R1 (mA)')
plt.title('Stroom vs Tijd')
plt.grid(True)
plt.subplot(1,2,2)
plt.plot(time*1000, voltage)
plt.xlabel('Tijd (ms)')
plt.ylabel('Spanning over C1 (V)')
plt.title('Condensatorspanning vs Tijd')
plt.grid(True)
plt.tight_layout()
plt.show()
```
### Met gnuplot (alternatief):
```
plot 'rc_circuit_results.txt' using 1:2 with lines title 'Stroom door R1'
```
## Tips voor analyse:
- Let op de exponentiële afname van de stroom
- Controleer of de tijdconstante τ = 1ms overeenkomt met je verwachtingen
- Verifieer dat de condensator volledig is opgeladen na ~5ms
- Experimenteer met verschillende R en C waarden om het gedrag te vergelijken
De simulatie laat het klassieke oplaadgedrag van een RC-circuit zien, wat fundamenteel is voor timing-toepassingen in elektronica.

