Мазмуну:

Induters үчүн Arduino Sinewave: 4 кадам
Induters үчүн Arduino Sinewave: 4 кадам

Video: Induters үчүн Arduino Sinewave: 4 кадам

Video: Induters үчүн Arduino Sinewave: 4 кадам
Video: Измерьте ток до 500A с помощью шунтирующего резистора с помощью Arduino 2024, Ноябрь
Anonim
Induters үчүн Arduino Sinewave
Induters үчүн Arduino Sinewave

Бул долбоордо мен эки 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 программасы

Variable Duty Cycle үчүн Arduino программасы
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 менен алмашуу

50 Гц Arduino Pins менен алмашуу
50 Гц 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 моторлору менен сыналган-бул жерде.

Сунушталууда: