Sadržaj:

Radni brzinomjer RC automobila: 4 koraka (sa slikama)
Radni brzinomjer RC automobila: 4 koraka (sa slikama)

Video: Radni brzinomjer RC automobila: 4 koraka (sa slikama)

Video: Radni brzinomjer RC automobila: 4 koraka (sa slikama)
Video: Сделать высокоскоростной двигатель постоянного тока из двигателя миксера на 220 В 2024, Rujan
Anonim
Radni RC automobilski brzinomjer
Radni RC automobilski brzinomjer

Ovo je kratki projekt koji sam stvorio kao dio veće RC verzije lakog Land Rovera. Odlučio sam da mi se sviđa imati radni brzinomjer na nadzornoj ploči, ali znao sam da ga servo neće prerezati. Postojala je samo jedna razumna opcija: rasporediti arduino!

Malo pozadine za početak … Nisam osoba za kodiranje ili elektroniku. Još uvijek razmišljam o električnoj energiji u smislu protoka vode i otpornici me pomalo zbunjuju. Međutim, ako sam čak i ja uspio učiniti ovo, onda biste i vi trebali!

POPIS DIJELOVA:

Mikrokontroler: Koristio sam ATTiny85 čip, koji je koštao oko 1 £ svaki.

Programer za mikrokontroler: Da biste dobili kod na čip, potreban vam je način programiranja. S običnim arduinom ovo je samo USB kabel, ali za ATTiny čip trebate nešto dodatno. Za to možete upotrijebiti drugi arduino ili, poput mene, možete koristiti Tiny AVR programer iz Sparkfuna.

learn.sparkfun.com/tutorials/tiny-avr-prog…

To bih preporučio jer sam ih pokušao programirati različitim metodama, a ova je najjednostavnija. Ploča je malo skupa, ali dobra je investicija ako radite puno ATTiny projekata.

8 Pin utičnica: Ako umetnete čip u utičnicu umjesto da ga lemite izravno, možete si priuštiti neke pogreške u sastavljanju. Govoreno iz iskustva - nitko ne želi desolder čipove kako bi ih reprogramirao.

Kondenzator: Koristi se kondenzator za odvajanje od 100nF (kod 104). Ne razumijem baš zašto, ali sam pročitao da su odvajanje kondenzatora važni na internetu, pa mora biti istina …

Otpornik: Otpornik od 10 kΩ koristi se za povlačenje linije prema arduinu. Opet, još jedna misterija elektronike.

Perfboard/Stripboard: Neka podloga na koju ćete sastaviti svoj krug.

Žica za namotavanje: Redovito omotana žica je predebela da bi se lemila na motor. Korištenje fine emajlirane žice smanjit će opterećenje na stezaljkama motora i znatno će vam olakšati život.

Servo žica: Trožilna vrpca koja završava 3-polnim ženskim utikačem JR. Ja sam svoj dobio od izgorjelog serva koji sam 'modificirao'.

Koračni motor: Koristio sam bipolarni koračni motor Nidec od 6 mm. Svaki mali steper trebao bi raditi, iako ga držite malim jer se stepper vozi izravno s Arduina.

Igle zaglavlja: Nisu bitne, ali ako steper povežete na 4 igle zaglavlja i uključite utičnicu u krug, lako ćete isključiti nadzornu ploču radi lakše instalacije.

Računalo: Za programiranje ploče potrebno vam je računalo. Moguće s Arduino IDE -om. A možda i USB kabel. Ako ima i kabel za napajanje, onda još bolje.

Korak 1: Sustav

Temeljni prikaz sustava koji sam stvorio bila je metoda u kojoj se signal pulsno -širinske modulacije (PWM) koji dolazi iz RC prijamnika pretvara u brisanje koračnog motora putem mikrokontrolera ATTiny 85 (uC).

Evo izvora o PWM signalima i RC -u, ali da biste ga replicirali, ne morate ga strogo razumjeti.

en.wikipedia.org/wiki/Servo_control

ATTiny je moj omiljeni okus Arduina jer je mali s još uvijek dovoljno I/O igala za osnovne stvari pa se savršeno uklapa u male modele i RC projekte. Glavni nedostatak ATTinyja je to što zahtijeva malo više postavljanja kako bi se programirao, ali nakon što ga postavite, toliko su jeftini da ih možete kupiti za sve vrste projekata.

Veličina brojčanika brojača okretaja je premala da bi imala motor sa zupčanikom s povratnom spregom, pa je za proporcionalni odziv trebalo koristiti koračni motor. Koračni motor je motor koji se pomiče u diskretnim količinama (ili koracima …!), Što ga čini idealnim za sustav bez povratne veze. Jedino je upozorenje da će "koraci" uzrokovati da rezultirajuće kretanje bude trzajno, a ne glatko. Ako dobijete steper s dovoljno koraka po rotaciji, to se ne primjećuje, ali s time da steper koji sam koristio u ovom projektu ima samo 20 -ak koraka u potpunoj rotaciji, skok kuta je prilično loš.

Sustav će pri uključivanju pokretati steper unatrag dva okretaja, tako da iglu poništi. Brzinomjeru je potreban zatik za odmaranje na mjestu gdje želite da bude nulta oznaka, inače će se vrtjeti zauvijek. Zatim preslikava PWM signale naprijed i natrag u određeni broj koraka motora. Lako, zar ne …?

Korak 2: Softver

Odricanje od odgovornosti: Nisam programer. Za ovaj projekt ja sam digitalni ekvivalent dr. Frankensteina, sastavljajući nešto što radi od različitih pronađenih bitova koda.

Dakle, od srca zahvaljujem Duaneu B, koji je napravio kod za tumačenje RC signala:

rcarduino.blogspot.com/

I Ardunautu, koji je napravio kod za pokretanje stepera kao analogni mjerač:

arduining.com/2012/04/22/arduino-driving-a…

I oboma, moje najiskrenije isprike za ono što sam učinio vašem kodu.

Sada to nije u redu, evo što možete učitati na ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - upotrijebite broj prekida u attachInterrupt #definirajte THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - koristite PIN broj u digitalnom čitanju #definirajte NEUTRAL_THROTTLE ovo je 1500 mikrosekvenci ovo je 1500 neutralnog leptira za gas na električnom RC automobilu #define UPPER_THROTTLE 2000 // ovo je trajanje u mikrosekundama maksimalnog gasa na električnom RC automobilu #define LOWER_THROTTLE 1000 // ovo je trajanje u mikrosekundama minimalnog gasa na električnom RC automobilu #define DEADZONE 50 // ovo je mrtva zona za gas. Ukupna mrtva zona je dvostruko veća od ove. #include #define STEPS 21 // koraka po okretu (ograničeno na 315 °) Promijenite ovo za podešavanje maksimalnog hoda brzinomera. #define COIL1 3 // Igle zavojnice. ATTiny koristi stezaljke 0, 1, 3, 4 za steper. Pin 2 je jedini pin koji može obraditi prekide pa mora biti ulaz. #define COIL2 4 // Pokušajte ih promijeniti ako koračni motor ne radi ispravno. #define COIL3 0 #define COIL4 1 // kreirajte instancu klase koraka: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; // Položaj u koracima (0-630) = (0 ° -315 °) int SPEED = 0; plovak ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // vrijeme za resetiranje dok je motor u praznom hodu int Resetval = 0; volatile int ThrottleIn = LOWER_THROTTLE; hlapljivo nepotpisano dugo StartPeriod = 0; // postavljeno u prekidu // mogli bismo koristiti nThrottleIn = 0 u petlji umjesto zasebne varijable, ali pomoću bNewThrottleSignal za oznaku da imamo novi signal // jasnije je za ovaj prvi primjer void setup () {// recite Arduinu želimo da se funkcija calcInput poziva svaki put kada se INT0 (digitalni pin 2) promijeni s HIGH na LOW ili LOW na HIGH // hvatanje ovih promjena omogućit će nam da izračunamo koliko dugo je ulazni impuls attachInterrupt (THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed (50); // postavite brzinu motora na 30 okr/ min (približno 360 PPS). stepper.step (KORACI * 2); // Vraćanje položaja (X koraci u smjeru suprotnom od kazaljke na satu). } void loop () {Resetval = millis; za (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg <UPPER_THROTTLE) {SPEED = map (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); Resetiranje = 0; } // Obrnuto mapiranje else if (ThrottleInAvg LOWER_THROTTLE) {SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); Resetiranje = 0; } // Izvan raspona gornje else if (ThrottleInAvg> UPPER_THROTTLE) {SPEED = 255; Resetiranje = 0; } // Izvan raspona niže else if ((ThrottleInAvg Resetcounter) {stepper.step (4); // Pokušavam reći steperu da se sam resetira ako je RC signal dugo u mrtvoj zoni. Nisam siguran radi li ovaj dio koda. }} int val = BRZINA; // dobivamo vrijednost potenciometra (raspon 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // mapiranje raspona lonaca u rasponu koraka. if (abs (val - pos)> 2) {// ako je razlika veća od 2 koraka. if ((val - pos)> 0) {stepper.step (-1); // pomaknite se jedan korak ulijevo. pos ++; } if ((val - pos) <0) {stepper.step (1); // pomaknite se jedan korak udesno. pos--; }} // odgoda (10); } void calcInput () {// ako je pin visok, to je početak prekida if (digitalRead (THROTTLE_SIGNAL_IN_PIN) == HIGH) {// dobiti vrijeme pomoću mikrofona - kada naš kôd postane jako zauzet, to će postati netočno, ali za trenutnu aplikaciju // lako razumljiv i radi vrlo dobro StartPeriod = micros (); } else {// ako je pin nizak, to je padajući rub impulsa pa sada možemo izračunati trajanje impulsa oduzimanjem // start time ulStartPeriod od trenutnog vremena koje vraća micros () if (StartPeriod) {ThrottleIn = (int) (mikro ((početno razdoblje)); StartPeriod = 0; }}}

Za više informacija o programiranju ATTiny85 pogledajte ovo:

learn.sparkfun.com/tutorials/tiny-avr-prog…

Korak 3: Hardver

Hardver
Hardver
Hardver
Hardver
Hardver
Hardver

Za izradu kruga pogledajte dijagram kruga. Na vama je kako ćete ga sastaviti, ali predlažem da upotrijebite malo stripboard -a/perfboard -a koji se koristi za izradu prototipa tiskanih ploča i ugradnju čipa u utičnicu.

C1 = 100nF

R1 = 10 kΩ

Kondenzator treba postaviti što je moguće bliže čipu kako bi bio najučinkovitiji.

Prilikom lemljenja emajliranih žica na motor, budite iznimno oprezni jer se terminali na motorima vole otkinuti i odvojiti zavojnicu od motora. Da biste to riješili, dobro rješenje je lemljenje žica, a zatim stavljanje velike mrlje 2-dijelnog epoksida na zglob, puštanje da se stvrdne, a zatim uvijanje žica zajedno. Time se smanjuje stres na pojedinim terminalnim zglobovima i trebalo bi se spriječiti njihovo odvajanje. Ako to ne učinite, puknut će u najmanje prikladno vrijeme, zajamčeno.

Ako napravite utikač zaglavlja zaglavlja, a pinove postavite tako: [Ca1, Cb1, Ca2, Cb2] s Ca1 koji stoji za zavojnicu A, žica 1 itd. To vam omogućuje promjenu smjera okretanja mjerača zamjenom utikača oko.

Mjeraču će trebati krajnji zaustavljač za kalibriranje nulte pozicije prema. Preporučujem da iglu napravite od metala, ako je moguće. To ga zaustavlja pri savijanju kada dođe do krajnjeg zaustavljanja. Način da iglu dovedete u dobar položaj je da iglu privremeno zalijepite za osovinu, uključite modul, ostavite da se odmori, a zatim uklonite i ponovno zalijepite iglu na osovinu, s iglom naslonjenom na završni zaustavljač. Time se igla poravnava s magnetskim zupčanikom motora i osigurava da se igla uvijek mora nasloniti na krajnji graničnik.

Korak 4: Epilog

Nadamo se da ste uživali u ovom kratkom uputstvu i da vam je bilo korisno. Ako napravite jedan od ovih, javite mi!

Sretno!

Preporučeni: