Мазмуну:
- 1 -кадам: 50Hz үчүн Pwm сигналын түзүү
- 2 -кадам: Variable Duty Cycle үчүн Arduino программасы
- 3 -кадам: 50Hz Arduino Pins менен алмашуу
- 4 -кадам: H көпүрөсүн айдап, Pwm сигналын чыпкалоо
Video: Induters үчүн Arduino Sinewave: 4 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Бул долбоордо мен эки arduino pwm санариптик чыгарылышынан SPWM (синус толкун импульсу кең модуляцияланган) сигналын түздүм.
Мындай программаны жасаш үчүн, мен ардуинонун башка көптөгөн функциялары жана касиеттери жөнүндө толук долбоорду, анын ичинде осциллографтын сүрөттөрүн жана ар кандай жыштыктар жөнүндө сөз кылышым керек, менин веб -сайтыма баш багыңыз:
eprojectszone
1 -кадам: 50Hz үчүн Pwm сигналын түзүү
50 Гц сигналды жогорку жыштыкта чыгаруу үчүн кээ бир эсептөөлөрдү жүргүзүү зарыл. Ардуинонун жыштыктары 8 МГцте болушу мүмкүн, бирок биз өзгөрмөлүү циклдүү сигналды каалайбыз.
Ардуинонун өзгөрмөлүү циклинин түрлөрүн түшүнүү үчүн, ошол эле посттун 1, 2 жана 3 -бөлүктөрүн окуй аласыз.
Келгиле, биздин жыштыгыбыз 50 Гц, бул убакыт аралыгы 20 мс дегенди билдирет. Ошентип, 10ms - жарым цикл мезгили. Ошол 10msде биз кичинекей милдет циклдеринен башталган ар кандай милдет циклдери менен көптөгөн импульстарга ээ болушубуз керек, сигналдын ортосунда биз эң жогорку циклге ээбиз жана кичинекей милдет циклдери менен бүтүрөбүз. оң жарым цикл жана терс жарым цикл үчүн бир. Бул үчүн биздин постто биз 5 жана 6 -казыктарды колдонобуз, бул Таймер 0ди билдирет.
Жылмакай сигнал үчүн биз 31372 Гц жыштыгында туура pwm тандайбыз-мурунку постту караңыз. Эң чоң көйгөйдүн бири-бул ар бир импульстун керектүү циклин кантип эсептөөбүз. Ошентип, биздин жыштык f = 31372Гц болгондуктан, ар бир импульстун мезгили T = 1/31372 = 31,8 бизди түзөт, андыктан жарым циклдеги импульстардын саны N = 10ms/31.8us = 314 импульс. Эми ар бир импульстун иштөө циклин эсептөө үчүн бизде y = sinx бар, бирок бул теңдемеде градус керек, андыктан жарым циклде 314 импульстун 180 градусу бар. Ар бир импульс үчүн бизде 180/314 = 0,57дег/импульс бар. Бул ар бир импульс үчүн биз 0.57дег менен алдыга жылабыз дегенди билдирет.
y - бул кызмат цикли жана x - жарым кызмат циклиндеги позициянын мааниси. адегенде x 0, afetr x = 0.57, x = 1.14 ж.б.у.с. х = 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 -кадам: Variable Duty Cycle үчүн 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+1; // кийинки орунга өтүү
}
3 -кадам: 50Hz Arduino Pins менен алмашуу
Толук синус толкунду түзүү үчүн ар бир пин жарымы гана иштөө циклин жаратат, анткени биз так 10 мсекундтан кийин (50 Гц үчүн) биринин артынан бирин алмаштырган эки пинди колдонобуз. Бул казыктардын өзгөрүшү массивдин аягында жасалат- айталы, 5-пин 314 импульс жараткан, бул пин өчүрүлгөн жана 6-пин иштетилген, бул ошол эле нерсени кылат, бирок терс милдет цикли үчүн.
Анткени ардуино позитивдүү сигналдарды гана бере алат, терс милдет цикли h көпүрөсүндө жасалат- бул жөнүндө бул жерден окуй аласыз
Пиндерди алмаштыруу программасы:
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+1; // кийинки орунга өтүү
эгер (OK == 0) {
OCR0B = 0; // пин 5 0 кылыңыз
OCR0A = x; // 6 -пин тиешелүү пунктту иштетүү
эгер (макул == 1) {
OCR0A = 0; // пин 6 0 кылыңыз
OCR0B = x; // 5 -пин тиешелүү пунктту иштетүү
}
}
4 -кадам: H көпүрөсүн айдап, Pwm сигналын чыпкалоо
Ардуинодон алынган сигналдар инверторлорду башкаруунун бөлүгү болуп саналат, анткени экөө тең оң. Толук синус толкунду жана практикалык инверторду жасоо үчүн h көпүрөсүн колдонуп, pwm аз өтүүчү чыпканы тазалоо керек.
H-көпүрөсү бул жерде көрсөтүлгөн.
Аз өтмө чыпкасы кичинекей Ac моторлору менен сыналган-бул жерде.
Сунушталууда:
Чоңойтууну башкаруу үчүн гитара баатырдык гитараны колдонуу (Windows үчүн гана): 9 кадам
Масштабды көзөмөлдөө үчүн гитара баатырдык гитараны колдонуу (Windows үчүн гана): Биз глобалдык пандемиянын ортосунда турганыбыз үчүн, көбүбүз үйдү тазалап, Zoomдагы жолугушууларга катышып жатабыз. Бир аз убакыттан кийин, бул абдан жумшак жана кызыксыз болуп калышы мүмкүн. Үйүмдү тазалап жатып, ыргытып жиберилген эски гитара баатырын таптым
Көрүү мүмкүнчүлүгү чектелген адамдар үчүн Arduino жана 3D басып чыгаруу үчүн жакшыртылган автобус тажрыйбасы: 7 кадам
Көрүү мүмкүнчүлүгү чектелген адамдар үчүн жакшыртылган автобус тажрыйбасы Arduino жана 3D басып чыгаруу: Көрүүсү начар адамдар үчүн коомдук транспортту кантип жөнөкөйлөтсө болот? көрүүсү начар адамдар. Т
Arduino үчүн 6 баскыч үчүн 1 аналогдук киргизүүнү колдонуңуз: 6 кадам
Arduino үчүн 6 баскыч үчүн 1 аналогдук кирүүнү колдонуңуз: Мен Arduino үчүн кантип көбүрөөк санариптик кирүүлөрдү алсам болот деп көп ойлондум. Жакында мен бир нече санариптик кирүүлөрдү киргизүү үчүн аналогдук кирүүлөрдүн бирин колдоно алам деп ойлодум. Мен тез издеп, адамдардын кайда экенин таптым
Сүйүү оюнчулар үчүн, Arduino долбоору бойдоктор үчүн жасалган: 5 кадам
Сүйүү оюнчулар үчүн, Arduino долбоору бойдоктор үчүн жасалган: Бул көрсөтмө менин " Сүйүү оюнчулар үчүн " аттуу Arduino долбоорум жөнүндө. күлкү жана көңүл ачуу куралы катары башталган. Бул идеалдуу же эч нерсе эмес, бирок ал иштейт
Arduino үчүн L298 2Amp Motor Driver Shield үчүн окуу куралы: 6 кадам
Arduino үчүн L298 2Amp Motor Driver Shield үчүн үйрөткүч: Description L298 2Amp Motor Driver Shield Arduino үчүн L298 мотор драйверинин интегралдык схемасына, толук көпүрө мотор айдоочусуна негизделген. Бул эки өзүнчө 2A DC моторун же 1 2А кадам моторун айдай алат. Мотордун ылдамдыгын жана багыттарын өзүнчө башкарса болот