Такое легко делается на 85-ой тиньке. См. раздел “14. Dead Time Generator” в даташите.
На 32U4 (Леонардо) вроде тоже - Independent Dead Time Generators for each PWM channels
У меня получился меандр, поверх которого лежит второй меандр (как снег на крыше моего дома)…полностью повторяя профиль первого меандра!!! То что мне и нужно!!! Теперь буду разбираться, что из скетча нужно выкинуть, что подправить…Я то , тупо воткнул подсказку в СЕТАП…но результат меня обнадежил! Буду смотреть, что перевести в ЛУУП, на каждый диапазон… Спасибо ДРУЖИЩЕ!!! я 3 дня ходил пришибленным…
Я не знаю как вам выразить свою благодарность!!! Вы наверное поймете человека 66 лет, который потратил 2 дня над этой проблемой, я чуть с ума не сошел! Без решения этой проблемы я не мог двигаться дальше и собирать силовую часть (устанавливаь FOD драйвер и IGBT транзисторы) В принципе, я думаю…первым импульсом буду заряжять конденсатор 20 мкф от 100 вольт, потом “тихий час- dead time”, и потом разряжать его вторым импульсом (давать искру). Я уже дюжину IGBT пожег из-за сквозного тока (не было “тихого часа”- dead time)/ Спасибо Дружище!!! Я ваш должник!!!
Теперь не знаю как инвертировать сигнал на одной из ножек…(хоть на 9, хоть на 10 ножке) а так-скетч работает безукоризнено!!!
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int regim = 1;
int flag = 0;
int val = 100;
int dead = 10;
void setup() {
lcd.init();
lcd.backlight();
DDRB |= _BV(PB1) | _BV(PB2); /* set pins as outputs */
TCCR1A =B10110000;
TCCR1B =B00010001;
/* Или
analogWrite(9,5000 - 900);
analogWrite(10,5000 + 900);
*/
}
void loop()
{
if (digitalRead(14) == HIGH && flag == 0) //если кнопка нажата
// и перемення flag равна 0 , то ...
{
regim++;
flag = 1;
if (regim > 10) //ограничение кол. режимов-нам и этих хатает
{
regim = 1; // переключать циклично
}
}
if (digitalRead(14) == LOW && flag == 1) //если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag = 0; //обнуляем переменную "knopka"
}
if (regim == 1) //первый режим
{
ICR1 = 3200; //задаем частоту 5КГЦ
OCR1A = 1500 - 90; //9пине
OCR1B = 1500 + 90; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("5 Khz");
}
if (regim == 2) //второй режим
{
ICR1 = 1600; //задаем частоту 10КГЦ
OCR1A = 750 - 40; //9пине
OCR1B = 750 + 40; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("10 Khz");
}
if (regim == 3) //третий режим
{
ICR1 = 800; //задаем частоту 20КГЦ
OCR1A = 380 - 15; //9пине
OCR1B = 380 + 15; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("20 Khz");
}
if (regim == 4) //четвертый режим
{
ICR1 = 400; //задаем частоту 40КГЦ
OCR1A = 190 - 8; //9пине
OCR1B = 190 + 8; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("40 Khz");
}
if (regim == 5) //пятый режим
{
ICR1 = 266; //задаем частоту 60КГЦ
OCR1A = 125 - 7; //9пине
OCR1B = 125 + 7; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("60 Khz");
}
if (regim == 6) //шестой режим
{
ICR1 = 200; //задаем частоту 80КГЦ
OCR1A = 95 - 4; //9пине
OCR1B = 95 + 4; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("80 Khz");
}
if (regim == 7) //седьмой режим
{
ICR1 = 160; //задаем частоту 100КГЦ
OCR1A = 75 - 4; //9пине
OCR1B = 75 + 4; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("100Khz");
}
if (regim == 8) //восьмой режим
{
ICR1 = 106; //задаем частоту 150КГЦ
OCR1A = 48 - 4; //9пине
OCR1B = 48 + 4; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("150Khz");
}
if (regim == 9) //девятый режим
{
ICR1 = 80; //задаем частоту 200КГЦ
OCR1A = 38 - 1; //9пине
OCR1B = 38 + 1; //10пине
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("200Khz");
}
delay(50);
}
7 и 8 строка–лишние, аттавизмы экспериментироваия
целый час вникаю в пункт “”“”“12.3 Register Description”“”“”" мануала и не могу вникнуть (не знание аглицкого) …какую циферку нужно изменить в выражении TCCR1A =B10110000;
TCCR1B =B00010001; чтобы на этом выводе инвертировать сигнал!!! ПОМОГИТЕ
видимо тут -
TCCR1A = _BV(COM1A1) | _BV(COM1B1) /* non-inverting PWM */
Воистину это так!!! У меня улыбка до ушей–от радости!!! СПАСИБО!
ООО!!! эту таблицу я в прошлом году долго изучал! Мне нравится регистрами генерить., но ведь то, что вы сказали про инверсию–это разве есть в табличке? …или она скрытно показана. Спасибо дружище!!!
Так она затачивалась в том числе под импульсные блоки питания. У неё и выходы инверсные есть и Dead Time блок. У 328 нет ни выходов ни настроек на комплиментарный выход. уно нана в пролёте.
зелёненьким и желтеньким выделено, устанавливаем или сбрасываем
Но я то собрал на УНО!!! и с вашей помощью–должен вам заметить! и могу дальше любое импульсное хозяйство сварганить, …хоть сварку ивенТОРную, хоть печку ТВЧ, …да что угодно!!!
Не только.
Н-мост на мосфетах или igbt вполне себе даже не однофазный
Не вижу ни каких препятствий собрать на УНО. Но решение не прямое. На тиньке всё делается просто.
для меня даже со знанием сего наречия это тоже мучение