• No results found

Realisatie van ontwerp

Figuur 17 Overzicht van Project MLX81300 met daarin de relevante bestanden en hun functies.

In figuur 17 is te zien hoe de relevante bestanden zijn opgedeeld. Deze bestanden bevinden zich in Project MLX81300. Alle vijf de bestanden bevatten hun bijhorende functies. De werking van de meest relevante functies wordt hieronder uitgelegd. De bijhorende C-code is opgenomen in de bijlage. Het bestand “LIN_Communication.c”

staat er alleen bij om duidelijk te maken waar de communicatie met de computer zich bevindt in het project.

4.1 Six-step aansturing

Voor de Six-step aansturing zijn onderstaande functies nodig. Deze beschrijvingen bevatten alleen de direct relevante acties.

MotorDriver.c Tabel met driverconfiguratie

Dit is een integer constanten tabel genaamd space_vector_table. Deze bevat voor alle zes stappen de juiste configuratie(waarde).

MotorDriver.c Instelling Opstarttabel

In deze tabel staan de snelheden voor het openloop opstarten van het type motor.

19 MotorDriver.c Functie MotorDriverInit()

Om de motor aan te sturen wordt er een waarde gegeven voor de hoeveelheid stroom en de initiele snelheid. Timer1 wordt ingesteld en aangezet. Het PWM wordt ingesteld en de I/O worden ingesteld.

MotorDriver.c Functie MotorDriverStart()

De commutatieperiode krijgt de initiele snelheid. Timer1 krijgt de juiste

commutatiewaarde en wordt gestart. De bedieningsmodus wordt ingesteld. de motor wordt opgestart met de eerste waarde uit de opstart tabel. Iedere commutatie krijgt de motor een nieuwe waarde uit de opstart tabel tot de ingestelde snelheid is bereikt.

MotorDriver.c Functie MotorDriverStop()

De motordriver en Timer1 worden uitgezet doormiddel van configuratie. Ook worden de I/O goed ingesteld.

MotorDriver.c Interrupt routine voor commutatie TMR1_Commutation_Interrupt() De draairichting wordt gecontroleerd en aan de hand hiervan wordt de actuele positie bepaald. Indien de motor de gewenste positie heeft bereikt, wordt deze uitgezet.

De motordriver wordt geladen met de volgende waarde uit de space_vector_table.

De ingestelde hoeveelheid stroom wordt omgezet naar de PWM waarde. Er wordt gecontroleerd of bStepperModeA is ingesteld en of er één electrische rotatie heeft plaats gevonden. De huidige commutatie tijd wordt vergeleken met de ingestelde commutatietijd aan de hand hiervan wordt de commutatietijd aangepast. Wanneer de huidige commutatietijd kleiner of gelijk ia aan de ingestelde commutatietijd wordt er overgeschakeld naar de volgende modus

4.2 BEMF meetmethode

Om de BEMF te meten zijn onderstaande functies nodig. Deze beschrijvingen bevatten alleen de direct relevante acties.

ADC.c Functie ADC_Init()

Deze functie stelt de ingebouwde beveiliging van de chip in. ADC_IT wordt ingesteld met een hogere prioriteit dan TMR_1_Commutation_Interrupt() zodat de ADC

interrupt nooit kan worden onderbroken behalve door interrupts met een hogere prioriteit zoals errors. Ten slotte wordt de interrupt aangezet.

ADC.c Functie ADC_Stop()

Hier wordt gekeken of er geen conversies meer bezig zijn. Zijn er geen conversies meer bezig, dan wacht de ADC maximaal 3 PWM cyclussen en kijkt niet meer naar nieuwe waardes totdat de conversie gedaan is. Vervolgens wordt het ADC register op 0 gezet.

ADC.c Interrupt routine voor ADC meting ADC_IT()

Er wordt gekeken in welke van de zes stappen het programma zich bevindt zodat de juiste fasewaarde van het BEMF signaal aan het fase voltage wordt gekoppeld.

20

4.3 Van feed-forward naar feed-back

Deze beschrijving bevat alleen de direct relevante acties. Meer informatie is terug te vinden in de bijlagen.

Conditionering van het signaal TMR1_Commutation_Interrupt()

Wanneer de motor dreigt stil te vallen, omdat er te weinig stroom in wordt gestopt voor de huidige snelheid, wordt de PWM snelheid verhoogd. Wanneer er te veel stroom in wordt gestopt, waardoor de flybackpuls te groot wordt, wordt de PWM snelheid verlaagd. Indien de flybackpuls lengte voldoet aan de criteria wordt de controlmode ingesteld op bEmfMode.

4.4 Zero-Crossing meting

Voor de Zero-Crossing zijn onderstaande functies nodig. Deze beschrijvingen bevatten alleen de direct relevante acties..

ADC.c Functie ADC_IT()

Er wordt gecontroleerd of de periode wanneer er niet naar de ADC wordt gekeken al voorbij is. Vervolgens wordt er gekeken of het signaal een rising of falling edge betreft en welke richting de motor op draait. Er wordt gekeken of het BEMF signaal voeldoet aan de thresshold. Wanneer dit waar is wordt de tijd uit timer1 gekopieerd.

Met deze waarde wordt de nieuwe commutatietijd berekend. Om de thresshold te controleren wordt de voedingsspanning gemeten. Deze thresshold waarde wordt gebruikt bij de volgende commutatie.

4.5 Variabel programma

Het programma is in zijn geheel variabel en modulair dit is te herleiden uit de structuur van het project en de opbouw van de functies. De variabelen hebben een logische benaming.

MotorDriver.h

Dit bestand bevat alle parameters die benodigd zijn om het programma in te stellen voor een bepaald type motor.

4.6 PI(D) regelaar

Voor de PI regelaar zijn onderstaande functies nodig. Deze beschrijvingen bevatten alleen de direct relevante acties.

PID_Control.c Functie PID_Init()

In deze functie worden de waardes van de regelaar op nul gezet.

PID_Control.c Functie PID_Control()

Hier wordt de error van het systeem berekend en wordt de PI correctie factor

berekend. Ook wordt deze factor omgezet naar de PWM correctiefactor. Als laatste wordt de nieuwe waarde voor het PWM signaal geschreven.

21