Например TDA7294

Форум РадиоКот • Просмотр темы - Как получить ШИМ на втором выходе с инверсией
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб июн 21, 2025 19:53:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Вс авг 13, 2023 10:53:40 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Есть аппаратный ШИМ на атмега 8, который реализован PWM, Phase and Frequency, пункт 8 по даташиту. Как получить эту частоту ШИМ на любом другом выводе МК с инверсией. Коротко о программе.
TCCR1A |= (1<<COM1A1);
TCCR1A &= ~(1<<COM1A0);
TCCR1A &= ~(1<<WGM10);
TCCR1A &= ~(1<<WGM11);
TCCR1B &= ~(1<<WGM12);
TCCR1B |= (1<<WGM13);
TCCR1B |= (1<<CS10);
TCCR1B &= ~(1<<CS11);
TCCR1B &= ~(1<<CS12);
ICR1 = 645;
OCR1A = 340;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Вт авг 15, 2023 12:38:30 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 1
Мега8 очень примитивный контроллер по нынешним меркам, никаких возможностей по переназначению портов для периферии там нет, так что на ЛЮБОЙ ДРУГОЙ вывод железно ШИМ не вывести.
Вариант 1: инверсию можно вывести на OC1B, записав "11" в COM1B1:COM1B0
Вариант 2: в главном цикле тупо проверять OC1A и инвертируя его, выводить на требуемый пин, естественно, никакой Phase/Frequency Correct тут не будет, особенно если есть длинные прерывания или другие подпрограммы
Вариант 3: попробовать сделать то же что и в В2, но через прерывания, отслеживать придется и OCR и OVF и переключать вывод в соответствии с алгоритмом режима 8. Результат будет немного получше чем в В2
Вариант 4: тупо поставить инвертор на OC1A (да хоть на транзисторе), сэкономив вывод контроллера и освободив его от лишних вычислений

_________________
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Вт авг 15, 2023 20:40:42 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Вариант 1: инверсию можно вывести на OC1B, записав "11" в COM1B1:COM1B0
Спасибо за ответ. Пробовал разные варианты, в том числе и такой, не прокатывает. У меня там Атмега 168, где надо шим с инверсией, но я хотел понять суть работы на 8. Неужели программный писать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Ср авг 16, 2023 12:22:13 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 0
А чем железный инвертор не устраивает?

_________________
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Ср авг 16, 2023 16:44:07 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5999
Откуда: Minsk
Рейтинг сообщения: 0
Лишняя деталь. Потребление. Габариты. Это если собираться к Луне и каждый грамм на учёте.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Ср авг 16, 2023 18:19:35 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Согласен. Первый проект. Ну сейчас всё работает.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Ср авг 16, 2023 18:58:43 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
А чем железный инвертор не устраивает?

Есть заводской блок, у которого накрылся МК 168, у него несколько частот выход. На выходе 420, 480, 720, 780 Гц. Но с выхода портов PD3 и PD5, частота идёт на драйвера с инверсией и шимом регулируется выходное напряжение.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Чт авг 17, 2023 08:45:41 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 0
Ну так без переделки схемы восьмая мега туда и не пойдет, если ШИМ не программно делать, у нее на DP3/PD5 вообще ШИМ не выводится. Вот у 168 там да, выходы железной ШИМ, причем от разных таймеров.

Кстати, на эти выводы работают таймеры 0 и 2, у них нет режима Phase and Frequency Correct, он есть только у 16-битного таймера 1.

_________________
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Чт авг 17, 2023 10:31:44 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Я не собираюсь переделывать. Мне проще разбираться на 8 атмеге как это сделать, потом перенесу на 168. Он там по любому аппаратный, так как порты на выходе OC0B и OC2B.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Чт авг 17, 2023 12:48:54 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 1
А что, собственно не получилось то? Если по первому варианту...

Спойлер
Вложение:
2pwm.PNG [90.34 KiB]
Скачиваний: 56

_________________
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Чт авг 17, 2023 16:43:03 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Подскажи пожалуйста как это у тебя получилось? Если можно, какой кусок программы надо добавить? Я просто около года только занимаюсь программированием и то не каждый день, по наличию свободного времени. Извини. Но для меня понятный, это язык СИ. В ассемблере, я как баран.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Чт авг 17, 2023 21:41:28 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 0
Тут ничего сложного, программа 1 в 1 как в первом посте, только как я и говорил, добавлены "1" в биты COM1B1 и COM1B0, ну и вместо прямой записи констант в регистры, я их рассчитал заранее (частота ШИМ и процент заполнения).
Если убрать макрос OUTI и далее вместо запятой разделяющей имя регистра и его значение поставить "=", то получится тот же код на Си.

_________________
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Пт авг 18, 2023 07:43:46 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Тут ничего сложного, программа 1 в 1 как в первом посте, только как я и говорил, добавлены "1" в биты COM1B1 и COM1B0.
Я этот вариант пробовал и ещё раз на всякий случай перепроверил. На СИ не прокатывает, чего-то не хватает. Вот чего, понять не могу. Ещё раз даташит посмотрю, может где что-то упустил и не прописал в регистре, чтобы СОМ1В заработал. А что означает команда SPL и SPH? SBI я так понял, это порты как выход, а Loop RJMP это возврат на адрес 0026? Всё остальное у меня на СИ прописано как у вас. У вас на ассемблере пашет второй канал, а у меня на СИ не хочет.

// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x1F;

TCCR1A |= (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (1<<COM1B0);
TCCR1B |= (1<<WGM13) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1A = 340;
ICR1 = 645;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Пт авг 18, 2023 08:38:19 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 0
SPL-SPH это регистр указателя стека, в ассемблере его надо инициализировать, в Си оно само...
SBI это установка бита в регистре, да в данном случае это порты на выход, LOOP - просто метка, RJMP PC это пустой вечный цикл (переход на адрес, а PC - это как раз текущий адрес), если ничего делать не надо.
А вот чего у вас еще нет, так это загрузки во второй регистр сравнения OCR1B, он как раз определяет заполнение ШИМ на втором канале! Туда надо загрузить то же что и в OCR1A.

_________________
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Пт авг 18, 2023 08:44:52 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1615
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Пример ШИМ из PWM On The ATmega8.
Добавим для второго канала равенство с первым и инверсию.

Изображение

Код:
#include <avr/io.h>

int main(void) {
  DDRB |= (1 << DDB1) | (1 << DDB2);        // PB1, PB2 is now an output
 
  OCR1A = OCR1B = 0x00FF;                   // set PWM for xx% duty cycle
 
  TCCR1A |= (1 << COM1A1);                  // set none-inverting mode
  TCCR1A |= (1 << COM1B1) | (1 << COM1B0);  // set inverting mode
 
  TCCR1A |= (1 << WGM11) | (1 << WGM10);
  TCCR1B |= (1 << CS11);
 
  while (1) {
  }
}


Вложения:
atmega8_pwm.zip [14.87 KiB]
Скачиваний: 49


Последний раз редактировалось veso74 Пт авг 18, 2023 11:19:08, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Пт авг 18, 2023 10:52:40 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Всем огромное спасибо за помощь. Добавил равенство OCR и всё заработало. Но инверсия косая получается на 10 мГц, при WGM13=1, остальные в нулях. Даже если прописать WGM10 и 11 как выше указано, а 13=0, всё равно инверсия неодинаковая по длительности.
Изображение

Добавлено after 1 hour 22 minutes 24 seconds:
Выше указанный ШИМ в архиве zip только с частотой 8 мГц работает нормально. Если на 8 мГц я включаю WGM13, а отключаю 10 и 11, то длительность тоже нормальная, но идёт подёргивание сигнала на двух портах.Вечером на другом ноуте скомпилирую на 8 и 10 мГц и посмотрю, что получается. А то может на этом какой косяк лезет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Пт авг 18, 2023 11:23:11 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1615
Откуда: KN34PC, Болгария
Рейтинг сообщения: 1
Поменял клок с внутреннего генератора 8 MHz на кварцевого генератора 11.0592 MHz и на 18.432 MHz.
Ничего не изменилось с длительности. Ищите причину.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как получить ШИМ на втором выходе с инверсией
СообщениеДобавлено: Пт авг 18, 2023 19:17:23 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср сен 04, 2019 17:59:23
Сообщений: 165
Откуда: Гомель
Рейтинг сообщения: 0
Ищите причину.
Спасибо разобрался. Нетбук у меня косячит, скорее всего из-за того. что пару дней назад разбирался с прошивками по восстановлению диагностического шнурка VCDS и загрузил инсталлер. который сделал мне 480 изменений реестра, еле удалил всё и почистил. Если кого интересует, то могу сказать, что в инете хрень, а не еепром выложены. Флеши с разными версиями там рабочие. Более подробно через личку. Возможно кривая чистка реестра. Теперь надо будет винду сносить. На ноуте никаких подёргиваний сигнала нет, даже при активированном WGM13, остальные в нулях. А мой косяк по длительности между портами из-за того, что при управлении кнопками плюс и минус заполнение ШИМ надо одинаково прописывать как OCR1A, так и OCR1B. А у меня было прописано только управление OCR1A. Тогда и длительность сигнала и пауза будет одинакова на двух портах в инверсии. veso74, Engineer_Keen, спасибо вам огромное. Без вашей помощи я бы точно не разобрался. Для таких как я, начинающих, выложу исходник с прошивкой и протеус.


Вложения:
2PWM.rar [16.69 KiB]
Скачиваний: 49
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y