Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
Nacrtaću ja nešto samo da približim kako bi to trebalo izgledati.
Reply
Ovo sam samo brzinski dodao izlaz za LCD koji će preko jumpera ići, jer ako ne koristim LCD onda imam ulaze, samo nisam prepravio ona 2 analogna ulaza, ali i to ću kasnije riješiti.



I to je sve što meni treba za ovu verziju, ne treba mi RS konektor jer neću proširivati i povezivati sa drugim uređajem, znači radiće samostalno i neovisno o nekom drugom uređaju (kao vremenski relej koji radi kako se podesi i čeka da ga neki od ulaza aktivira i on odradi neku funkciju na izlazu i to je sve), samo će biti mogućnost povezivanja LCD ako bude potreban.

Ja to neću ubacivati u neke opasne i kompleksne mašine, to će mi služiti za jednostavne modernizacije nekih malih mašina koje u sebi imaju gomilu releja i uslovnih kontakata.
Reply
Makso,

Ljudima će definitivno najlakše biti da ti daju neki predlog ako opišeš neki konkretan ili maksimalno sličan proces koji taj MLC/PLC treba da vodi.

Onaj moj "Mini" u osnovnoj konfiguraciji, koga dosta puta spomenusmo, prvenstveno je bio namenjen za brizgaljke, ali tutnuo sam ga u dosta veoma različitih mašina, tj. svuda onde gde je moglo da zadovolji sledeće:

- max. 24 IN/OUT,
- 1 USART,
- 1 SPI ili I2C uz gubitak jednog IN ili OUT u slučaju SPI,
- 2 pwm uz gubitak 2 IO pina,
- LCD 2x16 sa matricom za max. 6 tastera na data od lcd (obično na B portu kod pic, eventualno na D portu),
- 1 ili više ADC uz gubitak istog broja IO,
- ekspanderska I2C ili SPI dodatna karta sa 4 8 bit IO porta, uz gubitak 2 IO pina na osnovnom miniju...

Bukvalno je iskorišćen i poslednji pin na PIC18F4620 (40MHz, 4K RAM, 1 KEEPROM sa 1 milion upisa, linearno adresiranje FLASH).

Kada mi je u nekim situacijama trebalo čitanje enkodera, generisanje impulsa za servo motore ili slično, onda je to povlačilo oslobađanje B porta sa hw. ISR i premestanje displeja na D port, i tako dalje i tako dalje.

Ponekad se za ređe i specifične potrebe ne isplati projektovati sasvim novi PLC već se doda mala ekspanziona ili specijalizovana kartica na IDC konektore koje sam za takve slučajeve predvideo na "miniju".

Taj malecki mini je sazrevao polako, uslovljeno modifikacijama u vremenu, dok nije dobio dosta stabilne pozicije korišćenja određenih pinova i portova za baš konkretne namene.
Tako sam maksimalno iskoristio resurse samog MCU a da ne pravim stalno novu pcb.

Kao što sam ti već opisao, imaš dve osnovne putanje:

1) Za takve stvari treba ili dosta vremena ako koristiš mali MCU.
Ili odmah pređeš na veći MCU koji ima gomilčinu pinova i modula, pa između njega i periferija napraviš neku vrstu eksperimentalne pcb koju možeš da "prežicuješ" na konkretne potrebe ili konektor-most. Nešto slično smo Mlađa i ja svojevremeno radili sa ARM7, gde smo imali samo jednu malu pcb koju smo modifikovali prema potrebama, i zvali je razvodnik. Ta pcb je imala uvek isto pozicionirane konektore ka MCU, a različito su se rutovali vodovi prema konektorima periferija Ona je služila za usmeravanje pinova MCU ka konkretnim periferijama za dati slučaj primene. To je slučaj gde se dosta "tvrdo" drže stvari pod kontrolom u jednom MCU. Za jednu mašinu pišeš jedan sw.

2) Drugi slučaj je uspostavljanje master mašine, sa nekom čvrstom komunikacijom na koju se mogu kačiti razne periferije sa takvom istom komunikacijom (na primer MODBUS rtu ili ASCII). Tu i same periferije imaju svoje MCU (naravno neke jevtinije), koji vise na glavnom BUS i slušaju master a i raportiraju mu.
Taj slučaj zahteva pisanje više sw i tu je najkompleksniji dogovor sa samim sobom i dobro predviđanje mogućih potreba, što pak opet zahteva iskustvo, jako čvrstu obradu err oko kidanja ili greške u komunikaciji, jako tvrdo rešene hw resete na sve i svašta i tako to. Gomila sw,duačko vreme rezvoja prvi put i jako puno gadnog testiranja.
Kada jednom uspostaviš stabilnu platforu onda se potom ta muka isplati u budućnosti...

------------------------
ADC mi nije toliko često bio potreban za te moje svrhe, a kada mi je trebao onda sam obično stavljao eksterne i kačio ih na već postojeći konektor za I2C ili SPI, koji sam ostavio za te potrebe i za potrebe ekspandera.

Iz jednog malog MCU ne možeš previše izvući ukoliko ti treba dosta pinova. Na većini njih interne hw module ne možeš previše slobodno distribuirati na bilo koji pin.

Dakle, najvažnije je da se dobro dogovoriš sam sa sobom, oko konkretne namene, zacrtaš neki plan koji zadovoljava to to ti treba.

Anketa koju sam sebi postavljaš glasi otprilike ovako:

- sistemski napon napajanja mašine?
Na koji ćeš okačiti svoj PLC (najčešće je korišćeno 24VDC (18-32V) ali ima i izuzetaka ponekad).

- napon napajanja izlaznih organa mašine i najveća struja koju troše?
(12VDC ,24VDC, 48VDC, 190VDC, 24VAC, 48VAC, 60VAC, 115VAC, 230VAC, što su načešće zastupljeni standardi, od kojih je skoro 95% zastupljen 24VDC, ali ima izuzetaka posebno kod starijih mašina).

- potreba za ADC, koja rezolucija i koja brzina semplovanja i obrade, tj. šta im je konkretna namena?
To ti odmah uvodi potrebu za galvanskim rastavljanjem toga jer nerastavljeno je u industriji dobro samo za merenje baterija na stolu. Drugo, ako mašine nemaju: potenciometarske merne letve, davače temperature, pritiska, sile i slično, onda ti ADC ne treba uopšte i ne isplati se praviti front end.

- potreba za DAC, koja brzina odziva i koja rezolucija?
Sa pwm možeš imati solidan DAC, ali je sporiji od pravog DAC i zahteva filter iza i to sve složeniji što ti veća brzina odziva treba. Kada možeš direktno upravljati neke organe pwm-om (npr. proporcionalne hidr. ventile ili neke DC motore, eventualno manje grejače), onda to i uradi i samo rastavi brzim optokaplerom (sa obavezno veoma simetričnim tr i tf inače ćeš imati modifikovan sam pwm).

- koliko izvršnih organa imaš i kog su tipa (PNP ili NPN)?
Tu napraviš specifikaciju out pinova koje konzumiraš, naravno i sam hw koji će podržati te struje, napone i polaritet delovanja...

- koliko inputa imaš, kog su naponskog nivoa, kog tipa (NPN, ili PNP) i koliko razloga za filtriranjem imaš (bučno okruženje i sl.)?
Tu opet napraviši specifikaciju input pinova. Hardversko filtriranje vrhunskog kvaliteta se dobija sa jevtinim RC i TVS, softversko ti oduzima MCU vreme i resurse. Ako je veliki broj inputa onda imaš kosku sa tim kada pišeš sw filtere.

-konačno sagledaš i najbrže moguće događaje koje možeš očekivati na mašini i proveriš da li tvoj MCU te stvari može da stigne da obradi u ISR... Ako treba napraviš neki prototipčić i to realno proveriš. Tu već nema mesta za sw filter na ISR triger, jer brzina koja ti treba je kontradiktoran zahtev sa filtrom. Tu se radi tvrd hw filter i pažljivo razvođenje signala.
-------------------------------------------------------------------
Kada sve to uradiš i staviš na papir, uz nekoliko iteracija dođeš do potrebne veličine (ili mogućnosti) tvog MCU i sad već možeš da počneš da planiraš konačni oblik hardwera.

Bez neke takve ili slične forme planiranja nikad nećeš ni početi jer dogovor samog sa sobom je prvi najteži korak.

Pozz
Reply
Vidi,

Ako već misliš da iskoristiš onaj lukav trik sa prevrtanjem optokaplera na "mini", u cilju izbora IN ili OUT, onda nisi dobro pročitao šta sam odavno napisao na nekoj temi oko in-outs na MCU.

Da bi to mogao da prevrćeš po želji, moraš iskopirati deo pcb sa minija. Moraš koristiti optokaplere sa dualnom LED na ulazu: PC ili LTV 814, 824, 844.

Kada ih koristiš za input, onda imaš PULL-UP ka Vdd (a ne pull-down koje sad imaš i koji ti u slučaju outs nisu potebni), koje ne stavljaš kada je out u pitanju, a kada je input u pitanju onda moraš koristiti invertovanu logiku (input on= low, tj. pitanje if(!input_x)nešto;

Jedino tako ćeš dobiti mogućnost da jednostavno okreneš optokapler za 180 stepeni tako odrediš namenu, in ili out...
Reply
Evo kao sto sam i obecao, ali sa malim zakasnjenjem sema uPLC-a. Odmah da napomenem da na semi ne kondenzatora za rasprezanje, dolaznog napajanja, optokaplera za ulaze i izlaze. Sve se manje vise svodi na digitalnu elektroniku, gde se posle mogu dovoditi moduli ulaza i izlaza.
PLC je projektovan tako da iskoristi maksimum od Arduino-nano-a, a opet da ima dovoljan (nadam se) se broj ulaza/izlaza i mogucnost prosirivanja.
Sa seme se moze videti da PLC ima 16 diskretnih izlaza (izlazi od HC595 oznaceni kao OUT_xx), 16 diskretnih ulaza (ulazi u HC165 oznaceni kao INPUT_xx), 8 galvanski izolovanih analognih ulaza (ulazi u MCP3208 oznaceni kao AIN_x). Sa seme se moze videti da su analogni ulazi samo dovedeni na ulaze u AD. Mrzelo me da crtam. Ovde je neophodno postaviti ESD i RC zastitu + prekidace (idealno jedan kod salter) za otpornicima prema GND_ISO (za izbor strujnog ili naponskog rezima rada). Predlozeni AD konvertor je onaj koji sam imao u biblioteci, pa je samo zato on izabran. Nema drugog razloga.
Sam aduino na sebi ima FT232 koji je povezan na PD0 i PD1 od ATMEGA-e. Ova dva pina sam iskoristio za RS485 komunikaciju na taj nacin sto sam ih odveo na bafere HC125. Pomocu pina RS485_EN se ukljucuje RS485 komunikacija. Na samom arduinu se nalaze otpornici od 1k na ovim linijama, tako da u principu mogu da se koriste jedna ili druga komunikacija. Sam RS485 je galvanski izolovan. Ono sto je izuzetno interesantno sa semi jeste upotreba iCoupler-a koji je namenski napravljen za  galvansku izolaciju RS485 i takodje u sebi sadrzi i drajver za komunikaciju. Drajver je uvek u stanju prijema, tako da pri implementaciji moze da se vrsi kontrola poslatog podatka, a i da se napravi malo robusniji protokol. Ja npr. kada pravim neki protokol na RS485, nikada ne koristim interapt od serijskog slanja, vec samo od prijema. Na taj nacin mi se uvek generise interapt prijema kada nesto posaljem. Podatak koji sam poslao, primio sam nazad. Ako su ta dva podatka ista, salje se dalje. Ako nisu, doslo je do sudara podataka na magistrali. Takodje moze da se vidi da je RS485 malo zesce zasticen od ESD-a i EMI-a. Polarizacija i terminacija se postavljaju po potrebi. Vrednosti koje su date u semi su PROFIBUS standard. Ja npr. nikada ne stavljam te komponente na PCB, vec kupujem DB9 konektore za PROFIBUS koji imaju u sebi i terminaciju i polarizaciju i prekidac za aktivaciju.
Takodje je ubacen i RTC koji je povezan na I2C. I2C port je preko drajvera izvucen na konektor za eventualno prosirenje uredjaja.
Nesto malo oko ulaza i izlaza. Svi ulazi i izlazi su postavljeni na SPI. Sto se tice diskretnih U/I, postoje 4 sift registra (IC1, IC2, U1 i U2). Kod ove situacije moj predlog je da se preko SPI salje 5 bajtova, pri cemu bi prvi bajt bio kontrolni, npr. 0xB1. Kada se prodje ceo SPI lanac, prvi poslat bajt mora da se vrati nazad. Ako se vrati nazad, to znaci da je SPI lanac OK. A ako se ne vrati, onda znaci da je lanac u prekidu. Izlaz iz poslednjeg sift registra je doveden na jedan bafer, posto sam registar nema stanje visoke impedanse, a da bi se lako izvrsila sprega sa AD-om, onda je neophodno da sve neaktivne periferije na SPI budu u stanju visoke impedanse (na izlaze mislim). Kada se na PD1 postavi "0", SPI je dodeljen diskretnim U/I, a kada "1" onda je dodeljen analognim.
Ideja obrade U/I je sledeca. Aktivira se jedan tajmer na svakih 1-10ms (zavisi od potrebe). Kada se generise interapt od TMR, inicira se SPI komunikacija. Prvo se prodje diskretni U/I, pa onda analogni ulazi i tako na svaku periodu TMR.
Izolacija AD-a je izvrsena isolovanjem SPI linije upotrebom iCoupler-a. Njih koristim vec 5 godina i mogu vam reci svima da je to po meni revolucija u digitalnoj izolaciji. Kola su jeftina i struja polarizacije im je nikakva, sto znaci da mogu lako da se sprezu sa druzim kolima, bez upotrebe dodatnih tranzistora kao kod opto kaplera.
Mislim da sam sve rekao. Mozda sam nesto i preskocio. Opet bih da ponovim da ovo nije detaljna elektricna sema, koja veoma lako moze da se razradi u detaljnu.
Ako bilo ko ima bilo kakav komentar, sugestiju, primedbu ili bilo sta, otvoren sam za sve vidove komunikacije.

P.S.Neiskorisceni pinovi na Arduino-u:
PD2 - INT0
PD3 - COMPARE OUT / INT1
PD5 - COMPARE OUT
PD6 - COMPARE OUT
PB0 - CAPTURE INPUT
PB1 - COMPARE OUT
PB2 - COMPARE OUT
Sve brzi U/I - sve ukupno 7 komada.

P.P.S. Ovo je moj predlog jednog malog PLC-a koji sam krstio kao uPLC. Predlagac ne mora da prihvati ovaj koncept, a moze i da ga prihvati.


Attached Files
.pdf   uPLC_V1.pdf (Size: 95,64 KB / Downloads: 41)
Reply
Pogledao sam malo detaljnije shemu, imamo bih samo predlog za drugaciju kombinaciju optocouplera posto I2C nije izolovan.
Na mestu U8 i U5 bih postavio MAX14850 i dodatno preko njih da ide U2 za I2C na daljina a za RS-485 posle izolatora postaviti neki standardan tranceiver sa zastitom,.
Zgodnije je kada su ti optocoupleri isti a i ovi MAX nisu preterano skupi i imaju 6 kanala, zatreba ce za CS liniju ili neki povratni error.
Tako je sve izlovano, moze da se prosiri i sve na mestu.
Dodatno bilo bi vrlo pozeljno da se kod OUT portova doda jedan izolovan IN za over-current signalizaciju i valjalo bi da se doda jos jedan OUT za re-set over-current funkciju.
Treba razraditi detalje oko over-current zastite, PoliFuse su dobri ali skupi posebno ako bi se stavljali na svaki izlaz posebno i dodatno komplikuju logiku izlaza.
Tu valja diskretna brza lachujuca zastita koja se projektuje na stuju koliko moze jedan izlazni MOS-FET pouzdano da izdrzi u kratkom spoju za vreme dok ga zastita ne ugasi i naravno ono sto sam pisao u predhodnim postovim da se vrati signal o greski na izlazu nazad u kontroler.
Reply
Izvinjavam se ako je offtopic malo, ali jel moze neko ukratko i prakticno pojasni kad je bolje da se koriste shift registri vs io expandera, pros and cons?
Reply
Exanderi imaju vise funkcija, svaki pin moze posebno da se konfigurise kao In ili Out i moze u letu da se menja, shift registri mogu samo ili In ili Out po jedno IC, MCP23S17 dodatno ima konfigurabilne interapte sa dve HW linije i ima 3 HW adresne linije za povezivanje do 8 expandera bez CS signala za svaki posebno.

Shift registri su jeftini, veoma brzi (100+ MHz), ima ih raznih i u raznim kucistima.
Meni zanimljiva primena je za drajvovanje 7seg LED displeja staticno, bez multiplexa, ima ih u malim kucistima i staju ispod npr 13mm LED displeja sa sve 8 malih SMD otpornika i tako od pasivnog LED napravis "SPI kompatibilnu periferiju".
Bolje se vidi LED 7seg displej kada se pokrece staticno, ne "flikeruje" na video snimcima, ne pravi elektricnu buku koliko multipleksovane varijante i manje CPU resursa se trosi za osvezavanje prikaza naspram multiplexa.
Reply
(07-25-2017, 02:54 AM)mikikg Wrote: Pogledao sam malo detaljnije shemu, imamo bih samo predlog za drugaciju kombinaciju optocouplera posto I2C nije izolovan.
Na mestu U8 i U5 bih postavio MAX14850 i dodatno preko njih da ide U2 za I2C na daljina a za RS-485 posle izolatora postaviti neki standardan tranceiver sa zastitom,.
Zgodnije je kada su ti optocoupleri isti a i ovi MAX nisu preterano skupi i imaju 6 kanala, zatreba ce za CS liniju ili neki povratni error.
Tako je sve izlovano, moze da se prosiri i sve na mestu.
Dodatno bilo bi vrlo pozeljno da se kod OUT portova doda jedan izolovan IN za over-current signalizaciju i valjalo bi da se doda jos jedan OUT za re-set over-current funkciju.
Treba razraditi detalje oko over-current zastite, PoliFuse su dobri ali skupi posebno ako bi se stavljali na svaki izlaz posebno i dodatno komplikuju logiku izlaza.
Tu valja diskretna brza lachujuca zastita koja se projektuje na stuju koliko moze jedan izlazni MOS-FET pouzdano da izdrzi u kratkom spoju za vreme dok ga zastita ne ugasi i naravno ono sto sam pisao u predhodnim postovim da se vrati signal o greski na izlazu nazad u kontroler.

Miki,

hvala na komentarima. Evo mojih odgovora.
MAX-ove koje si spomenuo nisam stavljao, posto ih nikada nisam koristio. Ove izolacije sam koristio mnogo puta i zbog toga sam njih stavio. U pravu si kada kazes da ima dosta razlicitih izolacija. I2C nisam namerno izolovao, posto sam ga ostavio za displej i tastaturu i nisam hreo da dodajem jos jedan DC/DC konvertor, posto verujem da si primetio da CPU ima masu GND, RS485 GND_485, a analogni ulazi GND_ISO. Nisam hteo da imam jos i GND_I2C. Inace ako je potrebna izolacija I2C-a, onda bi moj predlog bio ADuM1251ARZ, posto sam i njega koristio. Mnogo vise sam pristalica Analog-a i Linear-a, nego MAXIM-a. Ipak svako ima pravo na svoj izbor.
Zto se tice izlaza i overcurent protection, latch varijante, po meni licno ne trebe. Ko bude radio prema ovo dizajnu moze da ubaci. Ja licno uvek koristim NPN tranzistor (oprokapler) struje do 300mA i to je to. Na njega posle povezujem ostatak. Mnogo manje mesta na PCB-u potrosim. Nikada mi se nije dogodilo da mi zatreba da funkcija. To resenje je Macola predlozio pre par godina u nemi nesto oko IN i OUT ili slicno. Znam o cemu pricas. Njemu je mozda to trebalo. Meni nije nikada i ja licno ne bih stavljao. To je samo pitanje sta ce se ukljucivati preko tih izlaza.
Reply
(07-25-2017, 03:05 AM)vsavic Wrote: Izvinjavam se ako je offtopic malo, ali jel moze neko ukratko i prakticno pojasni kad je bolje da se koriste shift registri vs io expandera, pros and cons?

Shift registre koristis kada tacno znas sta je ulaz, a sta je izlaz. Npr. kao sto je miki vec napisao, ako doces da drajvujes jednu cifru 7-seg, to je 8 izlaza. Mnogo je jetinije da ga povezes na HC595 (ovo je samo primer. uvek treba pogledati strujne mogucnosti i dodati ULN po potrebi), nego da kostistis ekspander, koji je dosta skuplji, ima protokol itd (ne kazem da ne moze da se koristi, ali je racionalnije njega koristiti na drugim mestima). Ja licno nikada nisam imao potrebu da koristim expandere (sto ne znaci da je nema). Uvek sam koristio sift registre.
Ako zelis da imas konfigurabilan broj odredjenih U/I, onda je resenje za to ekspander.
Reply
Odlično Vojine,
Svaka čast za koncept i uloženo vreme i trud.

Pozz
Reply
Odlično urađeno Vojine.
Makso, sada je red na tebe da ovo i realizuješ!
Reply
Vojine svaka čast, profi!
Reply
Profi urađeno Vojine!
Reply
Slazem se da su AD i Linear vrlo ozbiljni proizvodjaci i njihove stvari rade uglavnom dobro, mada ovaj MAX nismo jos probali a nisu toliko losi po DS.

Iskreno malkice mi samo bode oci taj I2C sto nije izolovan. Kapacitivna sprega sa tih linija prema MCU moze potencialno da pravi probleme.
Ako ga uporedimo na HW nivou sa RS-485, isto imamo dugacke linije i tranceiver u oba slucaju, RS-485 si izolovao, valjalo bi isto tako i I2C.

Dodatno tako potpuno MCU izolujemo od spoljnjeg sveta, to posle pruza i pogodnost kada se bude koristio USB port za PC za bilo kakvu komunikaciju, resava te problema ground-loops-a ...

Bas taj USB zna da napravi ponekad ozbiljnu pometnju, samo zamisli prikljucen LapTop koji se napaja iz brick-adaptera bez uzemljenja, onaj Y/X kondenzator unutar pretvaraca izmedju primara/sekundara moze ozbiljno da osteti elektroniku.
Reply
@Makso

Ovo sto je Vojin nacrtao, tako se projektuje i predvidjaju stvari za neku buducu upotrebu, sa svim tim stvarim se crta PCB a sta ces konkretno da iskoristis od svega toga, to po potrebi odlucis i te delove montiras na PCB.
Reply
I oko strujne zastite, ima nekoliko slobodnih pinova na Nano, steta da zvrje prazno, makar da se to predividi za to a ne mora da se koristi uvek.
Reply
(07-25-2017, 12:12 PM)mikikg Wrote: I oko strujne zastite, ima nekoliko slobodnih pinova na Nano, steta da zvrje prazno, makar da se to predividi za to a ne mora da se koristi uvek.

Hvala svi na lep komentarima. Za slobodne pinove dam mislio da se implementiraju brzi U/I.
Mozemo cak i da otvorimo temu, Projektovanje PLC-a gde bi krenuli od definicije i principa rada industrijskih lpntrolera do projektovanja samog PLC-a i programskih jezika za programabilne kontrolere.
Reply
Sa brzim I/O u slucaju ovog Arduino Nano ce biti malo poteskoca, posebno kada se okace sve ove periferije, bice frke sa CPU resursima. Ako se stavlja drugi veci MCU onda se meja skroz postavka i shema ...

Za ovako dobro "opremljen" PLC je steta stavljati skroman 8bitni Arduino kontroler ...
Pravi se dupli posao jer treba to sve iscrtati i poterati, posle ako se menja MCU opet crtanje PCB iz pocetka i izrada a to kosta.
Reply
Da se razumemo, POTPUNO podrzavam celu ovu ideju, i voleo bih da da ovaj buduci kontroler bude jedan fin projekat koji svi mozemo za po nesto da iskoristimo, napravicemo i GB za plocice i eventualno materijal i stvarno da ulozeni trud najefektnije iskoristimo.

Moji predlozi su dobronamerni i samo gledam na malkice duzi period sta sve moze da nam zatreba (CPU resursa nikad dosta), a vec smo pricali da cena kontrolera u upuknom finansiskom bilansu pravi vrlo malu razliku.

Recimo glupost, ako se koristi A/D, tu se obavezno doticemo neke matematike, jos ako je sa pokretnim zarezom, odose svi resursi u CPU ...
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)