¿Alternativas a LTSpice que están más orientadas digitalmente? [cerrado]

1

¿Qué otras alternativas tenemos para la simulación de circuitos?

En particular, estaría muy interesado en encontrar una herramienta que me permita simular componentes digitales ejecutando fragmentos de código C que sean capaces de generar las señales de salida y luego estas señales se enviarán a un simulador de componentes pasivos que hará el simulación y alimentación de señales resultantes en otras partes digitales que se simulan en C.

No quiero tener que diseñar maquetas para cada componente digital a partir de fuentes de voltaje y componentes pasivos. Sólo quiero escribir código para generar las señales de salida.

    
pregunta Martin

2 respuestas

4

Encontré lo que quería después de leer la documentación del módulo xspice disponible en ngspice. Me permite escribir modelos para mis componentes digitales en C y luego simular componentes discretos periféricos utilizando modelos de especias existentes para transistores, resistencias, etc. Todavía estoy experimentando con esta función, pero hasta ahora ha sido muy prometedor porque puedo modelar cualquier firmware. Controlador digital basado en entradas y salidas de un componente digital definido en el esquema.

Aquí hay un pequeño ejemplo desechable de un componente pwm personalizado:

Luego,exportoestocomounalistadereddeespeciasdesdekicad:

*SheetName:/A1Net-_A1-Pad1_GNDNet-_A1-Pad3_Net-_A1-Pad4_MKPWM01V1Net-_A1-Pad1_GND3.3vR3OUTGND50kR2Net-_A1-Pad3_GND10kR1Net-_A1-Pad1_Net-_A1-Pad3_10kC1OUTGND10nR4OUTNet-_A1-Pad4_50k.end

Luegoagregounpequeñoscriptdeenvolturadondeagregoloscomandosngspiceparamicircuito:

.modelmkpwm01mkpwm01(freq=100).include"spice_test.cir"

.control
tran 1ms 100ms
plot v(OUT)
.endc

.end

Y finalmente agrego el modelo de código para el componente mkpwm en src / xspice / icm y luego compilo ngspice:

void cm_d_mkpwm01(ARGS) {               
    if (ANALYSIS == DC || ANALYSIS == TRANSIENT) {
        double out = sin(TIME * PARAM(freq) * 2.f * M_PI);

        if(out > 0) out = INPUT(vcc);   
        else out = INPUT(gnd);          

        OUTPUT(out) = out;              
    }   
}       

Y el archivo de definición de modelo (.ifs):

NAME_TABLE:

Spice_Model_Name:      mkpwm01          
C_Function_Name:       cm_d_mkpwm01     
Description:           "pwm generator"  


PORT_TABLE:

Port_Name:           vcc                gnd             in                 out
Description:         "vcc"              "gnd"           "input"            "output"
Direction:           in                 in              in                 out
Default_Type:        v                  v               v                  v
Allowed_Types:       [v]                [v]             [v]                [v]
Vector:              no                 no              no                 no
Vector_Bounds:       -                  -               -                  -
Null_Allowed:        no                 no              no                 no


PARAMETER_TABLE:

Parameter_Name:     freq                
Description:        "frequency"         
Data_Type:          real
Default_Value:      1                   
Limits:             [1e-12 -]           
Vector:              no                 
Vector_Bounds:       -                  
Null_Allowed:       yes           

Finalmente, al ejecutar el script de envoltura se obtiene el resultado:

Muyfelizhastaahora.Ahoraeselmomentodesimularuncircuitomáscomplejo:-)

Nota:Originalmenteagreguéelcomponentexspicecomocomponentedigital,peronofuncionóporquerecibíelerror"el nodo no puede ser tanto digital como analógico", así que tuve que cambiar los pines para que fueran analógicos (tipo v). El manual de ngspice explica diferentes tipos de pin. Además, la entrada del ciclo de trabajo no está realmente implementada en el código. De todos modos, es probable que todavía tenga mucho que aprender cómo funciona xspice api, pero hasta ahora creo que encontré exactamente lo que necesito y espero que esto ayude a alguien a comenzar a usar ngspice para personalizarlo. simulación de circuitos.

    
respondido por el Martin
0

Puedes hacer esto con Labcenters Proteus, supongo. Ofrece un generador de señales y la posibilidad de escribir código C para los procesadores utilizados en su circuito.

    
respondido por el Jogitech

Lea otras preguntas en las etiquetas