Съдържание:
- Стъпка 1: Генериране на Pwm сигнал за 50Hz
- Стъпка 2: Програма Arduino за променлив работен цикъл
- Стъпка 3: Редуване при 50Hz Arduino щифтове
- Стъпка 4: Шофиране на H мост и филтриране на Pwm сигнала
Видео: Arduino Sinewave за инвертори: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
В този проект съм генерирал SPWM (синусоидално импулсно широково модулиран) сигнал от два arduino pwm цифрови изхода.
Тъй като за да направя такава програма, трябва да говоря за много други функции и свойства на arduino пълния проект, включително изображения на осцилоскоп и за различни честоти, моля, посетете моя уебсайт:
eprojectszone
Стъпка 1: Генериране на Pwm сигнал за 50Hz
За генериране на 50Hz сигнал на по -висока честота е необходимо да се направят някои изчисления. Честотите от arduino могат да бъдат на 8MHz, но ние искаме сигнал с променлив работен цикъл.
За да разберете видовете променливи работни цикли на arduino, можете да прочетете тези 3 части от същия пост 1, 2 и 3.
Да приемем, че нашата честота е 50Hz, което означава, че периодът от време е 20ms. Така че 10ms е период на половин цикъл. В тези 10 ms трябва да имаме много импулси с различни работни цикли, започващи с малки цикли на работа, в средата на сигнала имаме максимални работни цикли и завършваме също с малки цикли на работа. За да генерираме синусова вълна, ще използваме два пина един за положителен полуцикъл и един за отрицателен полуцикъл. В нашата публикация за това използваме щифтове 5 и 6, което означава Таймер 0.
За плавен сигнал избираме коректно фазово ШИМ при честота 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, 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, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 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; // активирайте пин 5
}
x = sinPWM ; // x взема стойността от вектора, съответстваща на позиция i (i е индексирана с нула)-стойност на работния цикъл
i = i+1; // отидете на следващата позиция
}
Стъпка 3: Редуване при 50Hz Arduino щифтове
Тъй като всеки щифт генерира само половин работен цикъл, за да направим пълна синусова вълна, използваме два пина, които се редуват един след друг след точно 10 mseconds (за 50Hz). Тази смяна на щифтовете се извършва в края на масива- след като да кажем, че пин 5 е генерирал 314 импулса, този щифт се изключва и активира щифт 6, който прави същото, но за отрицателния работен цикъл.
Тъй като arduino може да генерира само положителни сигнали, отрицателният работен цикъл е направен в h bridge- можете да прочетете тук за това
Програмата за смяна на щифтове:
sei (); // разрешаване на прекъсвания
}
ISR (TIMER1_COMPA_vect) {// прекъсване, когато таймер 1 съвпада с OCR1A стойност
if (i> 313 && OK == 0) {// крайна стойност от вектора за пин 6
i = 0; // отидете на първата стойност на вектора
OK = 1; // активирайте пин 5
}
if (i> 313 && OK == 1) {// крайна стойност от вектора за щифт 5
i = 0; // отидете на първата стойност на вектора
OK = 0; // активирайте пин 6
}
x = sinPWM ; // x взема стойността от вектора, съответстваща на позиция i (i е индексирана с нула)
i = i+1; // отидете на следващата позиция
ако (OK == 0) {
OCR0B = 0; // направете щифт 5 0
OCR0A = x; // разрешаване на пин 6 към съответния работен цикъл
ако (OK == 1) {
OCR0A = 0; // направете щифт 6 0
OCR0B = x; // разрешаване на щифт 5 към съответния работен цикъл
}
}
Стъпка 4: Шофиране на H мост и филтриране на Pwm сигнала
Сигналите, получени от arduino, са контролната част за инверторните приложения, тъй като и двата са положителни. За да направим пълна синусова вълна и практичен инвертор, трябва да използваме h мост и да изчистим pwm нискочестотен филтър.
H-мостът е представен тук.
Нискочестотният филтър, тестван с малки AC двигатели-тук.
Препоръчано:
Система за предупреждение за паркиране на автомобил Arduino - Стъпки по стъпка: 4 стъпки
Система за предупреждение за паркиране на автомобил Arduino | Стъпки по стъпка: В този проект ще проектирам обикновена верига за сензори за паркиране на автомобил Arduino, използвайки Arduino UNO и HC-SR04 ултразвуков сензор. Тази базирана на Arduino система за предупреждение за автомобил за заден ход може да се използва за автономна навигация, измерване на роботи и други обхвати
Arduino Halloween Edition - Изскачащ екран за зомбита (стъпки със снимки): 6 стъпки
Arduino Halloween Edition - Изскачащ екран за зомбита (стъпки със снимки): Искате ли да изплашите приятелите си и да издадете крещящ шум в Хелоуин? Или просто искате да направите добра шега? Този изскачащ екран Zombies може да направи това! В тази инструкция ще ви науча как лесно да правите изскачащи зомбита с помощта на Arduino. HC-SR0
Arduino Uno хранилка за риба в 6 евтини и лесни стъпки !: 6 стъпки
Arduino Uno Feeder Feeder в 6 евтини и лесни стъпки !: Така че може да е необходима малко предистория за този проект. Хората с домашни риби вероятно са имали същия проблем като мен: почивките и забравата. Постоянно забравях да храня рибите си и винаги се опитвах да го направя, преди да отиде в
Arduino Първи стъпки с хардуер и софтуер и уроци по Arduino: 11 стъпки
Arduino Първи стъпки с хардуер и софтуер и уроци по Arduino: В днешно време производителите, разработчиците предпочитат Arduino за бързо развитие на прототипирането на проекти. Arduino е електронна платформа с отворен код, базирана на лесен за използване хардуер и софтуер. Arduino има много добра потребителска общност. Arduino борда d
Първи стъпки с Esp 8266 Esp-01 с Arduino IDE - Инсталиране на платки Esp в Arduino Ide и програмиране на Esp: 4 стъпки
Първи стъпки с Esp 8266 Esp-01 с Arduino IDE | Инсталиране на Esp платки в Arduino Ide и програмиране на Esp: В тази инструкция ще научим как да инсталираме esp8266 дъски в Arduino IDE и как да програмираме esp-01 и да качваме код в нея. Тъй като esp дъските са толкова популярни, затова се замислих да поправя инструкции за това и повечето хора се сблъскват с проблем