Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   693 / 839
(#) superuser válasza icserny hozzászólására (») Máj 19, 2021 /
 
Csak átfutottam gyorsan, nem számoltam vissza a timert. Ha annyi, akkor annyi
(#) mateatek válasza szikorapéter hozzászólására (») Máj 19, 2021 /
 
Az ICR1 regiszterbe írt értékkel tudod változtatni a frekvenciát.
De a tömb, ami a timer kitöltési tényezőjét állítja, 1600-as ICR értékhez használható. Ha például csökkented a frekvenciát és beírsz az ICR1 regiszterbe 3200-as értéket, akkor a tömbben definiált értékekkel nem tudsz elérni 100%-os kitöltési tényezőt, hanem csak 50%-ot, mert 3200-as ICR1 értékhez 3200-as OCRx érték lesz a 100%.
Tehát minden frekihez más értékeknek kell lennie a tömbben.

Tudom, hogy a hardver csere a gyengék fegyvere, de egy LGT8F328D-vel ez az egész könnyebben megoldható lenne, mert van benne 2 darab 8 bites DAC. Arduino IDE alól használható és olcsó is.
A hozzászólás módosítva: Máj 19, 2021
(#) szikorapéter válasza mateatek hozzászólására (») Máj 19, 2021 /
 
Valahol van egy az említett típusból de valamiért oprendszer csere óta nem látja a gépem....
(#) mateatek válasza szikorapéter hozzászólására (») Máj 20, 2021 /
 
Még azt is meg lehetne oldani, hogy a timer1 működik ugyanilyen frekvenciával, mnt most és a táblázat tökéletes lesz. De a megszakítást, ami a frekvenciát állítja, azt átdrótozni a timer2-re. Sajnos, az csak 8 bites, ezért vélhetőleg nem tudod majd olyan finoman állítani a frekit. Ha szükséges a freki nagyon finom állítása, akkor át kell állni olyan MCU-ra amiben van 2 darab 16 bites timer. (atmega328pb, lgt8f328p, esetleg atmega2560)
(#) szikorapéter válasza mateatek hozzászólására (») Máj 20, 2021 /
 
Elvileg akkor lényegében elég lenne a "táblázat" beolvasási sebességét változtatnom , minden más maradhat ugyan az?

Megpróbálom az LGT8F328P-t üzemre bírni amint hazaérek melóból.
(#) mateatek válasza szikorapéter hozzászólására (») Máj 20, 2021 /
 
Az 1-es timert ugyanazokkal a paraméterekkel kell indítani, mint eddig, de a megszakítást nem kell beállítani. A megszakítást LGT8F328P esetében a 3-as timerre kell beállítani, aminek a frekijét kell állítani ugyanabban a beállításban (fast pwm). Ahogy növekszik a freki, úgy egyre gyorsabban változtatja a kimenetén az 1-es timer a PWM jelet.
Ha meg LGT8F328D van otthon, akkor ott egészen más program kell, mert ott a DAC csinálná a szinusz jelet a kimeneten.
(#) szikorapéter válasza mateatek hozzászólására (») Máj 20, 2021 /
 
Egyenlőre még gondolkozok akkor mert a program módosítása elég nehézkesen megy.
(#) szikorapéter válasza mateatek hozzászólására (») Máj 20, 2021 /
 
Szia, nem sikerült végül az LGT-t működésre bírni, az alapprogram fut a gép látja de programozni nem tudja, még ICSP-n keresztül sem.
(#) mateatek válasza szikorapéter hozzászólására (») Máj 20, 2021 /
 
Nem tudom milyen lapkád van, de ha nem bootloaderen keresztül akarod programozni, akkor a "larduino hsp" kulcsszóra keressél rá.

Szerk: illetve a "larduino isp" kulcsszóra is.
A hozzászólás módosítva: Máj 20, 2021
(#) Bell válasza szikorapéter hozzászólására (») Máj 21, 2021 /
 
Két dolog kell hozzá: az alaplap felvétele és a könyvtárak telepítése.
Ezen az oldalon megvan hozzá minden.
Gondom volt a könyvtárak telepítésével az Arduino/library mappába, ami a mellékelt ábra szerint már működik.
(#) szikorapéter válasza Bell hozzászólására (») Máj 21, 2021 /
 
Próbálkoztam egy ideig, havertól kölcsönkértem az övét az egyből megy, ergo ez a lap hibája lesz, mivel az enyém nála se megy...
A telepítés jó lett de a lap lehet hibás.

Annyi még hogy esetleg MSP430 van G2553-as procival.
(#) Josi777 válasza szikorapéter hozzászólására (») Máj 22, 2021 /
 
Ha korrekt frekvencia változtatást szeretnél, akkor ne megszakítással időzített tábla kiírásban gondolkodj, hanem a pollingolás (loop) ágba tedd. Az előnye, hogy sokkal nagyobb frekvenciát is elő lehet állítani, hátránya, hogy minden módosítás után újra ki kell számolni a loop ciklus idejét.

De ha ez nem megy, akkor a másik tanács, hogy a megszakítást a legnagyobb frekvenciához tartozóan állítsd be, majd ezen belül egy frekvenciából számított érték fogja meghatározni, hogy az adott megszakításban a tábla melyik értékét kell kiírni, így nem kell a megszakítás számlálóját változtatni.
(#) szikorapéter válasza Josi777 hozzászólására (») Máj 22, 2021 /
 
Szia, a maximum olyan 150Hz környéke lenne, korábban gondolkoztam a 400Hz-en is ami az itthoni egyik 3F frekiváltóm csúcsa, de letettem róla, révén 1F motornál ez elég komplex feladat lenne, és egyenlőre ezt ilyen tanulmányi projectnek szántam.
(#) Josi777 válasza szikorapéter hozzászólására (») Máj 22, 2021 /
 
Ha a loop-ba rakod, azzal 1K fölé is el lehet menni 256-os táblával. Cserébe már nem lesz elég időd az analóg port olvasására, viszont encoderrel megoldható a gyors változtatása a frekvenciának.
(#) vargham válasza Josi777 hozzászólására (») Máj 22, 2021 /
 
Az ADC lassú, de szerencsére elboldogul egyedül is.
El kell indítani a mintavételezést, és nem pollozni a ready flaget, hanem interruptot tenni rá. Mikor készen van, akkor az ISR-ben kiolvasni, beállítani a következő csatornát, és indítani. Így a main loop minimális zavarásával mindig lesz ADC adat.
(#) icserny válasza szikorapéter hozzászólására (») Máj 23, 2021 /
 
"Annyi még hogy esetleg MSP430 van G2553-as procival."
MS430G2553 esetén vigyázni kell a PWM-mel, mert nincs kettős bufferelés, azaz a kitöltési tényező beírását szinkronizálni kell. Ha "lekésed" a kis kitöltési tényező beírását, akkor egy egész periódusra bekapcsolva marad a kimenet.

Amúgy neked nem egy analóg VCO áramkör kellene inkább?
(#) GPeti1977 válasza icserny hozzászólására (») Máj 23, 2021 /
 
Nrm, frekvenciaváltót akar késziteni villanymotorhoz.
(#) Josi777 válasza vargham hozzászólására (») Máj 24, 2021 /
 
Ez elvileg jó, csakhogy a polling időzítésnek az a lényege, hogy mindig ugyanannyi a ciklusidő. Ha időközönként beleveszünk egy érték beolvasást, akkor már nem lesz azonos. Ezt lehet korrigálni azzal, hogy amikor nincs még új érték az ADC regiszterben, akkor üres ciklusokat hajtunk végre, de ezzel késleltetjük feleslegesen, amivel a felső határfrekvenciát hozzuk lejjebb. A kérdés, hogy ez mennyire számít. Viszont ha enkóderrel változtatunk értéket, akkor csak az egyik fázis le- vagy felfutó jelére lesz a loopban késleltetés.
(#) szikorapéter válasza Josi777 hozzászólására (») Máj 24, 2021 /
 
Hát ami biztos rendesen összezavarodtam, van itt aki komolyabban ért az arduino programozásához, én annyira nem teljesen, így ezért is komolyabb bonyodalom nekem egy program megírása erre a platformra.
Ami biztos hogy a jelenleg működő programmal legalább annyit elértem hogy nem nyit össze semmi IGBT, így végül elválasztón keresztül kapott 320V egyenfeszültséget a híd és egy mosógépmotor (320W-os régi Hajdu motor) szépen ment, és erő is volt benne, ezt már viszonylagos sikernek könyvelem el.
A kérdés további része hogy kiként tudnám változtatni az alap frekit úgy hogy a motorom akár egy 10Hz-120hz között is forgatható legyen?

Utánna olvastam és arról amit korábban írtam hogy 150Hz -et is kicsit már sokallom azok után hogy a kondenzátorosoknak nehezebb a szabályozása, ha a segédfázison marad a kondenzátor.
(#) GPeti1977 válasza szikorapéter hozzászólására (») Máj 24, 2021 /
 
Még azt is vedd figyelembe hogy 50Hz alatt a feszültséget, azaz a max pwm kitöltést is arányosan csökkenteni kell.
(#) szikorapéter válasza GPeti1977 hozzászólására (») Máj 24, 2021 /
 
Igaz, mivel 50hz alatt a motor feszültségfelvételét csökkenteni kell mert leég....
(#) szikorapéter válasza szikorapéter hozzászólására (») Máj 24, 2021 /
 
Ezt a programot Githubon találtam ( Link ) , ezen már tudom változtatni a PWM frekijét, az viszont jó kérdés hogy a kimeneti freki mekkora? Ami másik fura hogy a szkópon néha mintha nem ellenfázisú jelet mutatna hanem azonost? Ez lehet a szkópom egyik mérőkábelének hibája is de lehet a kódé, az előző fix 50hz-es kódnál stabil volt a képem, itt ugrál kicsit.

A0 a bemenet a potmétertől 10-13-as láb az SPWM jel kimenet, elvileg ellenfázisban egymással.

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3.  
  4. #define LookupEntries (512)
  5.  
  6. //Varible declaration
  7. static int microMHz = 16; // Micro clock frequency
  8. static int freq;     // Sinusoidal frequency
  9. static long int period;   // Period of PWM in clock cycles. 1600 gives 10KHz.
  10. static unsigned int lookUp[LookupEntries];
  11. static char theTCCR1A = 0b10000010; //varible for TCCR1A
  12. static unsigned long int phaseinc, switchFreq;
  13. static double phaseincMult;
  14.  
  15. //Function prototypes
  16. int setFreq(int _freq);
  17. int setSwitchFreq(int sfreq);
  18. void registerInit(void);
  19.  
  20.  
  21. void setup(){
  22.   Serial.begin(9600);
  23.   setSwitchFreq(10000);  
  24.   setFreq(50);
  25.   registerInit();
  26. }
  27.  
  28. void loop(){
  29.   /*
  30.   // Un-comment inorder to read from A1 to change the switching frequency, note that if you have a noisey potentiometer the
  31.   // it will disrupt the signal as the lookup table needs to be regenerated everytime the switing frequency is changed
  32.   int sensorValue = analogRead(A1);
  33.   static int sensorValue2;
  34.   if(sensorValue > sensorValue2*1.01 || sensorValue < sensorValue2*0.99){
  35.     sensorValue2 = sensorValue;
  36.     setSwitchFreq(map(sensorValue, 0, 1023, 1000, 19000));
  37.    
  38.     Serial.println(switchFreq);
  39.     Serial.print(phaseinc>>23);
  40.     Serial.print(".");
  41.     Serial.print(phaseinc&0x007FFFFF);
  42.     Serial.print("\n");  
  43.   }*/
  44.  
  45.   // Value read in from A0 changes the frequency of the sine wave
  46.   int sensorValue = analogRead(A0);
  47.   static int sensorValue2;
  48.   if(sensorValue > sensorValue2*1.01 || sensorValue < sensorValue2*0.99){
  49.     sensorValue2 = sensorValue;
  50.     setFreq(map(sensorValue, 0, 1023, 5, 300));
  51.    
  52.     Serial.print(phaseinc>>23);
  53.     Serial.print(".");
  54.     Serial.print(phaseinc&0x007FFFFF);
  55.     Serial.print("\n");  
  56.   }
  57. }
  58.  
  59. ISR(TIMER1_OVF_vect){
  60.   static unsigned long int phase, lastphase;
  61.   static char delay1, trig = LOW;
  62.  
  63.   phase += phaseinc;
  64.  
  65.   if(delay1 > 0){ // toggle the output pins one ISR call after phase has overflowed
  66.     theTCCR1A ^= 0b10100000;// Toggle connect and disconnect of compare output A and B.
  67.     TCCR1A = theTCCR1A;
  68.     delay1 = 0;  
  69.   }
  70.   else if((phase>>31 != lastphase>>31) && !(phase>>31)){ //if phase has overflowed . . .
  71.     delay1++;      
  72.     trig = !trig;
  73.     digitalWrite(13,trig); // pin can be used as triggre on oscilloscope
  74.   }
  75.   lastphase = phase;
  76.  
  77.   OCR1A = OCR1B = lookUp[phase >> 23];
  78. }
  79.  
  80. int setFreq(int _freq){
  81.   if(_freq < 0 || _freq > 1000){ // returns 0 if the frequency value is invalid
  82.     return 0;
  83.   } else {
  84.     freq = _freq;
  85.     phaseinc = (unsigned long int) phaseincMult*_freq;
  86.     return 1; // returns 1 if freqency set sucessfully
  87.   }
  88. }
  89.  
  90. int setSwitchFreq(int sfreq){
  91.   double temp;
  92.  
  93.   if(sfreq <= 0 || sfreq > 20000){
  94.     return 0;
  95.   } else {
  96.     switchFreq = sfreq;
  97.     period = microMHz*1e6/sfreq;
  98.     cli(); //disable global interupts while lookup table is made
  99.     TCCR1A = 0b00000010; //disconnect compare A and B while lookup table is generated
  100.     ICR1   = period;
  101.     for(int i = 0; i < LookupEntries; i++){ // Generating the look up table.
  102.       temp = sin(i*M_PI/LookupEntries)*period;
  103.       lookUp[i] = (int)(temp+0.5);       // Round to integer.    
  104.     }
  105.     //sindevisions*decimalbits/1MHz =
  106.     //1024*2^23/1e6 = 8,589.934592
  107.     phaseincMult = (double) period*8589.934592/microMHz;
  108.     phaseinc = (unsigned long int) phaseincMult*freq;
  109.     TCCR1A = theTCCR1A; // reconnect compare outputs
  110.     sei(); //re-enable interupts now that table has been made
  111.     return 1;
  112.   }
  113. }
  114.  
  115. void registerInit(void){
  116.   // Register initilisation, see datasheet for more detail.
  117.   TCCR1A = theTCCR1A; // 0b10000010;
  118.   /*10 clear on match, set at BOTTOM for compA.
  119.    00 compB disconected initially, toggled later to clear on match, set at BOTTOM.
  120.    00
  121.    10 WGM1 1:0 for waveform 15.
  122.    */
  123.   TCCR1B = 0b00011001;
  124.   /*000
  125.    11 WGM1 3:2 for waveform 15.
  126.    001 no prescale on the counter.
  127.    */
  128.   TIMSK1 = 0b00000001;
  129.   /*0000000
  130.    1 TOV1 Flag interrupt enable.
  131.    */
  132.   sei();             // Enable global interrupts.
  133.   // Set outputs pins.
  134.   DDRB   = 0b00000110; // Set PB1 and PB2 as outputs.
  135.   pinMode(13, OUTPUT); // Set trigger pin to output
  136. }
(#) kszabi hozzászólása Máj 24, 2021 /
 
Sziasztok!
Szeretnék egyszerre több eszközt programozni arduinoval.
Blue-pill, Black-pill, ESP.
Megoldható hogy egy sketch betöltésekor jöjjenek a beállítások, hogy ne kelljen mindig újra írni?

Köszi Szabolcs
(#) pipi válasza kszabi hozzászólására (») Máj 25, 2021 /
 
Hali! Gondolom nem szó szerint egyszerre, hanem egymás után
Én úgy csináltam hogy több arduinó van különböző mappába téve portable változatban (kell egy portable mappa bele, és abba bele a preferences.txt)
Minden telepített arduinónak saját külön indító parancsikonja van a saját project mappámba téve.
Igy a megfelelő parancsikont indítva a hozzátartozó beállítások a preferences.txt-ben megmaradnak, sajnos menüből kell az ino fált megnyitni, vagy rendszeresen szórakozni a win-ben az ino fájl társítással az aktuális arduinóhoz.
Külön csináltam az esp32-nek, az esp88266-nak, és a 3d nyomtatómnak... a library-k így nem vesznek össze
A hozzászólás módosítva: Máj 25, 2021
(#) GPeti1977 válasza szikorapéter hozzászólására (») Máj 25, 2021 / 1
 
(#) D_Zsolt hozzászólása Jún 5, 2021 /
 
Sziasztok!
Valaki alkotott már valamit az AS3935-re épülő villámdetektorokkal? Nem vagyok képben, melyik lib melyik panelhez való, kb. mindenki módosított valamit rajta akinek valami megoldása fellelhető.
Ami eddig megy:
Ez egy CJMCU-3935 AS3935 lap. A Digispark hangoló progijával (és libbel) fel tudom éleszteni, megy is 500kHz környékén. Egy másik megoldás (másik libbel) kódját feltöltve működik is amíg nem veszem el a tápot. Újraindítás után nem indul el, semmi életjel. Megint hangoló progi és működik, de ez terepen kivitelezhetetlen, a telepítés helyére évente megyek, jó lenne ha egy ott élő ismerős cserélni tudna benne mondjuk akkut ha az tönkremenne.
Eddig a körítés, valójában tapasztalat érdekelne, ki mivel oldotta meg? (ha nem marad más, akkor megismerkedem mélyebben a lelkével, de épp mással vagyok elfoglalva)
(#) Kera_Will válasza D_Zsolt hozzászólására (») Jún 6, 2021 /
 
500kHz nem egy jó választás ... mellette zörög a Kossuth ...
(#) D_Zsolt válasza Kera_Will hozzászólására (») Jún 6, 2021 /
 
500kHz az egyetlen választás, lévén mellette zörög és nem ott. Néhány napig kutakodtam, hogy mit merre és miért, az AS3935 adatlap 500kHz±3,5%-ot nevez meg működési frekvenciának, mert ezen a sávon nincs aktív adó (már a közvetlen környékén is alig). Ennek ismeretében építették ezt a csipet, így ezt nem én döntöm el és elég találat van a neten a működésére. A két kondit lecseréltem 680pF és 270pF-re, azóta ±2%-on belül tudom hangolni, tehát akár hangolás nélkül is tartományban van. Tegnapelőtt voltak villámok is, észleli is a próbapanelen, ez már jó is lenne. Most ahogy elnézem, meg kell ismerkedjek valamelyik libbel és meg kell írjam a sajátom, mert amint írtam, ami jó lenne az reboot után nem kel életre valamiért (mondjuk nem is ehhez a modulhoz írták a libet, hanem SparkFun (rossszul Digisparknak írtam korábban) vagy PWFusion. Nem értem a miértet, de ha nincs kész megoldás, akkor összehozok egyet. A cél a kimeneten egy buzzer, amit resetelni lehet, akár egy reboottal, akár egy gombnyomásra. Talán egyszer a jövőben lekapcsolhatja az egész műhelyét az ismerősömnek, aki elég gyakran szenved villámkárt, de addig még tesztelni kell). Amúgy nagyon korrekt kis holmi és elég bolondbiztos.
A hozzászólás módosítva: Jún 6, 2021
(#) Bakman válasza D_Zsolt hozzászólására (») Jún 6, 2021 /
 
Ha van hozzá kedved, próbáld ki a mellékelt analóg villámdetektort. Az időjárásjelzőmben dolgozik egy ilyen, nekem nagyon bejött. Mivel zavart is összeszedhet, ablakos figyelést kell programozni hozzá. Nálam akkor figyelmeztet, ha az elmúlt öt perc alatt öt vagy több jelzés érkezett a detektortól.

Igaz, lakóházak közelében megvan a veszélye a téves riasztásnak is. A szomszéd valamit hegesztett az udvaron tegnap. A lekapcsolást nem bíznám rá.
(#) D_Zsolt válasza Bakman hozzászólására (») Jún 6, 2021 /
 
Jól néz ki a grafikon! Nem nagyon szeretnék már panelt építeni csak ha nagyon muszáj, levegőben meg sosem szerettem építkezni, de mindenképp meggondolandó!!!
Következő: »»   693 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem