Результаты разные

Ван Зунг
Offline
Зарегистрирован: 27.07.2022

Уважаемые коллеги!

Я хотел преобразовать 12В-220В с SPWM arduino. Взял коды из два источника. Коды почти одинаковые. Но на выходе результать разные.

Скажите, пожалуйста! Где Я ошибся?

http://electronoobs.com/eng_arduino_tut88_code1.php#google_vignette

https://github.com/an7or/Sine-wave-Inverter-PWM

https://drive.google.com/file/d/1QisGyqA7NzoBBTrxGE7M4rsy2GWAaBS4/view?u...

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Т.е. мы должны скакать по ссылкам вашим ???

Ван Зунг
Offline
Зарегистрирован: 27.07.2022

По ссылкам, есть файл на протеусе. И коды на ардуино.
Я первый раз на форуме.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Осциллограф настройте одинаково

Ван Зунг
Offline
Зарегистрирован: 27.07.2022

Форма сигналов разные. Проблема не в настройке осциллографа.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Ван Зунг пишет:
Форма сигналов разные..

Но ведь и таблицы не 100% одинаковые

Ван Зунг
Offline
Зарегистрирован: 27.07.2022
#include <avr/io.h>
#include <avr/interrupt.h>
int counter;
const int sineVal[][100] = {0,25,50,75,100,125,150,175,199,223,247,271,294,318,341,363,385,407,429,450,470,490,510,529,548,566,583,600,616,632,647,662,675,689,701,713,724,734,744,753,761,768,775,781,786,790,794,796,798,800,800,800,798,796,794,790,786,781,775,768,761,753,744,734,724,713,701,689,675,662,647,632,616,600,583,566,548,529,510,490,470,450,429,407,385,363,341,318,294,271,247,223,199,175,150,125,100,75,50,25};

void setup(){
    // Register initilisation, see datasheet for more detail.
    TCCR1A = 0b10100010;
    TCCR1B = 0b00011001;
    TIMSK1 = 0b00000001;
    ICR1   = 1600;     // Period for 16MHz crystal, for a switching frequency of 100KHz for 200 subdevisions per 50Hz sin wave cycle.
    sei();             // Enable global interrupts.
    DDRB = 0b00000110; // Set PB1 and PB2 as outputs.
    pinMode(13,OUTPUT);
}

void loop(){
  }
ISR(TIMER1_OVF_vect){
  counter++;
  if(counter == 200) counter = 0;
  if (counter < 100) {
     OCR1A = sineVal[0][counter];
     OCR1B = 0;
  }
  else {
    OCR1B = sineVal[0][counter - 100];
    OCR1A = 0;
  }
}

попробовал, переписал код, таблицу синуса из Sinetable.h для LookUp1, но результаты тоже разныею

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Ван Зунг пишет:

Коды почти одинаковые.

Осталось найти это почти))

Кроме таблицы есть ещё тайминги и железо, т.е. схема.

К сожалению, мой Протеус не открывает выложенные файлы, т.к. у меня версия более старая