Schemat elektryczny układu pokazano na rysunku 1. Sterownik zbudowano w oparciu o 8-wyprowadzeniowy mikrokontroler AT90S2343, do którego aktywnych wyprowadzeń dołączono proste układy wykonawcze i sterujące. Jako elementy wykonawcze, bezpośrednio zasilające dołączony do regulatora silnik, zastosowano cztery tranzystory MOSFET, pracujące w układzie mostka, w którego przekątnej został włączony silnik.
Pojawienie się stanu wysokiego na wyjściu PB1 układu IC2 spowoduje spolaryzowanie tranzystora T3, a w konsekwencji jednoczesne włączenie tranzystorów T1 i T6 i obrót silnika w jednym kierunku. Podobnie spolaryzowanie bazy tranzystora T4 wywoła włączenie tranzystorów T2 i T5 i obrót silnika w kierunku przeciwnym. Pozostała część układu to typowy zasilacz, dostarczający napięcia +5 VDC, niezbędnego do zasilania procesora. Elementy R10, C5 są odpowiedzialne za zerowanie procesora podczas włączania zasilania. Mikrokontroler nie wymaga zastosowania zewnętrznego rezonatora kwarcowego, gdyż ma wbudowany generator RC.
Oprogramowanie sterujące pracą regulatora napisano w języku BASCOM AVR. W głównej pętli programowej dokonywane są wstępne obliczenia wartości zmiennych decydujących o współczynniku PWM. Podczas pracy programu w pętli głównej sprawdzany jest stan styków przycisków. W zależności od tego, wykonywane są odpowiednie reakcje programu.
Sub Main
Do
Set Portb.4 'spróbuj ustawić stan wysoki na porcie b.4
If Pinb.4 = 0 Then 'jezeli przycisk S1 wcisniety
Incr Regulation_counter 'zwiększ wartość zmiennej Regulation_counter
If Change_flag = 1 Then
Regulation_counter = Regulation_counter + 1 'jeżeli układ pracuje w trybie regulacji 'precyzyjnej to dodatkowo
'zwiększ wartość tej zmiennej o 1
If Change_flag = 0 Then
Regulation_counter = Regulation_counter + 9 'jeżeli układ pracuje w trybie regulacji 'ze skokiem co 10% to dodatkowo
'zwiększ wartość tej zmiennej o 9
If Regulation_counter > 100 Then Regulation_counter = 100
Waitms 10
End If
Set Portb.2 'spróbuj ustawić stan wysoki na porcie b.2
If Pinb.2 = 0 Then 'jezeli przycisk S2 wcisniety
Decr Regulation_counter 'zmniejsz wartość zmiennej Regulation_counter
If Change_flag = 1 Then
Regulation_counter = Regulation_counter - 1 'jeżeli układ pracuje w trybie regulacji 'precyzyjnej to dodatkowo
'zmniejsz wartość tej zmiennej o 1
If Change_flag = 0 Then
Regulation_counter = Regulation_counter - 9 'jeżeli układ pracuje w trybie regulacji 'ze skokiem co 10% to dodatkowo
'zmniejsz wartość tej zmiennej o 1
If Regulation_counter < -101 Then Regulation_counter = -100
Waitms 10
End If
If Regulation_counter = 0 Then 'jezeli zmiena Regulation_counter osiągnela 'wartosc 0 to
Reset Portb.0 : Reset Portb.1 'wyłącz silnik
End If
Set Portb.3 'spróbuj ustawić stan wysoki na porcie b.3
If Pinb.3 = 0 And Regulation_flag = 1 Then 'jezeli przycisk S3 wcisniety to
Disable Interrupts
Writeeeprom Regulation_counter , 4 'zapisz w pamięci EEPROM aktualną wartość zmiennej
'REGULATION_COUNTER
Reset Portb.0 : Reset Portb.1 'wyłącz silnik
Regulation_counter = 0
Regulation_flag = 0 'ustaw wskaźnik włączenia silnika na zero
Enable Interrupts
End If
Set Portb.3 'spróbuj ustawić stan wysoki na porcie b.3
If Pinb.3 = 0 Then 'jezeli przycisk S3 wcisniety to
Disable Interrupts
Readeeprom Regulation_counter , 4 'odczytaj z pamięci EEPROM poprzednią wartość 'zmiennej REGULATION_COUNTER
Regulation_flag = 1
Enable Interrupts
Waitms 255
End If
Regulation_value = Abs(regulation_counter) 'przeliczenie zmiennej 'REGULATION_COUNTER na jej wartość bezwzględną
Regulation_value = Regulation_value * 2.5 'dostosowanie obliczonej 'wartości do pojemności 'rejestru timera0
Pwm1 = Regulation_value 'obliczenie pierwszej wartości PWM
Pwm2 = 255 - Pw1 'obliczenie drugiej wartości PWM
Loop
End Sub
Na rysunku 2 pokazano rozmieszczenie elementów na płytce drukowanej. Montaż jest typowy, a układ zmontowany ze sprawnych elementów nie wymaga żadnej regulacji i po włożeniu zaprogramowanego procesora w podstawkę działa natychmiast poprawnie. Jeżeli w momencie włączenia zasilania przytrzymamy przez chwilę przycisk S3, to układ rozpocznie pracę w trybie regulacji ze skokiem co 10%.
Podczas pracy regulatora, każde naciśnięcie przycisku S3 powoduje natychmiastowe zatrzymanie silnika i zapamiętanie zarówno jego mocy, jak i kierunku obrotów. Ponowne naciśnięcie przycisku S3 spowoduje włączenie silnika z zapamiętanymi parametrami jego pracy. Proponowany układ, głównie dzięki zastosowaniu procesora, jest banalne prosty i łatwy do wykonania, nawet dla zupełnie początkującego elektronika. Jego zalety praktyczne zostały potwierdzone podczas długotrwałego używania regulatora do sterowania obrotami miniaturowej wiertarki.
GB
- R1...R9: 1 kΩ
- R10: 47 kΩ
- R11...R14: 10 kΩ
- C1: 100 μF/10 V
- C2, C3: 100 nF
- C4: 470 μF/16 V
- C5: 4,7 μF/16 V
- IC1: 78L05
- IC2: AT90S2343 (zaprogramowany)
- T1, T2: IRF9540
- T3, T4: BC547
- T5, T6: BUZ11
- CON1, CON2: ARK2
- S1...S3: przycisk microswitch