Zacznę od zamieszczenia kodu źródłowego i schematu:
Do wyjść M+ i M- są podłączone 2 przekaźniki, w taki sposób, że po włączeniu sygnału REV odwracają one polaryzację napięcia idącego na silnik.
Drugi przekaźnik, sterowany z wyjścia BYP zwiera dreny tranzystorów wyjściowych do masy (źródła).
Wszystkie przekaźniki mają włączoną diodę zabezpieczającą równolegle z cewką.
Problem jest taki, że zwłaszcza w momencie zadziałania przekaźnika układ potrafi się zawiesić i to na różne sposoby:
- silnik działa z minimalnymi obrotami na wstecznym, w ogóle nie reaguje na sygnał z potencjometru.
- nie działa PWM, na wyjściu PB1 jest stan wysoki, ale przekaźniki reagują na potencjometr (czyli da się włączyć 100% wstecz i 100% naprzód).
- j/w ale na PB1 jest cały czas stan niski (pełne obroty silnika).
Na schemacie brakuje oznaczeń tranzystorów mocy (IRFP044) i dwudiody Schottky'ego (MBR4060) oraz L - filtry ferrytowe (wymontowane ze starej karty graficznej
), tzw. EMI Filter.
Układ steruje silnikiem DC o mocy ok 400W, zasilanie stanowi akumulator 12V/80Ah.
' ################################################
' # Control Programm for Trolling Motor Driver #
' # (C)2008 by Tomasz Orczyk #
' ################################################
$regfile = "m8def.dat"
$crystal = 8000000
'CKSEL3..0=0100 - 8MHz Internal (PWM ~30kHz)
'SUT1..0=01 - Fast rising power, delay 4,1ms
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb = Output
Set Portb.1 ' Avoids turning motor on, before first ADC loop
'Config Timer1 = FastPWM , Prescale = 1 , PWM = 8 , Compare A PWM = Clear Up , Compare B PWM = Disconnect
'Set Tccr1a.wgm10
'Set Tccr1b.wgm12
'Set Tccr1b.cs10
'Set Tccr1a.com1a1
'Set Tccr1a.com1a0
Tccr1a = &H01
Tccr1b = &H09
Rev Alias Portb.0
Pwmo Alias Portb.1
Byp Alias Portb.2
Start Adc
Dim Pwm As Integer
Dim Inval As Integer
Do
Inval = Getadc(0)
Inval = Getadc(0)
Shift Inval , Right , 2
If Inval < 16 Then ' ### Reverse w/bypass ###
Set Rev ' Reverse polarity relays on
Set Byp ' Bypass relay on
Pwm1a = 255
'Tccr1a = &H01 ' Disconnect OC1A from PINB.1
'Reset Pwmo ' Set full throttle, not needed if bypass relay installed
Tccr1a = &HC1 ' Connect OC1A to PINB.1
Elseif Inval < 112 Then ' ### Reverse w/PWM 40%-97% ###
Set Rev ' Reverse polarity relays on
Reset Byp ' Bypass relay off
Pwm = 112 - Inval ' ADCmax - ADCCurrent
Pwm = Pwm * 48 ' *= (255 - PWMmin)
Pwm = Pwm / 32 ' /= (ADCmax - ADCmin)
Pwm = Pwm + 102 ' += PWMmin
Pwm1a = Pwm ' Set desired PWM duty cycle
Tccr1a = &HC1 ' Connect OC1A to PINB.1
Elseif Inval < 142 Then ' ### Stop ###
Reset Rev ' Reverse polarity relays off, only for power consumption reasons, motor is stopped anyways
Reset Byp ' Bypass relay off
Pwm1a = 0
Tccr1a = &H01 ' Disconnect OC1A from PINB.1
Set Pwmo ' Motor full stop
Elseif Inval < 239 Then ' ### Forward w/PWM 40%-97% ###
Reset Rev ' Reverse polarity relays off
Reset Byp ' Bypass relay off
Pwm = Inval - 142 ' ADCCurrent - ADCmin
Pwm = Pwm * 48 ' *= (255 - PWMmin)
Pwm = Pwm / 32 ' /= (ADCmax - ADCmin)
Pwm = Pwm + 102 ' += PWMmin
Pwm1a = Pwm ' Set desired PWM duty cycle
Tccr1a = &HC1 ' Connect OC1A to PINB.1
Else ' ### Forward w/bypass ###
Reset Rev ' Reverse polarity relays off
Set Byp ' Bypass relay on
Pwm1a = 255
'Tccr1a = &H01 ' Disconnect OC1A from PINB.1
'Reset Pwmo ' Set full throttle, not needed if bypass relay installed
Tccr1a = &HC1 ' Connect OC1A to PINB.1
End If
Loop
EndDo wyjść M+ i M- są podłączone 2 przekaźniki, w taki sposób, że po włączeniu sygnału REV odwracają one polaryzację napięcia idącego na silnik.
Drugi przekaźnik, sterowany z wyjścia BYP zwiera dreny tranzystorów wyjściowych do masy (źródła).
Wszystkie przekaźniki mają włączoną diodę zabezpieczającą równolegle z cewką.
Problem jest taki, że zwłaszcza w momencie zadziałania przekaźnika układ potrafi się zawiesić i to na różne sposoby:
- silnik działa z minimalnymi obrotami na wstecznym, w ogóle nie reaguje na sygnał z potencjometru.
- nie działa PWM, na wyjściu PB1 jest stan wysoki, ale przekaźniki reagują na potencjometr (czyli da się włączyć 100% wstecz i 100% naprzód).
- j/w ale na PB1 jest cały czas stan niski (pełne obroty silnika).
Na schemacie brakuje oznaczeń tranzystorów mocy (IRFP044) i dwudiody Schottky'ego (MBR4060) oraz L - filtry ferrytowe (wymontowane ze starej karty graficznej
Układ steruje silnikiem DC o mocy ok 400W, zasilanie stanowi akumulator 12V/80Ah.
