Olá Pessoal 

Embora tenha criado um soft-start para meu pequeno projecto do LASER Show há base de relés, algo não estava a funcionar correctamente.
Uma pilha é responsável para gerar 15V positivos, e a outra 15V negativos.
Em caso algum estas pilhas perdem carga simultaneamente, e aí algo corre mal.
Procurei no google por "symmetrical soft start", não existe, e o que pretendia era algo demasiado especifico, que monitoriza-se também a tensão.
Então resultou neste esquema:

As resistências ás 
gates (R1 e R3) devem ser baixas para reduzir o tempo dos transístores desligarem-se, em contrapartida, a dissipação também aumenta e resulta num consumo desnecessário.
A rampa é providenciada via PWM em ambas as polaridades.
'fuses: e-FF h-DF l-E2
$regfile = "ATtiny25.dat"
$crystal = 8000000
Speaker Alias Portb.2
Ddrb = Bits(ddb2 , Ddb1 , Ddb0)
Portb = Bits(ddb1)                                          'Portb.1 é invertido
Config Adc = Single , Prescaler = 4 , Reference = Internal_2.56_nocap
Enable Adc
Start Adc
Dim Cnt , Cnt2 As Byte
Dim Value As Byte
Dim Esp As Word
Dim Val_pos , Val_neg As Word
Const Adc_pos = 2
Const Adc_neg = 3
Tccr0a = Bits(com0a1 , Com0a0 , Com0b1 , Com0b0 , Wgm01 , Wgm00)
Tccr0b = Bits(cs00)
Ocr0a = 255
Ocr0b = 0
Declare Sub Get_adc
Declare Sub Beep
'Sinal de inicio
Call Beep
Waitms 100
Call Beep
'Soft Start
Value = 0
For Value = 0 To 255
    Ocr0a = 255 - Value
    Ocr0b = Value
    Esp = 255 - Value
    Shift Esp , Left , 8
    Waitus Esp
Next Value
'Sinal de 100%
Call Beep
Stop Timer0
'Liberta a porta
Tccr0a = 0
Tccr0b = 0
Portb = Bits(ddb0)
Do
    Call Get_adc
    If Val_pos < 512 Or Val_neg < 512 Then
        Portb = Bits(ddb1)
        Waitms 500
        For Cnt2 = 1 To 4
            Call Beep
            Waitms 100
        Next Cnt2
         'No power
        Do
        Loop
    End If
    Waitms 100
Loop
Sub Get_adc
    Dim Adc_sum As Word
    Adc_sum = 0
    For Cnt2 = 0 To 63
        Adc_sum = Adc_sum + Getadc(adc_pos)
    Next Cnt2
    Shift Adc_sum , Right , 6
    Val_pos = Adc_sum
    Adc_sum = 0
    For Cnt2 = 0 To 63
        Adc_sum = Adc_sum + Getadc(adc_neg)
    Next Cnt2
    Shift Adc_sum , Right , 6
    Val_neg = 1023 - Adc_sum
End Sub
Sub Beep
    For Cnt = 0 To 10
        Speaker = 1
        Waitus 500
        Speaker = 0
        Waitus 500
    Next Cnt
End Sub
sim, está em basic...Após algumas alterações, apresento a placa (face simples) em questão:

O funcionamento é simples, depois da placa alimentada, as saídas passam rapidamente para 0V, envia um sinal sonoro de inicio; então o sinal PWM vai incrementando aos poucos o 
duty cycle, após chegar a 100%, o timer responsável pelo PWM é desligado e a porta passa ao estado normal, colocando as saídas das tensões estáveis, sem ruídos. No final é transmitido outro sinal sonoro a avisar desse estado.
As tensões +-15 são monitorizadas em tempo real via ADC, caso alguma desça abaixo de 10V aproximadamente, ambas são desligadas e é enviado novo sinal sonoro a avisar.
obs: todo o projecto foi realizado e testado a 1.5A neste fds, é provável que tenha alguns erros, entretanto tem estado a funcionar bem.
Abr. P.