Мазмұны:

Ардуино толқыны инверторларға арналған: 4 қадам
Ардуино толқыны инверторларға арналған: 4 қадам

Бейне: Ардуино толқыны инверторларға арналған: 4 қадам

Бейне: Ардуино толқыны инверторларға арналған: 4 қадам
Бейне: wave generator using Arduino 2024, Шілде
Anonim
Инверторларға арналған Arduino Sinewave
Инверторларға арналған Arduino Sinewave

Бұл жобада мен екі arduino pwm цифрлық шығысынан SPWM (синусоиды импульсті кең модуляцияланған) сигнал жасадым.

Мұндай бағдарламаны жасау үшін мен arduino -ның басқа да функциялары мен қасиеттері туралы толық жобаны, осциллографтың суреттерін қоса және әр түрлі жиіліктер туралы айтуым керек, менің веб -сайтқа кіріңіз:

жобалық аймақ

1 -қадам: 50 Гц үшін Pwm сигналын құру

50 Гц сигналды жоғары жиілікте шығару үшін кейбір есептеулерді жүргізу қажет. Arduino жиіліктері 8 МГц болуы мүмкін, бірақ біз ауыспалы жұмыс циклы бар сигналды қалаймыз.

Ардуиноның ауыспалы жұмыс циклдарының түрлерін түсіну үшін сіз осы посттың 1, 2 және 3 бөліктерін оқи аласыз.

Біздің жиілік 50 Гц деп есептейік, бұл уақыт аралығы 20 мс құрайды. Сондықтан 10 мс - бұл циклдің жарты кезеңі. Бұл 10 мс -те біз кішігірім жұмыс циклдерінен басталатын әр түрлі жұмыс циклдары бар көптеген импульстерге ие болуымыз керек, сигналдың ортасында біз максималды жұмыс циклдарына ие боламыз және сонымен қатар кіші циклдік циклмен аяқтаймыз. оң жарты цикл және теріс жарты цикл үшін бір. Бұл үшін біз 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 - 0, бірақ x = 0.57, x = 1.14 және т.б.

егер біз барлық 314 мәндерін есептесек, біз 314 элементті аламыз (arduino көмегімен есептелетін «int» түрі).

Мұндай массив:

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 бағдарламасы

Ауыспалы қызметтік циклге арналған Arduino бағдарламасы
Ауыспалы қызметтік циклге арналған 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 -қадам: 50 Гц Arduino Pins -те ауысады

50 Гц жиіліктегі Arduino Pins
50 Гц жиіліктегі Arduino Pins

Толық синусоидалық толқын жасау үшін әр түйреуіш тек жарты айналым циклін құрады, сондықтан біз екі түйреуішті қолданамыз, олар бірінен соң бірі 10 секундтан кейін ауысады (50 Гц үшін). Бұл түйреуіштер массивтің соңында жасалады- 5-ші пин 314 импульсті тудырды делік, бұл істікшені өшіреді және 6-істікті қосады, бұл дәл осылай жасайды, бірақ теріс жұмыс циклі үшін.

Ардуино тек оң сигналдарды бере алатындықтан, теріс көпірде теріс жұмыс циклы жасалады- бұл туралы мына жерден оқуға болады

Түйіндерді ауыстыруға арналған бағдарлама:

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 сигналын сүзу

Ардуинодан алынған сигналдар инверторлық қосымшалардың басқару бөлігі болып табылады, себебі екеуі де оң. Толық синустық толқын мен практикалық түрлендіргішті жасау үшін біз h көпірін пайдалануымыз керек, ал төмен өтетін сүзгіні тазарту үшін.

H көпірі осында ұсынылған.

Төмен өту сүзгісі шағын AC қозғалтқыштарымен сыналды-мұнда.

Ұсынылған: