Как разместить програмный триггер внутри плавно нарастающего-спадающего PWM (скетч Fade)

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Вопрос к умеющим писАть для ардуины.

Сам я полный дуб, только паытаюсь вникнуть

Как разместить програмный триггер внутри плавно нарастающего-спадающего PWM.

Суть такая, хочется сделать инвертор 12-230 на NANO, с выходом синус или треугольной формы.

ШИМ плавно меняющийся (скетч Fade) позволит выходным транзюкам работать в ключевом режиме что существенно снизит тепловыделение на них. Но нужно с каждым переходом через brightness = 0; инвертировать два пина которые будут управлять елементами И на затворах мосфетов.

Либо подскажите как организовать поочерёдное выполнение примерно такой алгоритм циклично

PWM pin 9 = (от 0 до 255)

PWM pin 10 = (от 0 до 255)

Объясните пожалуйста кто может.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

demon-k2008, поясните каким схемотехническим решением вы хотите генерировать синус.

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Синуса там не будет , может я криво выразился.

Нужно поочерёдно подавать шим ( 0-255-0 ) на каждое плечо (затворы)

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Прирнцып описан на сайте производителя http://www.110volt.ru/text/invertor

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

demon-k2008, что-то проясняется. А какие частоты? Как я понимаю тут нужно 2 параметра, 1 -собственно частота шим, 2 -за какое время нужно сделать полный цикл (512 итераций).

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Ну как я и писал в начале я полный дуб в плане математики и кодинга.

Частота сети 50-60 Гц. 1/50=0,02 сек. Целый период.

Каждый полупериод по 0,01 сек.

Для управления ключами потребуются два аналогичных полупериода и они должны либо выдаваться двумя выводами с возможностью PWM , выполнить цикл на пине-1 от 0 до 255 и обратно к 0

                                                  , выполнить цикл на пине 2 от 0 до 255 и обратно к 0.

И так зациклить поочерёдное выполнение

 

либо выдавать с одного вывода но потребуется триггер для управления двумя элементами "И". После выполнения 0-255-0 нужно инвертировать пару свободных цифровых выводов для управления элементами "И".

 

vov4ik
Offline
Зарегистрирован: 10.09.2013
void setup() {
pinMode(4, INPUT);digitalWrite(4, HIGH);//кнопка подтянутая к 5В
// определяет что будет пила или синусойда
pinMode(9, OUTPUT);pinMode(10, OUTPUT);
}
void loop() {
//количество микросекунд (1 000 000 микросекунд в 1 секунде)
//максимальная пауза воспроизводимая корректно — 16383
if (digitalRead(4)){
digitalWrite(9, HIGH);
delayMicroseconds(50);  
digitalWrite(9, LOW);
delayMicroseconds(30);
digitalWrite(9, HIGH);
delayMicroseconds(50);  
digitalWrite(9, LOW);
delayMicroseconds(30);
digitalWrite(10, HIGH);
delayMicroseconds(30);  
digitalWrite(10, LOW);
delayMicroseconds(50);
digitalWrite(10, HIGH);
delayMicroseconds(30);  
digitalWrite(10, LOW);
delayMicroseconds(30);
  }
else {
digitalWrite(9, HIGH);
delayMicroseconds(50);  
digitalWrite(9, LOW);
delayMicroseconds(30);
digitalWrite(9, HIGH);
delayMicroseconds(50);  
digitalWrite(9, LOW);
delayMicroseconds(30);
digitalWrite(10, HIGH);
delayMicroseconds(30);  
digitalWrite(10, LOW);
delayMicroseconds(50);
digitalWrite(10, HIGH);
delayMicroseconds(30);  
digitalWrite(10, LOW);
delayMicroseconds(30);
  }
}

Что-то вроде этого, а дальше ручками и учитывать что чтение кнопки тяпнет время, последнее делей в if и в else принудительно уменьшить.

Все делей при частоте 50гц дожны в сумме быть 1000000/50 и каждый цикл digitalWrite(10, HIGH); digitalWrite(10, LOW); тяпнет примерно 83,33, тоесть 20000 разделить на количество циклов, после HIGH delay Х-42, после LOW delay Х-41.

 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

demon-k2008, с частотой я так Вас и не понял. 50 гц -это результатирующая частота. С этим хотя бы понятно.  Но что-бы "нарисовать" один полный период частоты 50 гц нужно организовать цикл из 1024 итераций за 20мс. А значит каждые 19,5 мкс необходимо корректировать модулирующий 50 гц шим сигнал, т.е. имеем рабочую частоту таймера-модулятора  25 кГц. Каждые 512 итераций необходимо менять порт вывода. Под всё это нужен целый таймер. И ещё один таймер нужно для того, что бы генерировать исходный шим, и регулировать его скважность. Его частота должна быть чем больше тем лучше, но у нас возможности ограничены, 16000000/256=62кГц. Итого:

void setup() {
pinMode (11,OUTPUT); //OC2A OUTPUT mode enable
pinMode (3,OUTPUT); //OC2B OUTPUT mode enable
TCCR2A=(1<<COM2A1)|(1<<COM2B1)|(1<<WGM21)|(1<<WGM20);//  mode3
TCCR2B= (1<<CS20)|(0<<CS21)|(0<<CS22); //divider=1 f=62,5kHz
OCR2A=0;
TCCR1B=(1<<WGM12)|(1<<CS11); //divider=1
TCCR1A=0; 
TIMSK1=(1<<OCIE1A); //разрешить прерываение}
OCR1A=38;//сброс и прерывание каждые 19,5 uS
}

ISR (TIMER1_COMPA_vect) { 
static int tik=0; // "тики" от 0 до 1024 тактируют рисование формы сигнала 50 Гц
static byte tak=0; // "таки" меняют скважность генератора

if (tik < 256)             {OCR2A=tak; OCR2B=0; tak++; tik++;}
if (tik >= 256&&tik <512 ) {OCR2A=tak; OCR2B=0; tak--; tik++;}
if (tik >= 512&&tik <768 ) {OCR2B=tak; OCR2A=0; tak++; tik++;}
if (tik >= 768&&tik <=1024){OCR2B=tak; OCR2A=0; tak--; tik++;}
if (tik==1024) tik=0;
}

void loop() { }

Можете подключить к 11 и 3 выводам (через интегрирующие цепи) осциллограф и увидите  на каждом выводе полупериоды 50 Гц.

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Здравствуйте dimax . Сейчас засунул в ваш код в Arduino IDE , скомпилил без запинок. Файл .elf кинул в Proteus ISIS на камень ATMEGA328P  , сигнал есть. Железного контроллера у меня сейчас нет, а в отладке всё работает. Записал видео со стола, а вставить здесь никак, положил у себя на яндексе, посмотрите так должно быть?

https://yadi.sk/i/XMxGh_Azfyo3h

Если смотреть на яндекс плеере то вообще ни чего не видно, а если скачать и с компа запускать, то разрешение как на мониторе.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

demon-k2008, по чистому шиму трудно понять всё ли в норме, вроде похоже. Вы же можете в протеусе прикрутитить на выходы интегрирующие rc-цепи, и посмотреть что будет. По идее на выходах должны быть ровные треугольнички по полпериода.

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Да, не проблема с RC. Проблемма в том что у меня в линуксе не стабильно работает протэус, а в винду грузится для того чтоб поэксперементировать нехочется, там интернет крайне вреден для самой системы.

Тем не менее спасибо вам астрономических размеров за код. я уж думал придётся на АСМе под ПИК строить офигенную таблицу.

С низкого на высокое сконвертировать проще, есть КА7500 , TL494 и сильноточные полевики с малым сопротивлением в открытом состоянии, тоже по несколько штук в плечо и будет мощное сетевое но постоянное напряжение. А вот атмега уже сделает постоянку почки чистой переменкой.

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Ещё вопрос, а кпд у пилы выше чем у синуса?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

будешь проверять проверяй сначала на низком напряжении, и желательно предохранитель. схема очень неудачная

demon-k2008
Offline
Зарегистрирован: 09.03.2015

Всё как учат в школе, сначала силовую часть через лампы ватт на 500 запитать и настроить, потом уже и пробовать на прямую.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну дело твое. просто твоя схема не будет работать в данном виде

demon-k2008
Offline
Зарегистрирован: 09.03.2015

jeka_tm пишет:

ну дело твое. просто твоя схема не будет работать в данном виде

А в каком будет?

demon-k2008
Offline
Зарегистрирован: 09.03.2015
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот это уже похоже на нормальный вариант. драйвера полевиков, собственный генератор, скорее всего защита от сквозного тока и т.д.

demon-k2008
Offline
Зарегистрирован: 09.03.2015

jeka_tm пишет:

вот это уже похоже на нормальный вариант. драйвера полевиков, собственный генератор, скорее всего защита от сквозного тока и т.д.

Плюс и силовая часть либо плата либо готовую можно приобрести. Есть устройства до 15-и киловатт.

http://www.ebay.com/itm/1x-egp1000w-pure-sine-wave-inverter-power-board-...

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну вот. а не проще готовый преобразователь купить? целиком собранный

demon-k2008
Offline
Зарегистрирован: 09.03.2015

jeka_tm пишет:

ну вот. а не проще готовый преобразователь купить? целиком собранный

 

Вопрос в цене , у нас средняя зарплата 7000-8000, квартплата 6000, садик 2000-3000(не стабильный расход).

А готовый он стоит два месяца работы, с учётом ЖКХ и других неотложных платежей месяцев 20 придётся откладывать. Ведь Ивановскую область никто не берёт в состав РОССИИ, поэтому у нас тут сплошная анархия.

С паяльником я с детства дружу (много занимался ремонтом теле аудио автомобильной электроники(самоучка я)), только микроконтроллерами никогда не занимался, подёргать ножками могу, что на С что на АСМе, а с образованием в 8 (СССР-овских) какая на хрен математика! Почти 15 лет проработал в поле (колхоз) , потом в в топ отряде лес пилил да бурёжкой занимались (разведка нефть газ, фирма сдохла ещё в 2007), сейчас водитель на большегрузах. Из всего чем я добываю на жизнь ни одна из работ не благоволит развитию в области программирования.

http://cznshuya.ivnet.ru/vacans.htm

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

понятно. тогда собирай