Სარჩევი:
- ნაბიჯი 1: შექმენით Pwm სიგნალი 50 ჰერცზე
- ნაბიჯი 2: Arduino პროგრამა ცვლადი მოვალეობის ციკლისთვის
- ნაბიჯი 3: ალტერნატივა 50Hz არდუინოს ქინძისთავებზე
- ნაბიჯი 4: მართეთ H ხიდი და გაფილტრეთ Pwm სიგნალი
ვიდეო: Arduino Sinewave ინვერტორებისთვის: 4 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
ამ პროექტში მე შევქმენი SPWM (სინუსური ტალღის პულსის ფართო მოდულირებული) სიგნალი ორი arduino pwm ციფრული ამონაწერიდან.
იმის გამო, რომ ასეთი პროგრამის შესაქმნელად მე უნდა ვისაუბრო arduino– ს სხვა ფუნქციებზე და თვისებებზე, სრული პროექტის ჩათვლით, ოსცილოსკოპის სურათებით და სხვადასხვა სიხშირისთვის, გთხოვთ ეწვიოთ ჩემს ვებ გვერდს:
ეპროექტიზონი
ნაბიჯი 1: შექმენით Pwm სიგნალი 50 ჰერცზე
უფრო მაღალი სიხშირით 50Hz სიგნალის შესაქმნელად აუცილებელია გარკვეული გამოთვლების გაკეთება. Arduino– ს სიხშირეები შეიძლება იყოს 8 MHz, მაგრამ ჩვენ გვსურს სიგნალი ცვალებადი ციკლის მქონე.
არდუინოს ცვლადი მოვალეობის ციკლის ტიპების გასაგებად შეგიძლიათ წაიკითხოთ ერთი და იგივე პოსტის 1, 2 და 3 ეს 3 ნაწილი.
დავუშვათ, რომ ჩვენი სიხშირეა 50 ჰც, რაც იმას ნიშნავს, რომ დროის პერიოდი 20 წმ. 10ms არის ნახევარი ციკლის პერიოდი. იმ 10ms ჩვენ გვჭირდება ბევრი pulses სხვადასხვა მოვალეობათა ციკლის დაწყებული მცირე მოვალეობათა ციკლები, შუა სიგნალი ჩვენ გვაქვს მაქსიმალური მოვალეობა ციკლები და დასრულდება ასევე მცირე მოვალეობაა ციკლები. სინუსური ტალღის გენერირებისთვის ჩვენ გამოვიყენებთ ორ ქინძისთავს დადებითი ნახევარი ციკლი და ერთი უარყოფითი ნახევარი ციკლი. ამისთვის ჩვენს პოსტში ჩვენ ვიყენებთ ქინძისთავებს 5 და 6 რაც ნიშნავს ტაიმერს 0.
გლუვი სიგნალისთვის ჩვენ ვირჩევთ ფაზის სწორ pwm სიხშირეს 31372 Hz- იხილეთ წინა პოსტი. ერთ-ერთი ყველაზე დიდი პრობლემა ის არის, თუ როგორ გამოვთვალოთ აუცილებელი მოვალეობა თითოეული პულსისათვის. ასე რომ, რადგან ჩვენი სიხშირე არის f = 31372Hz თითოეული პულსის პერიოდი არის T = 1/31372 = 31.8 us, ამიტომ ნახევარი ციკლისთვის პულსის რაოდენობა არის N = 10ms/31.8us = 314 პულსი. ახლა თითოეული პულსის მოვალეობის ციკლის გამოსათვლელად გვაქვს y = sinx, მაგრამ ამ განტოლებაში ჩვენ გვჭირდება გრადუსი, ასე რომ ნახევარ ციკლს აქვს 180 გრადუსი 314 იმპულსზე. თითოეული პულსისთვის გვაქვს 180/314 = 0.57 გრადუსი/პულსი. ეს ნიშნავს, რომ თითოეული პულსისთვის ჩვენ წინ მივდივართ 0.57 გრადუსით.
y არის მოვალეობის ციკლი და x პოზიციის მნიშვნელობა ნახევარ მოვალეობაში. თავდაპირველად x არის 0, შემდეგ x = 0.57, x = 1.14 და ასე შემდეგ, სანამ x = 180.
თუ ჩვენ გამოვთვლით 314 მნიშვნელობას, ვიღებთ მასივის 314 ელემენტს (ტიპი "int", რომელიც უფრო ადვილად გამოითვლება arduino– ით).
ასეთი მასივი არის:
int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};
თქვენ ხედავთ, რომ სინუსური ტალღის მსგავსად, მოვალეობის ციკლი ყველაზე დაბალია პირველ და ბოლო ელემენტში და ყველაზე მაღალი შუაში.
ნაბიჯი 2: Arduino პროგრამა ცვლადი მოვალეობის ციკლისთვის
ზემოთ მოცემულ სურათზე ჩვენ გვაქვს ცვლადი მოვალეობის ციკლის სიგნალები მასივის მნიშვნელობებით.
მაგრამ როგორ გავაკეთოთ ასეთი სიგნალი ??
ქვემოთ მოყვანილი პროგრამის ნაწილი იყენებს შეფერხებებს მოვალეობების ციკლის მნიშვნელობების შესაცვლელად
sei (); // შეწყვეტის ჩართვა
}
ISR (TIMER1_COMPA_vect) {// შეწყვეტა, როდესაც ტაიმერი 1 ემთხვევა OCR1A მნიშვნელობას
if (i> 313 && OK == 0) {// საბოლოო მნიშვნელობა ვექტორიდან პინ 6 -ისთვის
i = 0; // გადადით ვექტორის (მასივის) პირველ მნიშვნელობაზე
OK = 1; // ჩართეთ pin 5
}
x = sinPWM ; // x ვიღებთ მნიშვნელობას ვექტორიდან, რომელიც შეესაბამება პოზიციას (i არის ნულოვანი ინდექსირებული) -მოვალეობის ციკლის ღირებულება
i = i+1; // გადადით შემდეგ პოზიციაზე
}
ნაბიჯი 3: ალტერნატივა 50Hz არდუინოს ქინძისთავებზე
იმის გამო, რომ თითოეული პინი წარმოქმნის მხოლოდ ნახევარ სამუშაო ციკლს სინუსური ტალღის შესაქმნელად, ჩვენ ვიყენებთ ორ ქინძისთავს, რომლებიც ერთმანეთის მიყოლებით იცვლება ზუსტად 10 წამის შემდეგ (50 ჰც -ისთვის). ქინძისთავების ეს ცვლილება ხდება მასივის ბოლოს- მას შემდეგ, რაც ვთქვათ, პინ 5-მა გამოიმუშავა 314 პულსი, ეს პინი გამორთულია და ჩართულია პინ 6, რაც იგივეა, მაგრამ უარყოფითი მოვალეობის ციკლისთვის.
იმის გამო, რომ არდუინოს შეუძლია შექმნას მხოლოდ დადებითი სიგნალები, უარყოფითი მოვალეობის ციკლი მზადდება h- ში- ამის შესახებ შეგიძლიათ წაიკითხოთ აქ
ქინძისთავების შეცვლის პროგრამა:
sei (); // შეწყვეტის ჩართვა
}
ISR (TIMER1_COMPA_vect) {// შეწყვეტა, როდესაც ტაიმერი 1 ემთხვევა OCR1A მნიშვნელობას
if (i> 313 && OK == 0) {// საბოლოო მნიშვნელობა ვექტორიდან პინ 6 -ისთვის
i = 0; // გადადით ვექტორის პირველ მნიშვნელობაზე
OK = 1; // ჩართეთ pin 5
}
if (i> 313 && OK == 1) {// საბოლოო მნიშვნელობა ვექტორიდან pin 5 -ისთვის
i = 0; // გადადით ვექტორის პირველ მნიშვნელობაზე
OK = 0; // ჩართეთ pin 6
}
x = sinPWM ; // x აიღეთ მნიშვნელობა i ვექტორიდან შესაბამისი i (i არის ნულოვანი ინდექსირებული)
i = i+1; // გადადით შემდეგ პოზიციაზე
თუ (კარგი == 0) {
OCR0B = 0; // გააკეთეთ pin 5 0
OCR0A = x; // ჩართეთ პინ 6 შესაბამისი სამუშაო ციკლისთვის
თუ (კარგი == 1) {
OCR0A = 0; // გააკეთეთ pin 6 0
OCR0B = x; // ჩართეთ pin 5 შესაბამისი სამუშაო ციკლისთვის
}
}
ნაბიჯი 4: მართეთ H ხიდი და გაფილტრეთ Pwm სიგნალი
არდუინოსგან მიღებული სიგნალები არის ინვერტორული აპლიკაციების საკონტროლო ნაწილი, რადგან ორივე დადებითია. სრული სინუსური ტალღის და პრაქტიკული ინვერტორის შესაქმნელად ჩვენ უნდა გამოვიყენოთ h ხიდი და pwm- ის გასასუფთავებლად დაბალი გავლის ფილტრი.
H- ხიდი აქ არის წარმოდგენილი.
დაბალი გამავლობის ფილტრი შემოწმებულია მცირე ზომის ძრავით-აქ.
გირჩევთ:
ნახევარი ნაბიჯი: 5 ნაბიჯი (სურათებით)
სემინარი: IntroduçãoNeste projeto, você construirá um an sistema de semáforos: არსებობს 3 LED ნათურები სხვადასხვა ბირთვით (verde, amarelo e vermelho) para imitar os semáforos dos carros; არსებობს 2 LED ნათურები სხვადასხვა ბირთვით (verde და vermelho) იმისთვის, რომ გააკეთოთ
Arduino Uno თევზის მიმწოდებელი 6 იაფი და მარტივი ნაბიჯი!: 6 ნაბიჯი
Arduino Uno თევზის მიმწოდებელი 6 იაფი და მარტივი ნაბიჯი! შინაური ცხოველების მქონე ადამიანებს, ალბათ, იგივე პრობლემა ჰქონდათ, როგორც მე: შვებულება და დავიწყება. მე მუდმივად მავიწყდებოდა ჩემი თევზის გამოკვება და ყოველთვის ვცდილობდი ასე გამეკეთებინა სანამ ის წავიდოდა
აკუსტიკური ლევიტაცია Arduino Uno– ით ეტაპობრივად (8 ნაბიჯი): 8 ნაბიჯი
აკუსტიკური ლევიტაცია Arduino Uno– სთან ერთად ეტაპობრივად (8 საფეხური): ულტრაბგერითი ხმის გადამცემები L298N Dc მდედრობითი ადაპტერი დენის წყაროს მამაკაცის dc pin Arduino UNOBreadboard და ანალოგური პორტები კოდის გადასაყვანად (C ++)
ნაბიჯი: 4 ნაბიჯი
聲納: 改作: https: //aboutsciences.com/blog/arduino-radar-using … 我 在 原本 聲納 的 ar ar ar ar ar: arduino uno, 感測器, 馬達, 喇叭: 掃描 到 物品 加速 並 傳 述 cm cm cm cm cm cm cm 10 სმ 時 喇叭 會
პირდაპირი 4G/5G HD ვიდეო ნაკადი DJI Drone– დან დაბალი ლატენტურობით [3 ნაბიჯი]: 3 ნაბიჯი
პირდაპირი 4G/5G HD ვიდეო ნაკადი DJI Drone– დან დაბალი ლატენტურობით [3 ნაბიჯი]: შემდეგი სახელმძღვანელო დაგეხმარებათ მიიღოთ პირდაპირი HD ხარისხის ვიდეო ნაკადები თითქმის ნებისმიერი DJI თვითმფრინავისგან. FlytOS მობილური აპლიკაციისა და FlytNow ვებ აპლიკაციის დახმარებით თქვენ შეგიძლიათ დაიწყოთ ვიდეოს სტრიმინგი დრონიდან