HDD klocka - persistens av vision (8 / 13 steg)
Steg 8: Börja snurra - att sätta lägre styrelsen i funktion
1. Inledning
Detta PCB ansvarar för att köra motorn tillräckligt snabbt för lysdioder att bli "osynlig" och deras ljus suddig. Jag gjorde två versioner av detta, eftersom jag inte kunde driva upp (PIC18F46J50 skulle inte program och jag inte ville fastna på det) den tidigare styrelsen. På den andra versionen beslutat jag att sätta en PIC18F4550 i ett stort DIP paket, att göra lödning och mätningar lättare. Jag gillar hålmontering PCB mycket, efter plocka DIP40 paketet för PIC jag vände allt annat till dopp och genomgående hål komponenter. Motstånd, integrerade kretsar, allt åt sidan MOSFETs.
Detta PCB är den enklaste av de styrelser jag gjorde (jag räknas magnet innehavaren alltför som en PCB, möjligen den svåraste som ska borra, stapla, såg..). Komponenterna i denna styrelse:
- 1 x PIC18F4550 mikrokontroller med USB - styr allt
- 6 x N kanal MOSFETs - float eller Anslut spolar av BLDC till PSU skenor
- 2 x CD4081B quad, dual input AND-gates - detta ger de signaler som vänder den MOSFETs på/av
- 1 x 7805 spänning stabilisator - ger en trevlig ren 5V strömförsörjning för PIC och dess kringutrustning
- 1 x LM2903 dubbla kontrollapparat med öppna avlopp utgång - fångar spänningstoppar att avancera med kommutering mönster
- 3 x lysdioder - signalera det läge där PIC är just nu: bootloader/användarprogrammet
- 2 x knappar - extern användare ingångar för felsökning
- 1 x Potentiometer - ändrar intermittensen som blir påklistrat med kommutering signalerna
- n x motstånd - nuvarande begränsa, pull-ups, pull-downs
- n x kondensatorer - filtrering caps
- n x Pin rubriker - anslutningen till andra styrelser
Detta är den första PCB vi måste sätta in funktion, eftersom den övre styrelsen kommer att dra sin makt från rörelsen av motorn. Detta är vad vi har att göra här:
- Driva upp saken och sätta USB bootloader i funktion
- Försäkra kontroll av de sex N-MOSFETs
- Driva lysdioder
- Analoga gränssnitt
- Mätning av varvtal
- Seriell kommunikation för felsökning
Låt oss ta dem en efter en!
2. starta upp enheten och göra användning av USB-module inuti PIC18F4550
Som jag nämnde i föregående steg, beslutade jag att använda USB för firmwareuppdatering. Efter blinka firmware till PIC, jag tog ett djupt andetag och vände på min PSU. Och sedan plötsligt... ingenting. Det fungerade, och det gav mig en sak att tänka på tills jag kom med extra kondensator lösningen. Efter det fanns det inga problem på alla, inga fel, ingenting. Den LED som fick börja blinka när bootloader var igång verkligen blinkande, efter byte till användaren Anmälningskod kunde jag flash en annan LED. Övergången mellan bootloader och användaren Anmälningskod fungerar bra också. Uppstart och bootloader användning: kollade!
3. kör den borstlösa likströmsmotor
BLDC motor har tre stift, vi måste kontrollera spänningen över alla tre att göra det flytta det sätt vi förväntar oss. Den stat där tre stiften är blir alltid annorlunda, byta mellan hög impedans, GND och VDD. Det mönster som dessa tre stift bör alternativa visas på bilden ovan. Åt sidan för att använda upp sex I/O pinnar av mikrokontroller, kommer jag också lägga en PWM-signal över de tre linjerna. Detta kan uppnås med sex och-portar med sina utgångar på sex utfärda utegångsförbud för MOSFET. Utfärda utegångsförbud för använde var: CD4081B. Detta sätt kan en kontrollera hastigheten med endast en variabel - intermittensen.
Vi måste ge ett gränssnitt att ändra intermittensen från utsidan, det mest bekväma sättet att göra detta, är att använda potentiometern. En intern, 10 bitars AD omvandlare tar spänningen på analog ingång och omvandlar den till ett digitalt värde. Tur oss, intermittensen register är 10 bitar bred också, ingen filtrering eller manipulation behövs, vi bara har att överföra värdet från ADC registrerar att arbetscykel registren. Inställningen av båda modulerna är lätt, jag använde koden skärmklipp från äldre projekt och justerat de faktiska beräkningarna till dem. Efter montering denna styrelse såg jag att motorn inte vände snabbt nog, det ganska stäpp. Kommutering signalerna skulle planeras av en slumpmässigt vald timer avbryta av 100 MS, och det var inte all-just. En vän föreslog mig att ändra denna timer avbrott till externa avbrott och göra vissa ändringar i hårdvaran också. Naturligtvis en annan PCB var uteslutet, en annan (mindre) PCB att utformas för att vara värd de extra komponenter som hans förslag nämns. Målet var att få spänningen från motor terminalerna, passera dem genom en avdelare, ansluta de tre signalerna tillsammans via strömbegränsande motstånd och slutligen sätta dem på en komparator ingång. Jag samlat här små PCB utan motstånd på icke-invertering indata, och mätte spänningen på inverterade indata, där denna signal från motorn kom från. Jag såg att det nådde ungefärligt 500mV, icke-invertering motstånden hade ska plockas så motsvarigheten utlöser varje gång en spik kom på en av de tre ingångarna. Se bilder för bättre förståelse av denna del!
Jag leds av motsvarigheten till ett yttre avbrott på PIC8F4550, och bytte avbrottstjänstens rutin att kolla mot denna händelse innan hopp till nästa kommutering cykel. Detta sätt motorn inte falla ur synk och kommer tur tillräckligt snabbt för oss att arbeta med den.
oszcilloszkop kep en harom jelrol, az egyesitett jelrol är
oszcilloszkop kep en komparator ket bemeneterol es a kimeneterol
4. driva lysdioder
Driva de debug eller status lysdioderna är så enkelt som det kan bli, jag beräknas motståndet för 20mA: R = U / jag = 5/0.02 = 250 ohm. Om du vill ha ljusare, sätta motstånd av lägre värde, om du vill ha dimmer, sätta högre motstånd värde motstånd.
5. analoga gränssnitt
Att ha en potentiometer justera PWM intermittensen är det bästa sättet att ange rotationshastighet för spindeln. Analog-digital-omvandlare kan användas för att läsa center kranen potentiometerns, spänningen kommer att läsas in i AD värde registren, från där den kan tas av firmware för vidare bearbetning och manipulation. Med detta värde innebär, att vi enkelt kan justera PWM intermittensen. Till min stora lycka båda värdena är 10-bitar, så vad jag behöver göra är att dirigera bitarna från värdet AD registrera till duty cycle registret. Initiera koden för modulen AD kan ses bland bilderna jag bifogat till detta steg.
6. mäta rotationshastighet
Mätning av rotationshastighet kan uppnås genom att mäta de externa avbrott (från kontrollapparaten som nämnts ovan) i en en sekund tidsperiod. Efter byte till externa kommutering signal synkronisering, lämnades timer avbrottet aktiverad och sätta till en andra. En räknare var ökas i externa avbrottstjänstens rutin, har vi bara att kontrollera hur många räknas vi har i en sekunder och klyftan av sex, en full rotation ger sex externa avbrott. Nu när vi vet antalet pulser i en sekund, kan vi multiplicera det med 60 att få rotationshastigheten i RPM.
7. seriell kommunikation
För att hålla PCB enkel, jag kommer inte komplicera det med debug bildskärmar och många debug lysdioder, de skulle inte vara bra på sak, när det fungerar all-just. Det är därför jag beslutade att använda seriell kommunikation och en följetong-usb konverter göra grundlig felsökning om det behövs. Om allting fungerar, kan detta debug gränssnitt enkelt inaktiveras, så den inte äter upp processortid. Hantera UART i PIC processorer är mycket enkel och mycket bekvämt när det gäller användarvänlighet, lär läst databladet du dig allt som finns till den.
8. problem jag slog när du arbetar på baskortet
Ett problem som jag träffade när du arbetar på baskortet var felaktigt spänningsnivåer på MOSFET grindarna. Spårade jag slutligen tillbaka problemet till felaktigt urval av IC, jag trodde 74LS08 är pin-kompatibel med CD4081B, som jag ursprungligen gjorde PCB för. Jag kunde inte hitta någon CD4081B på lokala butiker och tänkte att helt enkelt ersätta dem med 74HC08 och det är det. Det var inte det, om du kolla datablad, förstår du vad jag talar om. Grindarna är placerade något olika i de två paketen, utgångar fick inverterad med ingångar, det är där de felaktigt spänningsnivåer kom ifrån! Jag beställde några 4081 ICs på Internet, problemet löst!
Ett annat problem hade något att göra med en saknad anslutning. Jag glömde helt enkelt att borra två hål och kontakt Q6 med utfärda utegångsförbud för motståndet! Det spårade jag med tre sonder på bron utgångarna och en sond reser tillbaka på sättet att den saknade pulsen. Livet är verkligen lättare när du har en fyra channel oscilloskop. Jag lyckades felsöka två fel tack vare det. Köpa ett scope var var en riktigt stor men riktigt bra investering.