Stap 6: Functies waarmee mijn DC-motoren
INIT_DC()
initialiseert de PCA9635 DC motor signaalgenerator, wordt de plicht cyclus pinnen ingesteld op 0%, en de richting pin zet op 0. De twee nullen op de H brug controle input pinnen laat de motor undriven en gratis spinnen.
DC_drivers()
Hiermee wijzigt u de uitvoer stuurprogramma's staat. Er zijn vier modi, de uitvoer-stuurprogramma's kunnen werken in:
00 - LED driver x is uitgeschakeld (power-up van standaardstatus).
01 - LED driver x is volledig op (individuele helderheid en groep dimmen/knipperen niet gecontroleerd).
10 - LED driver x individuele helderheid kan worden aangestuurd via haar PWMx register.
11 - LED driver x individuele helderheid en groep dimmen/knipperen kan worden gecontroleerd door middel van het register van de PWMx en de GRPPWM registreert.
De wijze van Iederebestuurder van de uitvoer wordt opgeslagen op twee bits. Vier stuurprogramma Staten zijn gegroepeerd in één register, het register heet de driver_id-parameter van de functie DC_drivers. De tweede parameter is driver_mode, heeft de gebruiker een 8 bit om waarde te bieden met de gezochte uitvoermodus voor stuurprogramma verschoven naar zijn plaats.
Bijvoorbeeld, als er is behoefte aan een switch van "geheel aan" naar "PWM gecontroleerd" modus voor uitvoer LED1, bits 3:2 van LEDOUT0 moet worden veranderd van 01 tot en met 10. Dit gebeurt in de standaard IMP Motor Control board code in de functie DC_command().
Hier is een voorbeeld van dit:
...
Temp = I2C_ReadByte (PCA9635, LEDOUT0); Lees de inhoud van de registers
temp = temp & 0xF3; verwijderen van de bits gevonden op bitvelden 3:2
temp temp = | 0x08; instellen van de bits 3:2 tot en met 10
DC_drivers (0, temp); Bel DC_drivers() met de twee parameters, LEDOUTx-in ons geval is x 0, en de bijgewerkte registreren waarde
...
Het lezen van het register eerder tot de verandering van de gegevens nodig, is omdat de andere bits in het register kunnen effect hebben op de andere uitgangen die we gebruiken. Om dit te vermijden, heb ik het eerst, veranderde de gebruikte twee bits, en schreef het terug opnieuw gelezen.
DC_command()
de functie wordt gebruikt voor het wijzigen van de snelheid en richting van de geselecteerde DC-motor. De eerste parameter id vertelt de functie, die DC uitgang te wijzigen met de volgende twee parameters: richting en duty_cycle. De laatste twee parameters betekenis is eenvoudig. De taakcyclus is beperkt tot 99,6%, elke waarde groter zal resulteren in het wijzigen van het pulserend sproeien tot 100% door het veranderen van de uitvoer stuurprogramma staat "volledig op" modus.
Verschillende toepassingen verschillende belasting zullen hebben voor de motoren, om achter dit, een helling-up algoritme kan worden gebruikt om de taakcyclus geleidelijk te verhogen.
SleepMode()
Maakt gebruik van de slaapstand-modus van de DRV8835. Aangezien deze H-brug weinig stroom uit de logica-levering trekt (typisch 450 µA, maximaal 2 mA), het kan worden gevoed rechtstreeks vanuit een pin PCA9685, die kan de bron een maximum van 10 mA. Dit is handig als een van de bruggen is niet gebruikt, om de slaapstand te zetten zal het minimaliseren van de huidige getrokken door de levering van de belasting tot ~ 10 nA. De eerste parameter "brug" kan selecteert u een van de twee bruggen aan boord, en "AB" of "CD" als waarde. Deze uitschakelen de brug gemarkeerd Evenzo zichtbaar op het bord-zeefdruk. De tweede parameter is actieve laag, schakelt u of slaapstand kunnen overschakelen op de brug geselecteerd door de eerste functieparameter.