Gepost door Jeroen Vreuls op donderdag 24 augustus 2023
Er verandert aan de hardware niet veel, het enige wat er moet gebeuren is een extra draad aansluiten tussen de regelaar en controller.
Ik heb de lijn even rood gemaakt, dat is de enige draad die er bij komt. De draad komt op een analoge ingang van de controller te zitten, in dit geval gebruik ik hier poort E0 voor.
De software is iets meer, maar valt ook mee. Ik ga alleen laten zien wat er aan software bijkomt, dus niet het hele programma.
Dit gaan we toevoegen. Boven in het programma komt dit erbij zodat we de analoge waarde in kunnen lezen. En daar onder de stroom waarde en de variabele van de stroom.
Declare Adin_Res = 8 ; resolutie 8 bits
Declare Adin_Tad = frc ; set RC osc
Declare Adin_Stime = 50 ; sample tijd 5
Symbol MAX_CURRENT = 26 ; Stroom instelling
Dim CURRENT As Word ; Variabele stroom
We lezen de analoge poort met 8 bit in, van 0 tot 255. De controller werkt op 5 V DC, dus de stappen zijn 5 : 255 = 0,01960 V DC per stapje. De meetweerstand op de regelaar is 0,1 Ohm (zie schema). Ik heb de maximale stroom door de motor even op 5 A gehouden. Dan krijgen we dus een spanningsval over de weerstand van 5 A X 0.1 = 0,5 V DC : 0.01960 = 26
, dat is dus de waarde die we invullen bij MAX_CURRENT
. Dit is puur theoretisch, we hebben ook nog te maken met de afwijking van de weerstand, de sporen op de print en de bedrading. Het zou dus zomaar kunnen zijn dat de motor eerder of later in overstroom gaat.
We gaan kijken wat er verder nog nodig is.
Onder de START
lus verandert er niets, dat blijft allemaal zoals het is. Waar we wel iets aan toevoegen is bij RECHTS_OM
en bij LINKS_OM
, daar voegen we dit toe:
CURRENT = ADIn 5
If CURRENT > MAX_CURRENT Then
GoSub OVERSTROOM
EndIf
Hier wordt de waarde CURRENT
die binnenkomt op de analoge ingang vergeleken met de MAX_CURRENT
(in dit geval 26) en als die waarde overschreden wordt dan springt het programma naar de OVERSTROOM
lus. Deze lus komt onder FAILSAFE
.
OVERSTROOM:
VAR1 = PulsIn PORTA.5 , 1
WAARDE = (VAR1-243)*1.20
VRIJGAVE = 0
HPWM 1,0,0
HPWM 2,0,0
FUNCTIE_LED = 1
DelayMS 50
FUNCTIE_LED = 0
DelayMS 50
FUNCTIE_LED = 1
DelayMS 50
FUNCTIE_LED = 0
DelayMS 500
If WAARDE > 120 Then
If WAARDE < 138 Then
Cls
Return
EndIf
EndIf
GoTo OVERSTROOM
End
Bij OVERSTROOM
worden de beide HPWM
signalen en het vrijgave signaal uit gezet, ook wordt er naar de signaal waarde van de zender gekeken. Als het signaal tussen de 120 en 138 zit (stuurknuppel in de middenstand) dan wordt er uit de OVERSTROOM
lus gesprongen naar waar de overstroom gedetecteerd is. Dat kan naar RECHTS_OM
of naar LINKS_OM
zijn, als in één van de twee lussen de middenstand van de knuppel gedetecteerd wordt, spring het programma naar de START
lus. Op deze manier wordt dus de stroom door de motor gemeten. De waarde die bij MAX_CURRENT
ingevuld wordt is dus afhankelijk van de grootte van de aangesloten motor. Als de motor bijvoorbeeld bij 6 A uit moet schakelen wordt de waarde 6 X 0.1 = 0.6 : 0.01960 = 31
.
Als het programma in de overstroom lus zit, knippert de functie LED twee maal snel en wacht dan even om daarna weer twee maal snel te knipperen. Zo kun je dus zien dat de motor teveel stroom getrokken heeft.
Ik heb nog even een meting gedaan om te kijken of de ingegeven stroom waarde een beetje klopt.
Links onderin zie je wat de motor vrij draaiend opneemt, dit is zowel links als rechtsom. Naarmate je de knuppel sneller heen en weer haalt loopt de stroom iets op naar ± 2 A. De hoge waarde die je ziet is de stall current, die loopt op naar zo'n 4 A voor dat de motor uitschakelt. Als de motor normaal onder belasting draait schakelt deze uit rond de 4,5 A. Dat is dus iets lager dan wat we berekend hebben en dat komt door de vrij lange bedrading aan de regelaar en waarschijnlijk de print sporen. Dus de MAX_CURRENT
zou iets hoger kunnen, maar de motor levert een behoorlijk koppel, hij is niet met de hand tegen te houden.
Dit is trouwens de gebruikte motor voor de test:
Heb het ding ooit uit een elektrische step gehaald.