posjirka
Vytvořené odpovědi
-
AutorPříspěvky
-
posjirkaÚčastník
tak jsem se na ten modul díval a je tam použit IRF520. Ten má při Ugs =4V proud cca 0,2A až od Ugs = 5V má skoro 3A. viz datasheet
https://arduino-info.wikispaces.com/file/view/irf520.pdf
list č.4 vpravo nahoře. Proto to nefunguje jak má.
Vidím 2 cesty:
Buď použít jiný modul např. ten 4. na tomto odkazu:
https://arduino-info.wikispaces.com/Brick-4ChannelPowerFetSwitch
má vstupy řešeny přes optočlen a tím spíná vyšší napětí než toje 3,3V.
Druhá varinata je udělat vlastní modul. ćetl jsem že si nevěříš v dělání tiš´táků, ale věř mi že pomocí univerzálního PCB ( třeba http://www.santy.cz/vyvojove-desky-c3/pcb-otvory-1mm-oboustranna-deska-30x70mm-i161/ ) by jsi to zvládnul v pohodě. koupit pár součástek za cca 30kč, k tomu tu univ. desku 2x dvojsvorky do tiš´táku a za chvilku máš hotovo. Kliděn udělaj 1 část té 4 desky. jestli se na to necítíš, tak určitě najdeš v okolí nějákého bastlíře, nebo střední školu, kde se s nějákým mistrem určitě domluvíš…posjirkaÚčastníkmyslim ze je na miste otazka na co to potrebujes. jestli pro pwm regulacu jak z textu dedukuji tak je treba uvest i o jakych vykonech se bavime. ve vetsine pripadu staci obycejny bipolarni tranzistor a lidi tam cpou fety ktere se stejne naplno neotevrou.
posjirkaÚčastníktady máš několik možností:
– buď jej vzít někde jako MP3 nahrávku a tu pak arduinem spouštět a výsledek měřit
– vygenerovat nějákým jednoduchým zapojením (te´d nevím jestli se šum na diodě projevuje jako růžový nebo bílý)
– vygenerovat jej z arduina pomocí nějákého algoritmu změny frekvence (nastavení čítače)
pár rychlých nálezů na netu:
http://www.instructables.com/id/White-noise-sound-machine-for-under-20/step3/Create-custom-white-noise/
http://arduino.stackexchange.com/questions/6715/audio-frequency-white-noise-generation-using-arduino-mini-pro
http://fritzing.org/projects/sleepduinojen poznámka: pokud použije arduino na generovaní šumu asi mu nezbude moc prostoru pro analýzu. Stejně bych radši použil Raspberry PI
posjirkaÚčastníkzátěž byl 1k takže cca 1mA ale nepředpokládám zhoršení když je jako oddělovač použitý OZ ze zpětnou vazbou
posjirkaÚčastníktady je fotka pro 150/255 zvlnění tu velké, ale jak říkám stavěl jsem to z toho co bylo po ruce.
Attachments:
posjirkaÚčastníktak jsem to dnes odzkoušel :
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpgzapojení jsem výrazně zjednodušil pro rychlou zkoušku (nebyl tam trimr, kapacity co přišli pod ruku, OZ by TL072, …) Trochu jsem měl strach z toho abych neodpáli Arduino, když PWM signál je spojný přes odpor z výstupem až 10V.
No výsledek je, že se mi to jevý jako funkční řešení, jen oddělit vstup arduinu od zbytku zapojení pomocí optočlenu.
dosáhl jsem rozsahu 0-9V (12V nájení) což při podmínkách testu je zcela vyhovující.
Linearitu jsem netestoval ale šlo mi o výslednou křivku. Testoval jsem nastavení 80/255, 150/255, 250/255 .
Zvlnění tam je Při 3 V to bylo cca 0,5V zvlnění ale používal jsem vstup s 500Hz PWM signálem. Se zvyšujícím se napětím zvlnění mizelo až při 9V mělo cca 0,1V.Attachments:
posjirkaÚčastníkřekl bych, že ten kondenzátor dělal impulz na zavření tranzistoru méně strmý/šikmý a tím pádem to mělo takový pozvolnější průběh. Je třeba to vyzkoušet, ale když jsem se díval na ten převodník na ebay tak mi připadjí ty součástky velmi podobné tomu c jsem zkoušel simulovat. Ono se to totiž prodává i u nás v ČR. :
http://www.c-n-c.cz/viewtopic.php?f=56&t=8650
http://www.cncshop.cz/prevodnik-pwm-na-0-10vv podstatě podle součástek podobné zapojení jako toto:
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpgjen to má navíc optočlenem oddělené .
posjirkaÚčastníkvšechno jde. Jen když se dívám na to řešení je docela „not friendly“ pro tuto funkci.
Kdyby spoužil celý krok pro otáčení a né půl kroky mohls to vše dělat ve smyčce Loop, jen posunem bitu a reagovalo by ti to kdy budeš potřebovat. Takto musíš použít před definicí proměnné příkaz „volatile“ ( https://www.arduino.cc/en/Reference/Volatile ) aby ti reagoval i v případě přerušení hlavní smyčky a nastavit přerušení na pin tlačítka ( https://www.arduino.cc/en/Reference/AttachInterrupt ). Toto přerušení přeruší hlavní program a vykoná funkci, na kterou se v definici přerušení odkazuješ. Až skončí tato funkce, smyčka hlavního programu se opět rozjede tam, kde skončila a v klidu pokračuje. Jen musíš hlídat aby se ti nezacyklila. To nastane, kdy funkce volaná přerušení trvá déle než interval mezi přerušeními. Můžeš dokonce ragovat zvlášť na na změnu stavu, na přechod na log. 0 a na přechod na log.1.posjirkaÚčastníkto bude asi něco podobného. jen mám trochu obavy z té nominální frekvence. Tady uvádí 1-3kHz, arduino má defaultně cca 450Hz.
posjirkaÚčastníkrád jsem pomohl 🙂
posjirkaÚčastníkto bohužel není muj boj. Tuto část jsem převzal z tveho kodu.
NAUČTE SE POUŽÍVAT PÁROVÉ ZNAČKY „CODE“posjirkaÚčastníkprosím používejte párové značky CODE, jinak je kod špatně formátovaný a zároveń není použitelný.
zkus tento upravený kod:// Krokový motor a driver #define tlacitko 2 // cislo pinu s talcitkem #define rychlost1 1 // prvni -standratni rychlost #define rychlost2 2 // rychlost pri stisku tlacitka // čísla pinů pro digitální výstupy const int in1 = 8; const int in2 = 9; const int in3 = 10; const int in4 = 11; // proměnná pro nastavení rychlosti, // se zvětšujícím se číslem se rychlost zmenšuje int rychlost =1; // int uhel = 90; void setup() { // inicializace digitálních výstupů pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(tlacitko, INPUT); } void loop() { if(digitalRead(tlacitko) == 0){ // kdyz je stisknuto tlacitko rychlost = rychlost2; // sniz rychlost } else { // jinak rychlost = rychlost1; // pouzij normalni rychlost } // plná rotace o 360 stupňů = 512 volání // funkce rotacePoSmeru() či rotaceProtiSmeru() for(int i=0;i<(uhel*64/45);i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny delay(1000); for(int i=0;i<(uhel*64/45);i++){ rotaceProtiSmeru(); } // pauza po dobu 1 vteřiny delay(1000); } // zde následují funkce pro volání jednotlivých // kroků pro otočení po či proti směru hodinových // ručiček void rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8(); } void rotaceProtiSmeru() { krok8(); krok7(); krok6(); krok5(); krok4(); krok3(); krok2(); krok1(); } // každý krok obsahuje výrobcem dané pořadí // pro správné spínání motoru a následnou // pauzu, kterou určujeme rychlost otáčení void krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost); } void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); }
posjirkaÚčastníkto je vcelku jasné. bavíme se o proměnné typu byte která nabývá hodnot 0-255.
Když dělíš -5 st. c tak ti vyjde 255-5 = 250 což je v hex. kodovani rovno „FA“.
zkus toto:#include <OneWire.h> #include <DallasTemperature.h> #include <Arduino.h> #include <TM1637Display.h> #define CLK 2 #define DIO 3 TM1637Display displej(CLK,DIO); const int pinCidlaDS = 4; // nastavení čísla vstupního pinu OneWire oneWireDS(pinCidlaDS); DallasTemperature senzoryDS(&oneWireDS); byte teplota=0; int rele=8; void setup() { pinMode(rele,OUTPUT); Serial.begin(9600); senzoryDS.begin(); displej.setBrightness(8);//jas displeje 8-15 } void loop() { senzoryDS.requestTemperatures(); teplota=senzoryDS.getTempCByIndex(0); Serial.print("Teplota cidla DS18B20: "); Serial.print(senzoryDS.getTempCByIndex(0)); Serial.println(" stupnu Celsia"); // pauza pro přehlednější výpis delay(1000); if(teplota>25){ digitalWrite(rele,LOW);//sepne rele } else { digitalWrite(rele,HIGH);//rozepne rele } uint8_t vypis[] = { 0, 0, 0, 0 };//nastavení displeje na zobrazení teploty if(teplota<1){ vypis[0]=(SEG_G); } teplota = abs(teplota); // prepocet na absolutni hodnotu vypis[1]=displej.encodeDigit((teplota/10)/10);//teplota stovky vypis[2]=displej.encodeDigit((teplota/10)%10);//teplota desítky vypis[3]=displej.encodeDigit((teplota%10)%10);//teplota jednotky displej.setSegments(vypis); }
jinak pro vkladani kodu používej párové značky CODE. Je to to tlačítko v horni části odpovědi s nápisem CODE. jinak se ti špatně vloží text a není pak čitelný
posjirkaÚčastníkpredpokladam ze mas spravne propoje mezi arduinem a prevodnikem.
posjirkaÚčastníka co zkusit nechat zapnout a vynout podsviceni lcd? to taky jede na prevodnik a pokud ani to nepojede je spatne knihovna nebo prevodnik. udelej proste jednoduchy blik program. kdyby toto fungovalo tak nektere lcd jsou citlive kdyz nemaji volne piny uzemnene. je otazkou jak je to reseno na prevodniku….
-
AutorPříspěvky