Al giorno d'oggi, gli appassionati sono molto interessati a controllare la DC senza spazzole (BLDC)
rispetto al motore DC tradizionale, le prestazioni del motore sono migliorate, anche l'efficienza energetica è migliorata, ma è più difficile da usare. molti prodotti fuori dagli scaffali .
A tale scopo esistono
Ad esempio, ci sono molti piccoli controller BLDC che funzionano molto bene per gli aerei RC.
Per coloro che vogliono esaminare il controllo del BLDC in modo più approfondito, ci sono anche molti micro-controller diversi e altri hardware elettronici per gli utenti industriali, che di solito hanno un'ottima documentazione.
Finora non ho trovato alcuna descrizione completa di come utilizzare il micro-controller Arduino per il controllo BLDC.
Inoltre, se sei interessato a fare frenatura rigenerativa o a utilizzare un BLDC per la produzione di energia, non ho trovato molti prodotti adatti per l'uso con piccoli motori, né ho scoperto come controllare il generatore di 3 fasi.
Questa struttura era originariamente in una storia sul
calcolo del tempo reale, continuo a farlo dopo la fine del corso.
L'idea del progetto è quella di mostrare un modello proporzionale di un'auto ibrida con accumulo di energia del volano e frenata rigenerativa.
Il motore utilizzato nel progetto è un piccolo BLDCS pulito dal disco rigido del computer danneggiato.
Questo manuale descrive come utilizzare il micro-controller Arduino e la Hall
colpisce i sensori di posizione nelle modalità di frenatura di guida e rigenerative.
Si prega di notare che la visita di Oscillisoft è molto utile, se non essenziale, per completare questo progetto.
Se non sei in grado di accedere all'ambito, ho aggiunto alcuni suggerimenti su come farlo senza l'ambito (passaggio 5).
Una cosa che questo progetto non dovrebbe includere in nessun controllo motorio effettivo è qualsiasi funzione di sicurezza come la protezione eccessiva.
In effetti, la cosa peggiore è che bruci il motore HD.
Tuttavia, l'implementazione di una protezione eccessiva con l'hardware attuale non è difficile, e forse lo farò ad un certo punto.
Se stai cercando di controllare un motore più grande, aggiungi una protezione sulla corrente per proteggere il tuo motore e la tua sicurezza.
Voglio provare a usare questo controller con un motore più grande che può fare un lavoro \ 'reale \' ma non ho ancora quello giusto.
Ho notato che eBay ha venduto un'auto da 86 W per circa $ 40.
Sembra un buon candidato.
C'è anche un sito Web RC chiamato \ 'Gobrushless \' che vende kit che assemblano il loro BLDC.
Questi non sono troppo costosi e vale la pena costruirne uno.
Si prega di notare che non esiste un sensore Hall per il motore su questo sito Web. Accidenti!
Scrivere questa struttura è un grande lavoro.
Spero che tu lo trovi utile, per favore fai i tuoi commenti e suggerimenti.
Multimetro digitale (DMM)-
Se il tuo DMM ha un oscilloscopio del misuratore di frequenza (
è meglio avere almeno 2 canali)
driver T8 Torx (
è necessario uno di loro per aprire qualsiasi disco rigido).
C'è un buon negozio di ferramenta.
Workshop e prototipo rapido (
questi sono molto utili, ma penso che questo progetto possa essere fatto senza di loro).
Materiale BLDC Anello magnetico motore dal disco rigido del computer (
metà del motore)
da un altro driveveral rigido (3-6)
c'è un secondo piccolo motore nel disco d'argento sul disco rigido (cc spazzolato ok)
elastico o preferibilmente)
il moto DC senza spazzola con una maniglia di rottura del pane a rottura del moto e una maniglia di rottura motor OHMST Micro Circuit L6234 Driver del motore a tre fasi IC Due condensatori da 100 UF One 10 nf condensatore uno 220 NF condensatore un condensatore UF uno un condensatore 100 UF a tre diodi in ricezione uno 2.
honeywell ss411a bipolare hall-5 fusibile 1 fusibile 3 nota 3
nota: mike anton ha venduto un prodotto in sostituzione del prodotto di alimentazione e di alimentazione di alimentazione. (
È controllato usando l'induzione potenziale back).
In questi due collegamenti sono disponibili specifiche e informazioni sugli appalti: se hai intenzione di fare questo progetto, ti suggerisco di prenderti il tempo per capire a fondo come funziona il BLDC e i controlli.
Ci sono un gran numero di riferimenti online (
vedi sotto per alcuni suggerimenti).
Tuttavia, includo alcuni grafici e tabelle nel mio progetto che dovrebbero aiutarti a capire.
Here is a list of the concepts that I think are most important to understanding this project: MOSFET transistors 3-phase half-bridge 6-
3-step reduction of sentence
Pulse Width Modulation of phase motor (PWM)Hall-
Microchip AVR443: sensors-general reference DC motor Basic Principles for Digital position sensors
Control of three-phase brushless DC motor based on atmelbrusless DC motor control
Phase BLDC motor control of the Flying Star Hall Sensor, un buon video di pulizia del motore del disco rigido, ma l'autore sembra eseguire il motore come motore a steping e come motore a passo di passo. Una pagina Web di riferimento più specifica per il BLDC sul motore del motore L6234 IC, inclusi schede tecniche, note sull'applicazione e informazioni di acquisto.
Campione gratuito per il motore senza spazzole PM Drive per applicazioni ibride per veicoli elettrici.
Questo è l'unico documento che ho trovato che descrive l'ordine del cambiamento di fase di frenatura rigenerativa.
Questo documento, la frenata rigenerativa nei veicoli elettrici, è utile, ho preso in prestito alcuni numeri da esso, ma penso che descriva in modo errato come funziona la rigenerazione.
Ho realizzato questo progetto con il motore di trasmissione su disco riciclato perché era facile da passare attraverso e mi piace usare un piccolo motore a bassa tensione per apprendere il cavo controllato da BLDC e non causare problemi di sicurezza.
Inoltre, la configurazione del magnete del sensore Hall diventa molto semplice usando l'anello magnetico (rotore)
dal secondo di questi motori (vedere il passaggio 4).
Se non vuoi andare a tutta la seccatura dell'installazione e della calibrazione del sensore Hall (passaggi 5-7)
so che ci sono almeno alcuni motori di azionamento CD/DVD integrati in un sensore di Hall.
Al fine di fornire un po 'di inerzia di svolta al motore e dare loro un po' di carico, ho messo 5 dischi rigidi sul motore, incollati delicatamente insieme a una piccola colla forte e incollato al motore (
questo ha reso il volano nel mio progetto originale).
Se hai intenzione di rimuovere il motore dal disco rigido, è necessaria un azionamento TORX T8 per svitare l'alloggiamento (
di solito ci sono due viti nascoste dietro il bastone nell'etichetta centrale)
e viti interne che tengono il motore in posizione.
È inoltre necessario rimuovere il lettore Head (
Sound Circle Executive)
In questo modo puoi eliminare il disco di memoria per raggiungere il motore.
Inoltre, avrai bisogno di un secondo motore dello stesso disco rigido per rimuovere il rotore da quel motore (
c'è un magnete all'interno).
Per smontare il motore, ho afferrato il rotore (in alto)
una morsa del motore e leralo sullo statore (in basso)
i due cacciaviti sono distanti a 180 gradi.
Non è facile tenere il motore su una coppia abbastanza stretta senza deformazione.
Potresti voler costruire un
blocco V-blocco utilizzato per questo scopo.
Ho perforato un foro nell'anello magnetico sul tornio in modo che si adatti comodamente sulla parte superiore del motore.
Se non si è in grado di utilizzare il tornio, è possibile riparare il rotore invertito sul motore con una colla forte.
Le immagini 2 e 3 sotto mostrano l'interno di uno dei motori che ho smontato.
Nel primo tempo (il rotore) ci sono 8 poli (
magnete avvolto in plastica).
Nel secondo tempo (lo statore)
ci sono 12 slot (avvolgimenti).
Ognuna delle tre fasi del motore ha 4 slot in serie.
Alcuni motori HD hanno tre contatti nella parte inferiore, un contatto per fase e l'altro è il rubinetto centrale del motore (
dove si incontrano tre fasi).
In questo progetto, non è richiesto alcun tocco centrale, ma può tornare utile nel controllo senza sensori (
spero di rilasciare una nota sul controllo senza sensori un giorno).
Se il tuo motore ha quattro contatti, puoi identificare la fase con Ohmetro.
La resistenza tra il rubinetto centrale e la fase è la metà della resistenza tra due fasi.
La maggior parte della letteratura sui motori BLDC si occupa di quelli con una forma d'onda potenziale posteriore a forma di scala, ma il motore del disco rigido sembra avere un potenziale posteriore che sembra un seno (vedi sotto).
Per quanto ne so, guidare un motore a onda sinusoidale con un'onda sinusoidale PWM funziona bene, sebbene l'efficienza possa cadere in qualche modo. Come tutti i motori BLDC, questo è composto da
a metà transistor trifase (
ponte
vedi 2a foto di seguito).
Uso l'IC realizzato da ST Micro (L6234)
per il ponte, noto anche come driver del motore.
La connessione elettrica di L6234 è mostrata nel passaggio 8.
La terza foto sotto mostra un diagramma schematico del driver del motore e delle tre fasi del motore.
Affinché il motore funzioni in senso orario, l'interruttore verrà effettuato nel seguente ordine (
la prima lettera è il transistor superiore e la seconda lettera è il transistor inferiore)
: Passaggio 1 2 3 4 5 6 6
. motori.
Pertanto, la velocità di rotazione di ciascun motore si verifica quattro volte.
Le due sequenze sembrano essere le stesse, ma non sono le stesse perché per
la sequenza di 6 passaggi, per CW, la direzione corrente attraverso la fase è una direzione e per CCW, la direzione attuale è opposta.
Puoi vederlo da solo applicando la tensione della batteria o dell'alimentazione a entrambe le fasi del motore.
Se si applica la tensione, il motore si muoverà un po 'in una direzione e si fermerà.
Se puoi cambiare rapidamente la tensione sulla fase in una delle sequenze sopra, è possibile ruotare manualmente il motore.
Transistor e microcontrollori completano tutti questi interruttori molto rapidamente, cambiando centinaia di volte al secondo quando il motore funziona ad alta velocità.
Inoltre, si prega di notare che se la tensione viene applicata su entrambe le fasi, il motore si muove un po 'e quindi si ferma.
Questo perché la coppia è zero.
Puoi vederlo nella quarta foto qui sotto, che mostra il potenziale posteriore di una coppia di fasi motori.
Questa è un'onda sinusoidale.
Quando l'onda attraversa l'
albero X, la coppia fornita da questa fase è zero. Nella
sequenza di cambio di fase BLDC a sei fasi che non è mai avvenuta.
Prima che la coppia di una fase particolare diventi bassa, la potenza viene passata a un'altra combinazione di fase.
I motori BLDC più grandi sono generalmente fabbricati da sensori di sala all'interno del motore.
Se hai un tale motore, puoi saltare questo passaggio.
Inoltre, so che ci sono almeno alcuni motori di azionamento CD/DVD incorporati in un sensore già in sala.
Quando il motore ruota, vengono utilizzati tre sensori di sala per il rilevamento della posizione, quindi il cambiamento di fase viene eseguito nel momento giusto.
Il mio motore HD funziona fino a 9000 giri / min.
Poiché ci sono 24 cambiamenti per ruota, a 9000 giri / min, la macchina viene modificata ogni 280 microsecondi.
Il micro-controller Arduino funziona a 16 MHz, quindi ogni ciclo di clock è 06 microsecondi.
Non so quanti cicli di clock sono necessari per eseguire una riduzione della frase, ma anche se sono necessari 100 cicli di clock, cioè ci vogliono 5 microsecondi per ogni riduzione della frase.
I motori HD non hanno sensori di hall, quindi è necessario installarli all'esterno del motore.
Il sensore deve essere fissato rispetto alla rotazione del motore ed esposto a una serie di poli coerenti con la rotazione del motore.
La mia soluzione è quella di rimuovere l'anello magnetico dallo stesso motore e installarlo a testa in giù sul motore per essere controllato.
Ho quindi installato tre sensori di sala sopra questo anello magnetico, a 30 gradi l'uno dall'altro sull'albero del motore (
rotazione del motore elettrico a 120 gradi).
Il mio supporto per sensore Hall è costituito da un semplice supporto costituito da tre parti di alluminio elaborate da me e tre parti di plastica realizzate su un prototipo veloce.
Se non si dispone di questi strumenti, non dovrebbe essere difficile trovare un altro modo per indicare la posizione.
La creazione di parentesi per i sensori di Hall sarà più impegnativa.
Questo è un modo possibile di funzionare: 1.
Trova un vassoio di plastica delle giuste dimensioni e puoi accuratamente resina epossidica del sensore della sala. 2.
Un modello viene stampato sulla carta, che ha lo stesso cerchio del raggio dell'anello magnetico, e i tre segni sono di distanza di 15 gradi 3.
Incolla il modello sul disco e quindi usa il modello come guida per posizionare attentamente l'epossidico del sensore della sala in posizione.
Ora che i sensori di Hall sono installati sul motore, collegarli al circuito mostrato di seguito e testarli utilizzando un DMM o un oscilloscopio per assicurarsi che l'uscita si allontani sempre più quando il motore ruota.
Eseguo questi sensori sotto 5 V usando l'uscita 5 V di Arduino.
Il sensore Hall è alto o basso in uscita (1 o 0)
dipende dal fatto che sentano l'Antartico o l'Artico.
Poiché sono di distanza di 15 gradi, i magneti ruotano sotto di loro e cambiano la polarità ogni 45 gradi, questi tre sensori non saranno mai alti o bassi allo stesso tempo.
Quando il motore ruota, l'uscita del sensore è 6-
Il modello di passaggio mostrato nella tabella seguente.
Il sensore deve essere allineato con il movimento del motore in modo che uno dei tre sensori cambi esattamente nella posizione di cambio della fase del motore.
In questo caso, il bordo di salita del primo sensore Hall (H1)
dovrebbe essere coerente con l'apertura della combinazione C (alta) e B (basso).
Ciò equivale a accendere i transistor 3 e 5 nel circuito del ponte.
Allineo il sensore con il magnete con un oscilloscopio.
Per fare ciò, devo usare tre canali di portata.
Ruoto il motore collegandomi alla cinghia del secondo motore e misuro il potenziale posteriore tra le combinazioni a due fasi (
A e B, A e C)
Questo è due seno.
Come le onde nell'immagine in basso,
quindi guarda il segnale del sensore della sala 2 sul canale 3 dell'oscilloscopio.
Il supporto del sensore Hall viene girato fino a quando il bordo di salita del sensore della sala è completamente allineato con il punto in cui dovrebbe essere eseguito il cambiamento di fase (vedi sotto).
Ora mi rendo conto che ci sono solo due canali per fare la stessa calibrazione.
Se il BEMF della combinazione di fase B-
usando C, il bordo di salita di H2 sarà correlato alla curva BC.
Il motivo per cui il cambiamento di fase dovrebbe essere effettuato qui è quello di mantenere sempre la coppia del motore il più elevato possibile.
Il potenziale posteriore è proporzionale alla coppia e noterai che ogni cambiamento di fase si verifica quando il potenziale posteriore passa al di sotto della curva della fase successiva.
Pertanto, la coppia effettiva è costituita dalla parte più alta di ciascuna combinazione di fase.
Se non riesci ad accedere all'ambito, ecco la mia idea di allineamento.
Questo è in realtà un esercizio interessante per chiunque voglia sapere come funziona il motore BLDC.
Se la fase del motore A è collegata (positiva) e B (negativa)
all'alimentazione e accendi l'alimentazione, il motore ruoterà un po 'e si fermerà.
Quindi, se il cavo di potenza negativo viene spostato nella fase C e la potenza viene attivata, il motore si gira ulteriormente e si fermerà.
La parte successiva della sequenza sarà quella di spostare il vantaggio positivo alla fase B, ecc.
Quando lo fai, il motore si ferma sempre dove la coppia è zero, che corrisponde a un luogo in cui il grafico passa attraverso l'asse X sul grafico.
Si noti che il punto zero della combinazione di terza fase corrisponde alla posizione di cambio di fase delle prime due combinazioni.
Pertanto, la posizione di coppia zero di B-
la combinazione C è dove si desidera posizionare il bordo di salita di H2.
Segna questa posizione con segni fine o pale affilate, quindi regola il supporto del sensore della sala usando DMM fino a quando l'uscita di H2 è esattamente più in alto su questo marchio.
Anche se ti devia un po 'dal tuo programma scolastico, il motore dovrebbe funzionare bene.
La fase di tre motori riceverà energia dal driver del motore trifase L6234.
Ho scoperto che questo è un buon prodotto che può sopportare la prova del tempo.
Esistono molti modi per friggere accidentalmente i tuoi componenti quando si utilizzano elettronica di alimentazione, non sono un ingegnere elettrico e non so sempre cosa sta succedendo.
Nel mio programma scolastico, abbiamo realizzato la nostra
produzione a mezza ponte a 3 fasi di 6 transistor MOSFET e 6 diodi.
L'abbiamo usato sull'HIP4086 dell'altro trarsilico, ma abbiamo molti problemi con questa configurazione
abbiamo bruciato un mucchio di transistor e chip.
Corro L6234 (
quindi il motore) a 12V.
La L6234 ha un insieme insolito di input per controllare un mezzo ponte di 6 transistor.
Non tutti i transistor hanno un input, ma un
input abilitato (EN) per ciascuna delle tre fasi, e quindi un altro input (in)
seleziona quale transistor nella fase aperta (superiore o inferiore).
Ad esempio, attivare il transistor 1 (superiore) e 6 (inferiore)
sia EN1 che EN3 sono alti (
EN2 bassi per mantenere lo stadio chiuso)
in1 alto, in3 basso.
Questo rende la combinazione di fase-C.
While the L6234 application note suggested applying the PWM used to control the speed of the motor to the IN pin, I decided to do it on the EN pin because, at that time, I think it would be \'strange\' to turn on the upper and lower transistors of the phase alternately \'.
In fact, it seems that there is nothing wrong with turning on the low transistors of both phases at the same time, because they have the same potential, so neither of them passes through the CONTROLLO
.
Quindi, per versioni più grandi, fare riferimento alla documentazione per L6234.
Nota: Mike Anton ha realizzato il PCB per L6234, che (credo)
sostituirà questa traccia e ti salverà il lavoro di assemblaggio.
Vedi questi collegamenti per le specifiche e le informazioni di acquisto: non ho trovato molto su 3-
Descriverò la mia comprensione di come funziona.
Si prega di notare che non sono un ingegnere elettrico e apprezzeremmo qualsiasi correzione della mia spiegazione.
Durante la guida, il sistema di controllo invia la corrente in tre fasi del motore in modo da massimizzare la coppia.
Nella frenata rigenerativa, il sistema di controllo massimizza anche la coppia, ma questa volta è una coppia negativa che fa rallentare il motore mandando la corrente alla batteria.
Il metodo di frenatura rigenerativo che ho usato proveniva da un documento del Oakridge National Laboratory negli Stati Uniti. S. Govt.
Un laboratorio che fa molte ricerche per i motori automobilistici.
La tabella seguente proviene da un altro documento che aiuta a illustrare come funziona (
tuttavia, penso che la spiegazione fornita in questo secondo documento sia parzialmente errata).
Tieni presente che quando il motore ruota, la tensione del BEMF nella fase del motore fluttua su e giù.
Nella figura, mostra il momento in cui il BEMF è ricco di stadio B e basso nel palco.
In questo caso, è possibile che la corrente fluisca da B a.
Fondamentalmente per la frenata rigenerativa, i transistor di fascia bassa si accendono e si spegne rapidamente (
migliaia di interruttori PWM al secondo).
Quando l'interruttore a transistor di fascia alta viene disattivato;
Quando il transistor basso è acceso, la corrente scorre come mostrato nella prima immagine.
In termini di elettronica di alimentazione, il circuito è come un dispositivo chiamato convertitore Boost, in cui l'energia è immagazzinata nella fase del motore (
Wikipedia ha un buon articolo che spiega come funziona il convertitore Boost).
Questa energia viene rilasciata quando il transistor di fascia bassa viene spento, ma a una tensione più elevata, la corrente scorre immediatamente attraverso il diodo \ 'anti-eccitazione \' accanto a ciascun transistor e poi ritorna alla batteria.
Il diodo impedisce alla corrente di fluire dalla batteria al motore.
Allo stesso tempo, la corrente in questa direzione (
contrariamente alla guida)
interagisce con l'anello del magnete per produrre una coppia negativa che rallenta il motore verso il basso.
Il transistor a basso lato utilizza un interruttore PWM e il ciclo di lavoro di PWM controlla la quantità di frenata.
Durante la guida, la commutazione del motore passa da una combinazione a quella successiva a tempo debito per mantenere la coppia più alta possibile.
La commutazione del freno rigenerativo è molto simile perché una certa modalità di commutazione fa sì che il motore produca il maggior numero possibile di coppia negativa.
Se guardi il video nel primo passaggio, puoi vedere che il freno rigenerativo funziona bene, ma non funziona bene.
Penso che il motivo principale sia che il motore del disco rigido che utilizzo sia un motore di coppia molto basso, quindi non produce molto BEMF tranne che alla massima velocità.
A una velocità inferiore, c'è pochissima frenata rigenerativa (se presente).
Inoltre, il mio sistema funziona a una tensione relativamente bassa (12 V)
inoltre, poiché ogni percorso attraverso il diodo anti-eccitazione riduce la tensione di diversi volt, ciò riduce notevolmente l'efficienza.
Uso i normali diodi del raddrizzatore e potrei ottenere prestazioni migliori se utilizzo alcuni diodi speciali con caduta di tensione inferiore.
Di seguito è riportato un elenco di input e output su Arduino.
Includi anche grafici e foto della mia tavola. 2-
Digital Entry-Hall 1
120 K Resistenza di GND 3
Digital Entry Hall 2
120 K Resistenza di GND 4
Hall 3 Ingresso digitale-
120 K Resistenza di GND 5
1 Output digitale in serie con 400 ohm Resistore 6
2 uscite digitali in serie con 400 output digitali con 400 output digitali di resistenza digitale
con resistenza digitale a 400 output digitali di resistenza digitale con resistenza digitale a 400
output digitali con resistenza digitale a 400 output digitali con resistenza digitale a 400
output digitali con resistenza digitale a ET Resistenza da 400 ohm 11-
L'uscita digitale EN 3 è in serie con un resistore da 400 ohm, potenziometro da 100 K ohm, con 5 V e GND collegati su entrambe le estremità e il pin analogico 0 collegato al centro.
Questo potenziometro viene utilizzato per controllare la velocità del motore e il volume di frenata.
L'alimentazione a 5 V viene anche utilizzata per eseguire sensori di sala (vedere il passaggio 5).
Ecco l'intero programma che ho scritto per Ardjuino, che include commenti:/* BLDC_CONGROLLER 3. 1.
1* 3 di David Glazer.
La serie X è ST L6234
Driver del motore a 3 fasi IC * Motore di trasmissione disco in campo * con frenata rigenerativa * velocità del motore e frenata controllata da un singolo potenziometro * posizione motoria da tre aletti-
sensore * Arduino riceve un'uscita da 32 khz (pin 2,3,4)
* e convertire la loro combinazione a 6 diversi gradini di elaborazione in pin 9, 10 a 32 khz (pin 2,3,4) * e convertire la loro combinazione a 6 diversi gradini di elaborazione di fasi su pin 9, 10 khz a 32 khz (pin 2,3,4) * *
Corrispondente a EN 1,2, 3 * 3 DO sui pin 5,6, 7, rispettivamente (in 1,2,3)
Collegare la simulazione in 0 al potenziometro per cambiare il ciclo di lavoro PWM e cambiare * tra la guida e la frenata rigenerativa per
*
la
preparazione
* Allstate1
;
() {pinMode (2, input);
/Hall 1 pinMode (3, ingresso);
/Hall 2 pinMode (4, ingresso);
/L6234 Hall 3/uscita del driver del motore PinMode (5, uscita);
/In 1 pinMode (6, output);
/In 2 pinMode (7, output);
/In 3 pinMode (9, output);
/En 1 pinMode (10, output);
/En 2 pinMode (11, output);
/EN 3/seriale. Inizia (9600);
Se utilizzerai una connessione seriale, ti preghiamo di rimuovere questa riga.
Il comando a filo alla fine del programma.
/* Imposta la frequenza PWM sui pin 9, 10 e 11/imposta PWM su 32 kHz per pin 9, 10/prima cancella tutti e tre i bit pre-divider: int prescalerval = 0x07;
/Crea una variabile chiamata precalerval e impostala su uguale al numero binario \ '00000111 \' TCCR1B & = ~ precaler
/e il valore in TCCR0B con un numero binario di \ '11111000 \' /ora imposta il bit pre-codifica appropriato: INT pre-Ecodifica bit 2 = 1;
/Imposta Precalerval per eguagliare il numero binario \ '00000001 \' TCCR1B | = precalerval2;
O valore in TCCR0B con un numero binario di \ '00000001 \' /set PWM su 32 kHz per PIN 3,11 (
questo programma utilizza solo pin 11)
/cancella prima tutti e tre i bit pre-caler: TCCR2B & = ~ pre-caluale;
/E il valore in TCCR0B con un numero binario di \ '11111000 \'/ora impostare il bit di pre-codifica appropriato: TCCR2B | = Pre-codifica bit 2;
/O il valore in TCCR0B con un numero binario di \ '00000001 \'/prima cancella tutti e tre i bit pre-codificati:}
il ciclo principale del/Prgrom void loop () {
/time = millis ();
Tempo dopo l'inizio del programma di stampa. println (tempo); //Seriale. stampa(\'\');
Throttle = analogread (0);
/Throttle Potenziometro MSPS = mappa (
farfalla, 512.1023, 0,255);
/La guida è mappata nella metà superiore del potenziometro BSpeed = mappa (
farfalla, 0,511.255, 0);
/Frenata rigenerativa mezza parte nella parte inferiore del vaso/MSPS ed = 100;
/Per il debug di HallState1 = DigitalRead (2);
/Leggi il valore di input dalla sala 1 2 = lettura digitale (3);
/Leggi il valore di input dalla sala 2 3 = lettura digitale (4);
Leggi il valore di input/scrittura numerica da Hall 3 (8, Hallstate1);
/Quando il sensore corrispondente è in alta potenza, il LED accese
originariamente utilizzato per debug di DigitalWrite (9, Hallstate2);
// DigitalWrite (10, Hallstate3); Hallval = (Hallstate1)+ (2*Hallstate2)+ (4*Hallstate3);
/Calcola i valori binari di SENSORS/* SENZA HALL. print (\ 'H 1: \');
Per il debug di porta seriale. println (Hallstate1); Seriale. print (\ 'H 2: \'); Seriale. println (Hallstate2); Seriale. print (\ 'H 3: \'); Seriale. println (Hallstate3); Seriale. println (\ '\');
*/// seriale. println (mpeed); //Seriale. println (Hallval); //Seriale. stampa(\'\');
/Monitorare l'uscita/ritardo transistor (1000);
/* T1 = DigitalRead (2); // t1 = ~ t1;
T2 = DigitalRead (4); // t2 = ~ t2;
T3 = DigitalRead (5); // t3 = ~ t3; Seriale. stampa (T1); Seriale. print (\ '\ t \'); Seriale. stampa (T2); Seriale. print (\ '\ t \'); Seriale. stampa (T3); Seriale. stampa(\'\'); Seriale. stampa(\'\'); Seriale. print (DigitalRead (3)); Seriale. print (\ '\ t \'); Seriale. print (DigitalRead (9)); Seriale. print (\ '\ t \'); Seriale. println (DigitalRead (10)); Seriale. stampa(\'\'); Seriale. stampa(\'\'); // ritardo (500);
*/Cambia di fase di guida/Ogni numero binario ha un caso corrispondente ai diversi transistor attivati/bit matematica usata per modificare il valore dell'uscita arduino:/portad contiene l'output del pin IN sul driver L6234/Uscita per determinare il cingo superiore a
255 valore dell'acceleratore controllato da potenziometro). if (Throttle> 511) {switch (Hallval) {
case 3:/portd = 1111xxx00;
/L'output previsto del pin 0-
7 xxx si riferisce all'input Hall e Portd & = B00011111 non deve essere modificato;
Portd | = B01100000;
/ANALOWRITE (9, mpeed);
PWM su una fase (
transistor di fascia alta) AnalogWrite (10,0);
Chiusura di fase B (duty = 0) analogWrite (11.255); // Fase C su -Duty = 100% (
transistor di fascia bassa) Break;
Caso 1:/Portd = B001xxx00;
/Uscita prevista del pin 0-
7 Portd & = B00011111;
/Portd | = B00100000;
/ANALOWRITE (9, mpeed);
PWM su una fase (
transistor di fascia alta) AnalogWrite (10.255); // Fase B su (
transistor di fascia bassa) AnalogWrite (11,0); // Fase B Off (duty = 0) Break;
Caso 5:/Portd = B101xxx00;
/Uscita prevista del pin 0-
7 Portd & = B00011111;
/Portd | = B10100000; AnalogWrite (9,0); AnalogWrite (10.255); AnalogWrite (11, mpeed); rottura;
Caso 4:/Portd = B100xxx00;
/Uscita prevista del pin 0-
7 Portd & = B00011111;
Portd | = BYM000;
/ANALOWRITE (9.255); AnalogWrite (10,0); AnalogWrite (11, mpeed); rottura;
Caso 6:/Portd = B110xxx00;
/Uscita prevista del pin 0-
7 Portd & = B00011111;
Portd B11. 000 =;
/ANALOWRITE (9.255); AnalogWrite (10, mpeed); AnalogWrite (11,0); rottura;
Caso 2:/Portd = B010xxx00;
/Uscita prevista del pin 0-
7 Portd & = B00011111;
B0201700 Portd | =;
/ANALOWRITE (9,0); AnalogWrite (10, mpeed); AnalogWrite (11.255); rottura; }}
/Rigenerativo Modifica della fase del freno /PORTD (
output di in PIN su L6234)
I pin sono sempre bassi, quindi solo bassi transistor su ciascuna fase vengono utilizzati durante la rigenerazione. frenata. else {
/portd = b000xxx00;
/Uscita prevista del pin 0-
7 Portd & = B00011111;
Portd | = BYM0000; // switch (Hallval) {
caso 3: analogia scrittura (9, BSpeed); // AnalogWrite (9,0); AnalogWrite (10,0); AnalogWrite (11,0); rottura;
Caso 1: scrittura di analogia (9, BSpeed); AnalogWrite (10,0); AnalogWrite (11,0); rottura;
Caso 5: scrittura di analogia (9,0); AnalogWrite (10,0); AnalogWrite (11, BSpeed); rottura;
Caso 4: scrittura di analogia (9,0); AnalogWrite (10,0); AnalogWrite (11, BSpeed); rottura;
Caso 6: scrittura di analogia (9,0); AnalogWrite (10, BSpeed); AnalogWrite (11,0); rottura;
Caso 2: scrittura di analogia (9,0); AnalogWrite (10, BSpeed); AnalogWrite (11,0); rottura; }}
/Time = millis ();
Tempo dopo l'inizio del programma di stampa. println (tempo); //Seriale. stampa(\'\'); //Seriale. flush ();
/Se si desidera debug usando una porta seriale, per favore non per favore,
penso che l'operazione che Arduino fa in questo progetto sia così semplice che sembra uno spreco fare questo compito con un microprocessore.
In effetti, le note di applicazione di L6234 raccomandano un semplice array di gate programmabili (
Gal16v8 realizzato in semiconduttore reticolare) per fare questo lavoro.
Non ho familiarità con la programmazione di questo dispositivo, ma il costo dell'IC è solo $ 2. 39 a Newark.
Anche altri circuiti integrati simili sono molto economici.
Un'altra opzione è quella di mettere insieme le porte logiche discrete.
Ho escogitato alcune sequenze logiche relativamente semplici che potevano guidare l'IC L6234 dall'uscita dei tre sensori della sala.
Il grafico per la fase A è mostrato di seguito e la tabella della verità per tutte e tre le fasi (
in ordine per il circuito logico delle fasi B e C, la porta \ 'non \' deve essere passata dall'altra parte del \ 'o.
Il problema con questo approccio è che ci sono quasi 20 connessioni in ogni fase, quindi ci vuole un po 'di lavoro per metterlo insieme.
È meglio programmare come una gate di log.