Სარჩევი:

დენის წყაროს სიხშირე და ძაბვის გაზომვა არდუინოს გამოყენებით: 6 ნაბიჯი
დენის წყაროს სიხშირე და ძაბვის გაზომვა არდუინოს გამოყენებით: 6 ნაბიჯი

ვიდეო: დენის წყაროს სიხშირე და ძაბვის გაზომვა არდუინოს გამოყენებით: 6 ნაბიჯი

ვიდეო: დენის წყაროს სიხშირე და ძაბვის გაზომვა არდუინოს გამოყენებით: 6 ნაბიჯი
ვიდეო: GIGA BASS KIT ინსტალაცია გაუქმდა "შემდეგ" ტონის კონტროლი - AUDIO SIGNAL TESTING | აქტიური სიყვარული 2024, ივლისი
Anonim
ელექტრომომარაგების სიხშირე და ძაბვის გაზომვა არდუინოს გამოყენებით
ელექტრომომარაგების სიხშირე და ძაბვის გაზომვა არდუინოს გამოყენებით

შესავალი:

ამ პროექტის მიზანია გაზომოს მიწოდების სიხშირე და ძაბვა, რომელიც ინდოეთში 220 -დან 240 ვოლტამდე და 50 ჰც -მდეა. მე გამოვიყენე Arduino სიგნალის გადასაღებად და გამოვთვალოთ სიხშირე და ძაბვა, თქვენ შეგიძლიათ გამოიყენოთ ნებისმიერი სხვა მიკროკონტროლერი ან დაფა. წრე მოითხოვს რამდენიმე კომპონენტს და საკმაოდ ზუსტია ყველა პრაქტიკული მიზნისთვის.

ნაბიჯი 1: საჭირო კომპონენტები

  • არდუინო უნო
  • IC LM358
  • ქვევით ტრანსფორმატორი (220V დან 12V)
  • კონდენსატორები:

    • 0.1uF
    • 2 x 1uF
  • რეზისტორები:

    • 3 x 1 kOhm
    • 2 x 100kOhm
    • 1.5 კმ
    • 3.3 კმ
    • 6.8 კმ
  • 3 x 1N4148 დიოდი
  • პურის დაფა და ჯუმბერის მავთული (სურვილისამებრ)

ნაბიჯი 2: სქემატური დიაგრამა

სქემატური დიაგრამა
სქემატური დიაგრამა
სქემატური დიაგრამა
სქემატური დიაგრამა

ზემოაღნიშნულ წრეში, ტრანსფორმატორის პირველადი დაკავშირებულია მიწოდების ქსელთან და პირველადი დაკავშირებულია ჩვენს საზომ წრედთან

ნაბიჯი 3: სქემის გაგება

წრის გაგება
წრის გაგება
წრის გაგება
წრის გაგება
წრის გაგება
წრის გაგება

ფუნქციონალურობის მიხედვით, ეს წრე შეიძლება დაიყოს ოთხ ნაწილად:

პასუხი: ნულოვანი გადაკვეთის დეტექტორის წრე

ეს სქემა წარმოქმნის 5 ვ კვადრატულ პულსს, როდესაც სინუსის ტალღა პოზიტიურიდან უარყოფითზე გადადის. რეზისტორი R1 D1 და D2– თან ერთად ზღუდავს შეყვანის ძაბვის ცვალებადობას დიოდურ კვანძზე –0,6V– დან +5,6V– მდე (ვივარაუდოთ, რომ დიოდური ძაბვა იქნება 0,6 ვ). გარდა ამისა, თქვენ შეგიძლიათ გაზარდოთ ჩართვის ძაბვის დიაპაზონი R1 მნიშვნელობის გაზრდით.

რეზისტორი R2 და R3 ქმნიან ძაბვის გამყოფს, რათა შეზღუდოს უარყოფითი ძაბვის ცვლა -0.24 ვოლტამდე, რადგან LM358- ის საერთო რეჟიმის ძაბვა შემოიფარგლება -0.3 ვოლტამდე.

რეზისტორი R4, R5, კონდენსატორი C1 და op-amp (აქ გამოიყენება როგორც შედარება) ქმნის Schmitt Trigger სქემას, სადაც რეზისტორი R4 და R5 ადგენენ ჰისტერეზს შეყვანისას +49.5mV მიწის ზემოთ. Schmitt Trigger– ის გამომუშავება მიეწოდება Arduino PIN2– ს შემდგომი დამუშავებისთვის.

B: იზოლაცია და ძაბვა შემცირდება

როგორც სახელი გვთავაზობს, ეს ნაწილი იზოლირებს და ამცირებს ძაბვას დაახლოებით 12Vrms– მდე. შემცირებული ძაბვა შემდგომში იკვებება ინსტრუმენტული წრედით.

C: პიკის დეტექტორის წრე

ეს წრე განსაზღვრავს შეყვანის სიგნალის მაქსიმალურ პიკურ ძაბვას. რეზისტორის გამყოფი R6 და R7 ამცირებენ შეყვანის ძაბვას 0.23 ფაქტორით (12Vrms მცირდება 2.76Vrms– მდე). დიოდი D3 ატარებს სიგნალის მხოლოდ დადებით ნახევარ ციკლს. ძაბვა C2- ზე იზრდება გასწორებული სიგნალის პიკის მნიშვნელობამდე, რომელიც მიეწოდება არდუინოს ანალოგურ პინ A0- ს ძაბვის შემდგომი გამოსათვლელად.

გარდა ამისა, თქვენ შეგიძლიათ შეცვალოთ ეს წრე ზუსტი პიკის დეტექტორის სქემით, როგორც ეს აქ არის ნახსენები. მაგრამ ჩემი სადემონსტრაციო მიზნებისთვის, ზემოხსენებული წრე საკმარისი იქნება.

დ: არდუინო

ამ ნაწილში Arduino იჭერს Schmitt Trigger– ის მიერ წარმოქმნილ კვადრატულ იმპულსებს და კითხულობს ანალოგიურ ძაბვას პიკის დეტექტორის წრიდან. მონაცემები შემდგომში მუშავდება კვადრატული პულსის დროის პერიოდის (შესაბამისად სიხშირის) (რომელიც უდრის ac მიწოდების დრო პირს) და მიწოდების ძაბვის დასადგენად.

ნაბიჯი 4: სიხშირისა და ძაბვის გამოთვლა

სიხშირის გაანგარიშება:

არდუინოს დახმარებით შეგვიძლია გავზომოთ სიგნალის დროის პერიოდი T. კვადრატული ტალღის იმპულსები ნულოვანი გადაკვეთის დეტექტორიდან იკვებება პინ 2-ით, აქედან შეგვიძლია გავზომოთ თითოეული პულსის დროის პერიოდი. ჩვენ შეგვიძლია გამოვიყენოთ არდუინოს შიდა ქრონომეტრი (კონკრეტულად ტაიმერი 1), რათა გამოვთვალოთ დროის შუალედი კვადრატული პულსის ორ ამომავალ კიდეებს შორის შეფერხებების დახმარებით. ტაიმერი იზრდება 1 -ით საათის ციკლზე (წინასწარგამრიცხველი = 1) და მნიშვნელობა ინახება რეესტრში TCNT1. აქედან გამომდინარე, 16 მეგაჰერციანი საათი მრიცხველს ზრდის ყოველ მიკროწამში 16 -ით. ანალოგიურად prescaler = 8 ტაიმერი იზრდება 2 -ით ყოველ მიკროწამში. აქედან გამომდინარეობს პერიოდი ორ ამოსავალ ზღვარს შორის

T = (TCNT1 მნიშვნელობა) / დრო თითოეული დათვლისთვის

სად, თითოეული დათვლისთვის საჭირო დრო = წინასწარგამრიცხველი / (Arduino საათის სიჩქარე (16MHz)

აქედან გამომდინარე, სიხშირე f = 1 / T = (Arduino საათის სიჩქარე (16MHz) / (Prescaler * TCNT! მნიშვნელობა)

მაშასადამე, ტაიმერის სიჩქარე (Hz) არის მითითებული = (Arduino საათის სიჩქარე (16MHz)) / წინასწარგამრიცხველი

და სიგნალის სიხშირე მოცემულია = (Arduino საათის სიჩქარე

შესაბამისად, ჩვენ შეგვიძლია გამოვთვალოთ სიხშირე f მიმართებიდან f = 1/T.

ძაბვის გაანგარიშება:

Arduino– ს საბორტო ADC– ს აქვს 10 ბიტიანი რეზოლუცია (შესაძლო მნიშვნელობები = 2^10 = 1024), დააბრუნებს მნიშვნელობებს 0-1023 დიაპაზონში. შესაბამისი ანალოგური ძაბვის V გამოსათვლელად ჩვენ უნდა გამოვიყენოთ შემდეგი მიმართება

V = (ADC კითხვა) * 5/1023

მიწოდების ძაბვის Vs (rms) გამოსათვლელად უნდა გავითვალისწინოთ ტრანსფორმატორის კოეფიციენტი, რეზისტორის გამყოფი R6R7 და პიკის დეტექტორის წრე. ჩვენ შეგვიძლია უბრალოდ შევაჯამოთ სხვადასხვა ფაქტორი/თანაფარდობა, როგორც:

ტრანსფორმატორის თანაფარდობა = 12/230 = 0.052

რეზისტორის გამყოფი = R7/(R6 + R7) = 0.23

პიკის დეტექტორის წრე = 1.414

Vs (rms) = V/(1.414*0.052*0.23) = (ADC კითხვა)*0.289

უნდა აღინიშნოს, რომ ეს მნიშვნელობა შორს არის ფაქტობრივი მნიშვნელობისაგან, ძირითადად ტრანსფორმატორის თანაფარდობის შეცდომისა და დიოდური ძაბვის ვარდნის გამო. ამის თავიდან აცილების ერთ -ერთი გზაა ფაქტორის განსაზღვრა სქემის შეკრების შემდეგ. ეს არის მიწოდების ძაბვისა და კონდენსატორ C2- ზე ძაბვის გაზომვა ცალკე მულტიმეტრით, შემდეგ გამოითვლება Vs (rms) შემდეგნაირად:

Vs (rms) = ((მიწოდების ძაბვა *5)/(ძაბვა C2 *1023)) *(ADC კითხვა)

ჩემს შემთხვევაში, Vs (rms) = 0.33*(ADC კითხვა)

ნაბიჯი 5: Arduino კოდი

#განსაზღვრეთ ვოლტი_ A0- ში // ანალოგური ძაბვის წაკითხვის პინი

არასტაბილური uint16_t t_ პერიოდი; uint16_t ADC_value = 0; float volt, freq; void isr () {t_period = TCNT1; // შეინახეთ TCNT1 მნიშვნელობა t_period– ში TCNT1 = 0; // გადატვირთეთ ტაიმერი 1 ADC_value = analogRead (volt_in); // წაკითხვის ანალოგური ძაბვა} float get_freq () {uint16_t ქრონომეტრი = t_ პერიოდი; თუ (ტაიმერი == 0) დააბრუნე 0; // ნულის გაყოფის თავიდან აცილების მიზნით სხვაგან დაბრუნება 16000000.0/(8UL*ტაიმერი); // სიხშირე მოცემულია f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = ბიტი (CS11); // დააყენეთ prescaler 8 TCNT1 = 0; // გადატვირთეთ ტაიმერი 1 მნიშვნელობა TIMSK1 = ბიტი (TOIE1); // Timer1 overflow interrupt EIFR | = bit (INTF0); // გასუფთავება INT0 შეწყვეტის დროშა Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // გარე შეფერხების (INT0) დაყოვნების (1000) ჩართვა; detachIntruptrupt (0); freq = get_freq (); ვოლტი = ADC_ ღირებულება*0.33; სიმებიანი ბუფ; buf += სიმებიანი (სიხშირე, 3); buf += F ("Hz / t"); buf += სიმებიანი (ვოლტი); buf += F ("ვოლტი"); Serial.println (buf); }

ნაბიჯი 6: დასკვნა

დასკვნა
დასკვნა
დასკვნა
დასკვნა

თქვენ შეგიძლიათ შეიკრიბოთ წრე პურის დაფაზე და შეცვალოთ კოდი და დაამატოთ SD ბარათი მონაცემების შესანახად, რომელიც მოგვიანებით შეიძლება გაანალიზდეს. ერთი ასეთი მაგალითია, თქვენ შეგიძლიათ გაანალიზოთ ძაბვა და სიხშირე პიკის საათებში.

მიკროსქემმა, რომელიც მე შევკრიბე პურის დაფაზე, გამოიყენა LM324 (quad opamp) LM358 (ორმაგი opamp) ნაცვლად, რადგან იმ მომენტში მე არ მქონდა ეს IC და COVID-19 პანდემიის გამო ქვეყნის მასშტაბით ჩაკეტვამ გამიჭირდა ახალი IC– ის მიღება რა მიუხედავად ამისა, ეს არ იმოქმედებს მიკროსქემის მუშაობაზე.

მოგერიდებათ კომენტარის გაკეთება ქვემოთ ნებისმიერი შემოთავაზებისა და შეკითხვისთვის.

გირჩევთ: