-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Gergosz2
veterán
válasz
JozsBiker #18965 üzenetére
Na én valami ilyesmivel próbálkoznék. Boarodon nem próbáltam ki, csak gyorsan összedobtam. Amit bekéne állítani az a
ADC_GAIN
ésADC_OFFSET
, Utóbbit 512-re tippelem viszont látom, hogy a modulon van valami potméter is így tipper a gain az állítható.
Ez a kód most nullát fog mindenre visszaadni amígyADC_GAIN
-t nem állítod be.
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
setupPWMInterrupt();
bufferIterator = 0;
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
}
void loop()
{
if (0u == bufferIterator)
{
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
ADC_BUFFER[bufferIterator] = analogRead(ADC_PIN);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) ) bufferIterator = 0u;
} -
-
válasz
JozsBiker #18965 üzenetére
Én a min-max kiválasztás helyett inkább négyzetes átlagolnám (RMS) a 10 ciklus alatt vételezett adatokat, majd arra alkotnék "tapasztalati tényezőt".
A peak-to-peak értékek nagyon becsapják a mérésed, mert ugyanazt fogja adni akkor is, ha:
- Egy cikluson belül egy-egy mérés idejére leng ki a csúcs (tüske kapcsüzemű tápok esetén)
- Egy cikluson belül teljes szinusz hullám ideje alatt ment a terhelés (ohmikus fogyasztók)Gondolom a lakatfogó is használ valami mozgóátlagot, és emiatt nem egyezik a mérés a tieddel.
Új hozzászólás Aktív témák
Hirdetés
- Core I9 ERŐMŰ Lenovo P1 Gen2 (8mag/16 szál 32Gb DDR4 1Tb SSD 4Gb Nvidia) laptopom eladó!!!
- Új Dobozos Lenovo Yoga Slim 6i Gamer Procis Ultrabook 14" -35% i5-13500H 16/512 Iris Xe FHD+ OLED
- Új Dell Inspiron 14 5435 Ultrabook -50% 14" Bivaly AMD Ryzen 7 7730U 8Mag 16GB 512GB FHD+ IPS
- MSI Thin - 12450h, RTX 4050 és 16gb RAM + 1tb SSD
- HP ProDesk 600 G2 SFF PC, Intel 6. generációs CPU, SSD és RAM nélkül
- AKCIÓ! Csere-Beszámítás! Manli RTX 3070Ti 8GB GDDR6X Videokártya!
- 115.000 ft -tól Országosan a legjobb BANKMENTES részletfizetési konstrukció! ASUS ROG Strix G18
- Steam, EA, Ubisoft és GoG játékkulcsok, illetve Game Pass kedvező áron, egyenesen a kiadóktól!
- Samsung Galaxy A13 64GB, Kártyafüggetlen, 1 Év Garanciával
- DELL PowerEdge R740 rack szerver - 2xGold 6130 (16c/32t, 2.1/3.7GHz), 64GB RAM, 10Gbit HBA330, áfás
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest