Например TDA7294

Форум РадиоКот • Просмотр темы - Работа Attiny85 от внешнего кварцевого резонатора?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июн 24, 2025 00:37:47

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Пт фев 21, 2025 20:34:35 
Родился

Зарегистрирован: Пт фев 21, 2025 19:54:57
Сообщений: 3
Рейтинг сообщения: 0
Добрый вечер :))
Господа форумчане, если кто-то работал с контроллером Attiny85?-не могли бы подсказать как мне настроить параметры контроллера , и работает ли контроллер от внешних резонаторов не стандартных частот например 13 мГц или 19мГц?
Началось все с того что решил освоить эти устройства и программирование этих контроллеров , знаний ноль и практики так же.
Симуляцию производил в Proteuse 8.17 sp4 , код на С !
Во общем начал с простого устройства преобразователь напряжения 12-220v с синусоидальных выходом и обратной связью по напряжению для стабилизации напряжения на нагрузке.
Спойлер
Код:
  #include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
//#include <util/delay.h> // Include for _delay_us()
//#define F_CPU 13000000UL

volatile uint16_t sine_value;
volatile uint16_t duty_cycle ;
const uint16_t PROGMEM sine_table[512] = {
 127, 129, 130, 132, 133, 135, 136, 138, 139, 141, 143, 144, 146, 147, 149, 150,
 152, 153, 155, 156, 158, 159, 161, 163, 164, 166, 167, 168, 170, 171, 173, 174,
 176, 177, 179, 180, 182, 183, 184, 186, 187, 188, 190, 191, 193, 194, 195, 197,
 198, 199, 200, 202, 203, 204, 205, 207, 208, 209, 210, 211, 213, 214, 215, 216,
 217, 218, 219, 220, 221, 223, 224, 225, 226, 227, 228, 228, 229, 230, 231, 232,
 233, 234, 235, 236, 236, 237, 238, 239, 239, 240, 241, 242, 242, 243, 244, 244,
 245, 245, 246, 247, 247, 248, 248, 249, 249, 249, 250, 250, 251, 251, 251, 252,
 252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 253, 252,
 252, 252, 251, 251, 251, 250, 250, 249, 249, 249, 248, 248, 247, 247, 246, 245,
 245, 244, 244, 243, 242, 242, 241, 240, 239, 239, 238, 237, 236, 236, 235, 234,
 233, 232, 231, 230, 229, 228, 228, 227, 226, 225, 224, 223, 221, 220, 219, 218,
 217, 216, 215, 214, 213, 211, 210, 209, 208, 207, 205, 204, 203, 202, 200, 199,
 198, 197, 195, 194, 193, 191, 190, 188, 187, 186, 184, 183, 182, 180, 179, 177,
 176, 174, 173, 171, 170, 168, 167, 166, 164, 163, 161, 159, 158, 156, 155, 153,
 152, 150, 149, 147, 146, 144, 143, 141, 139, 138, 136, 135, 133, 132, 130, 129,
 127, 125, 124, 122, 121, 119, 118, 116, 115, 113, 111, 110, 108, 107, 105, 104,
 102, 101, 99, 98, 96, 95, 93, 91, 90, 88, 87, 86, 84, 83, 81, 80,
 78, 77, 75, 74, 72, 71, 70, 68, 67, 66, 64, 63, 61, 60, 59, 57,
 56, 55, 54, 52, 51, 50, 49, 47, 46, 45, 44, 43, 41, 40, 39, 38,
 37, 36, 35, 34, 33, 31, 30, 29, 28, 27, 26, 26, 25, 24, 23, 22,
 21, 20, 19, 18, 18, 17, 16, 15, 15, 14, 13, 12, 12, 11, 10, 10,
 9, 9, 8, 7, 7, 6, 6, 5, 5, 5, 4, 4, 3, 3, 3, 2,
 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2,
 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8, 9,
 9, 10, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20,
 21, 22, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36,
 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55,
 56, 57, 59, 60, 61, 63, 64, 66, 67, 68, 70, 71, 72, 74, 75, 77,
 78, 80, 81, 83, 84, 86, 87, 88, 90, 91, 93, 95, 96, 98, 99, 101,
 102, 104, 105, 107, 108, 110, 111, 113, 115, 116, 118, 119, 121, 122, 124, 125
};
int main(void) {
   
DDRB |= (1 << PB2)|
        (0 << PB3)|
        (0 << PB4)|
        (0 << PB5);   
ADMUX =
            (1 << ADLAR) |     // left shift result
            (0 << REFS1) |     // Sets ref. voltage to VCC, bit 1
            (0 << REFS0) |     // Sets ref. voltage to VCC, bit 0
            (0 << MUX3)  |     // use ADC2 for input (PB5), MUX bit 3
            (0 << MUX2)  |     // use ADC2 for input (PB5), MUX bit 2
            (0 << MUX1)  |     // use ADC2 for input (PB5), MUX bit 1
            (0 << MUX0);       // use ADC2 for input (PB5), MUX bit 0
  ADCSRA =
            (1 << ADEN)  |     // Enable ADC
            (0 << ADPS2) |     // set prescaler to 2, bit 2
            (1 << ADPS1) |     // set prescaler to 2, bit 1
            (0 << ADPS0);      // set prescaler to 2, bit 0 
  DDRB |= (1 << PB0);   // (OC0A) PB0 выход шим прямой
  DDRB |= (1 << PB1);  // PB1 (OC0B) выход шим инвертированный 
  PLLCSR |= (0 << LSM); 
  TCCR0A |= (1 << WGM01) | (1 << WGM00); // Fast PWM mode
  TCCR0A |= (1 << COM0A1) | (0 << COM0A0); // Non-inverting PWM on OC0A (PB0)
  TCCR0A |= (1 << COM0B1) | (1 << COM0B0); // inverting PWM on OC0B (PB1)
  TCCR0B = (0 << CS02) | (1 << CS01) | (0 << CS00); // Prescaler 1 для скорости ~50Гц
  TIMSK  |= (1 << TOIE0); // Enable Timer 0 overflow interrupt
  sei();  //  using interrupts
  while (1) { 
  }
}

ISR(TIMER0_OVF_vect) {
    static uint16_t sine_index = 0; // Статический индекс для таблицы синусов
    ADCSRA |= (1 << ADSC);          // Запуск преобразования АЦП
    while (ADCSRA & (1 << ADSC));   // Ожидание завершения
    sine_value = pgm_read_byte(&sine_table[sine_index]);
    duty_cycle = (sine_value  * (255 - ADCH) / 255) * 225 / 255 + 15; // Простая модуляция амплитуды и дедтайм для драйвера с транзисторами
    OCR0A = OCR0B = duty_cycle;
    sine_index = (sine_index + 1) % 512; // Увеличение индекса, обход таблицы
}

Вот код, в Proteuse работает, и при небольшой переделки работает и на Attiny2313A только без обратной связи.
Но интересует как выставить на выходе частоту 50Гц и частоту модуляции шим от 60 -100 кГц я думаю примерно неважно в этих пределах? Какие параметры фьюзов нужны ? Что у меня получилось, так это частота 31 кГц шим, и частота синусоиды 61Гц, заранее благодарен :)) за помощь если чего не правильно подскажите . При подаче питания происходит генерация шим, с перебором таблицы синусоиды из 512 значений, которые управляют скваженностью. Для проверки если на любой из выходов например PB0 поставить цепь RC то на выходе будет синусоидальной сигнал.
На вход PB5 подаётся сигнал обратной связи через делитель при меньшем напряжении больше ширина импульса и при большем напряжении меньше ширина импульса.


Вложения:
Комментарий к файлу: Код для протеуса
cod_Attiny85_C.c [4.62 KiB]
Скачиваний: 54
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Сб фев 22, 2025 06:27:57 
Друг Кота

Карма: 64
Рейтинг сообщений: 1013
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4326
Откуда: Ижевск
Рейтинг сообщения: 0
Установите CKSEL3...0 1111 SUT1,0 11
Из DS режим FAST PWM 011 потребует Fcpu=50[Гц]*512*8*256=52'428'800[Гц]??? Если предделитель установить =1, то Fcpu=50[Гц]*512*1*256=6'553'600[Гц]. При кварце 13МГц и предделителе тактовой /2 (CLKPS3...0 0001) на выходе должно получиться
~49,6[Гц]

PWM= C+A*sin(N*360º/512)
Постоянная C не должна меняться при регулировании амплитуды A, которая, в свою очередь, должна быть строго меньше C, чтобы ШИМ не вырождался в постоянный уровень. Например, C=128 и A=124.

Режим FAST PWM буферирован, поэтому параметры OC0A и OC0B заносятся аппаратно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Сб фев 22, 2025 07:15:45 
Родился

Зарегистрирован: Пт фев 21, 2025 19:54:57
Сообщений: 3
Рейтинг сообщения: 0
Огромное спасибо меня интересовало именно работа Attiny85 от кварца 13 МГц так как от этого кварца получится почти 50Hz как вы и написали.


Последний раз редактировалось oposums Сб фев 22, 2025 17:27:17, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Сб фев 22, 2025 12:28:25 
Друг Кота
Аватар пользователя

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


Вложения:
gz.JPG [8.19 KiB]
Скачиваний: 294

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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Сб фев 22, 2025 14:35:51 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2907
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18720
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Jack_A, чем ты не доволен?
Герц на букву "г". а "г" - это буква "g".

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Сб фев 22, 2025 14:36:27 
Сверлит текстолит когтями

Карма: 12
Рейтинг сообщений: 124
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1213
Рейтинг сообщения: 0
Да просто буйная фантазия. Это уже о чём то говорит...


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Вт фев 25, 2025 11:37:19 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
Первый раз вижу, чтоб так обзывали Герц (Hz) . Или не об нём речь?
Изображение

Возможно, речь о *.gz файле? Ну, который обычный gzip-архив. Правда, обычно он все же *.tar.gz, но мало ли.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа Attiny85 от внешнего кварцевого резонатора?
СообщениеДобавлено: Чт июн 12, 2025 04:34:04 
Родился

Зарегистрирован: Пт фев 21, 2025 19:54:57
Сообщений: 3
Рейтинг сообщения: 0
Всем привет кто интересовался проектом?
Кому интересно добавил для Attiny85 код на Си , преобразователя напряжения синус примерно 54Гц частота шим 62.5 кГц, частота внутренего генератора 16мГц.
Хотел сделать по принципу с выходным дросселем , как в усилителях class-D
Код Си:
Спойлер
Код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

volatile uint8_t sine_value;  // Значение из таблицы от 0 до 255 сгенерированная синусоида
static uint16_t sine_index = 0;   // Переменная  размерности таблицы
const uint8_t PROGMEM sine_table[1024] = { // Полный период синусоиды 1024 значения для 54Гц чем больше таблица тем меньше частота Гц
 128, 127, 126, 125, 124, 124, 123, 122, 121, 120, 120, 119, 118, 117, 117, 116,
 115, 114, 114, 113, 112, 111, 110, 110, 109, 108, 107, 107, 106, 105, 104, 103,
 103, 102, 101, 100, 100, 99, 98, 97, 97, 96, 95, 94, 94, 93, 92, 91,
 91, 90, 89, 88, 88, 87, 86, 85, 85, 84, 83, 83, 82, 81, 80, 80,
 79, 78, 77, 77, 76, 75, 75, 74, 73, 72, 72, 71, 70, 70, 69, 68,
 68, 67, 66, 66, 65, 64, 64, 63, 62, 62, 61, 60, 60, 59, 58, 58,
 57, 56, 56, 55, 54, 54, 53, 52, 52, 51, 51, 50, 49, 49, 48, 48,
 47, 46, 46, 45, 45, 44, 43, 43, 42, 42, 41, 40, 40, 39, 39, 38,
 38, 37, 37, 36, 36, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30,
 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 25, 24, 24, 23, 23, 22,
 22, 21, 21, 21, 20, 20, 19, 19, 19, 18, 18, 17, 17, 17, 16, 16,
 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 10,
 10, 10, 10, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6,
 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3,
 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6,
 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15,
 15, 16, 16, 17, 17, 17, 18, 18, 19, 19, 19, 20, 20, 21, 21, 21,
 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26, 27, 27, 28, 28, 29,
 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 36, 36, 37, 37,
 38, 38, 39, 39, 40, 40, 41, 42, 42, 43, 43, 44, 45, 45, 46, 46,
 47, 48, 48, 49, 49, 50, 51, 51, 52, 52, 53, 54, 54, 55, 56, 56,
 57, 58, 58, 59, 60, 60, 61, 62, 62, 63, 64, 64, 65, 66, 66, 67,
 68, 68, 69, 70, 70, 71, 72, 72, 73, 74, 75, 75, 76, 77, 77, 78,
 79, 80, 80, 81, 82, 83, 83, 84, 85, 85, 86, 87, 88, 88, 89, 90,
 91, 91, 92, 93, 94, 94, 95, 96, 97, 97, 98, 99, 100, 100, 101, 102,
 103, 103, 104, 105, 106, 107, 107, 108, 109, 110, 110, 111, 112, 113, 114, 114,
 115, 116, 117, 117, 118, 119, 120, 120, 121, 122, 123, 124, 124, 125, 126, 127,
 127, 128, 129, 130, 131, 131, 132, 133, 134, 135, 135, 136, 137, 138, 138, 139,
 140, 141, 141, 142, 143, 144, 145, 145, 146, 147, 148, 148, 149, 150, 151, 152,
 152, 153, 154, 155, 155, 156, 157, 158, 158, 159, 160, 161, 161, 162, 163, 164,
 164, 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 172, 173, 174, 175, 175,
 176, 177, 178, 178, 179, 180, 180, 181, 182, 183, 183, 184, 185, 185, 186, 187,
 187, 188, 189, 189, 190, 191, 191, 192, 193, 193, 194, 195, 195, 196, 197, 197,
 198, 199, 199, 200, 201, 201, 202, 203, 203, 204, 204, 205, 206, 206, 207, 207,
 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214, 215, 215, 216, 216, 217,
 217, 218, 218, 219, 219, 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, 225,
 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 230, 231, 231, 232, 232, 233,
 233, 234, 234, 234, 235, 235, 236, 236, 236, 237, 237, 238, 238, 238, 239, 239,
 240, 240, 240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245,
 245, 245, 245, 246, 246, 246, 247, 247, 247, 247, 248, 248, 248, 248, 249, 249,
 249, 249, 249, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 252, 252, 252,
 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 253, 254, 254, 254, 254,
 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
 254, 254, 254, 254, 254, 253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252,
 252, 252, 252, 252, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 249, 249,
 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 247, 246, 246, 246, 245, 245,
 245, 245, 244, 244, 244, 243, 243, 243, 242, 242, 242, 241, 241, 241, 240, 240,
 240, 239, 239, 238, 238, 238, 237, 237, 236, 236, 236, 235, 235, 234, 234, 234,
 233, 233, 232, 232, 231, 231, 230, 230, 230, 229, 229, 228, 228, 227, 227, 226,
 226, 225, 225, 224, 224, 223, 223, 222, 222, 221, 221, 220, 219, 219, 218, 218,
 217, 217, 216, 216, 215, 215, 214, 213, 213, 212, 212, 211, 210, 210, 209, 209,
 208, 207, 207, 206, 206, 205, 204, 204, 203, 203, 202, 201, 201, 200, 199, 199,
 198, 197, 197, 196, 195, 195, 194, 193, 193, 192, 191, 191, 190, 189, 189, 188,
 187, 187, 186, 185, 185, 184, 183, 183, 182, 181, 180, 180, 179, 178, 178, 177,
 176, 175, 175, 174, 173, 172, 172, 171, 170, 170, 169, 168, 167, 167, 166, 165,
 164, 164, 163, 162, 161, 161, 160, 159, 158, 158, 157, 156, 155, 155, 154, 153,
 152, 152, 151, 150, 149, 148, 148, 147, 146, 145, 145, 144, 143, 142, 141, 141,
 140, 139, 138, 138, 137, 136, 135, 135, 134, 133, 132, 131, 131, 130, 129, 128
};




int main(void) { // инициалицация параметров контроллера для Fast PWM и АЦП
  cli(); // Выключить прерывания
  DDRB &= ~(1 << PB5);  // Настройка пина PB5 как вход для АЦП
  DDRB &= ~(1 << PB2);DDRB &= ~(1 << PB3);DDRB &= ~(1 << PB4);   // Настройка пинов как входов
  ADMUX =
             
            (0 << REFS0) |     // Опорное напряжение от источника VCC, bit 7
            (0 << REFS1) |     // Опорное напряжение от источника VCC, bit 6
            (1 << ADLAR) |     // результат сдвигаем влево, ADLAR bit5
            (0 << REFS2) |     // Опорное напряжение от источника VCC, bit 4
            (0 << MUX3)  |     // Включение входа (PB5) для ADC0, MUX bit 3
            (0 << MUX2)  |     // Включение входа (PB5) для ADC0, MUX bit 2
            (0 << MUX1)  |     // Включение входа (PB5) для ADC0, MUX bit 1
            (0 << MUX0);       // Включение входа (PB5) для ADC0, MUX bit 0
  ADCSRA =
            (1 << ADEN)  |     // Включаем ADC
            (1 << ADATE) |     // Включаем ADC Auto Trigger  без этого значения не работает обратная связь
            (1 << ADPS2) |     // Настройка преобразователя Коэффициент деления 2, bit 2
            (1 << ADPS1) |     // Настройка преобразователя Коэффициент деления 2, bit 1
            (1 << ADPS0);      // Настройка преобразователя Коэффициент деления 2, bit 0 
  ADCSRB =
            (0 << ADTS2) | (0 << ADTS1) | (0 << ADTS0); // Free Running mode for Auto Trigger
  DDRB |= (1 << PB0);  // PB0 (OC0A) Выход шим
  DDRB |= (1 << PB1);  // PB1 (OC0B) Выход шим
  TCCR0A |= (1 << WGM01) | (1 << WGM00); // Режим Fast PWM mode
  TCCR0A |= (1 << COM0A1) | (0 << COM0A0); // Прямой ШИМ для OC0A (PB0)
  TCCR0A |= (1 << COM0B1) | (1 << COM0B0); // Инвертированный ШИМ для OC0B (PB1)
  TCCR0B = (0 << WGM02) | (0 << CS02) | (0 << CS01) | (1 << CS00); // Prescaler 1 для скорости ~54Гц при таблице 1024 значений, при F_CPU 16000000 шим 62500 гЦ
  TIMSK  |= (1 << TOIE0); // Включить прерывание для таймера
  ADCSRA |= (1 << ADIE);  // Включить прерывание для АЦП
  OCR0A = 0; OCR0B = 0; // Начальное значение выходов
  sei();  //  Прерывания
  while (1) { 
  }
}

ISR(TIMER0_OVF_vect) {           // Прерывание по таймеру     
sine_index++; // счетаем от 0 до 1024
  if (sine_index >= 1024) { //Если равно 1024
    sine_index = 0; // То сбрасываем переменную в ноль и считаем сначала
  }
  sine_value = pgm_read_byte(&sine_table[sine_index]); // Читаем значение из таблицы ПОСЛЕ инкремента
  ADCSRA |= (1 << ADSC);// включаем преобразования АЦП   
}

ISR(ADC_vect) {
  uint8_t modulation_amplitude; // Результат модуляции синуса АЦП (0-255)
  uint8_t final_ocr_val_for_leg;  // Конечное значение для OCR активного плеча
  uint8_t adc_modulation_factor = 255 - ADCH; //Обратная связь
  uint32_t product = (uint32_t)sine_value * adc_modulation_factor; // Преобразование значения синусоиды с учетом обратной связи
  modulation_amplitude = (uint8_t)((product + (product >> 8)) >> 8); // Деление на 255 быстрый метод
  const uint8_t MAX_PWM_DUTY_PUSH_PULL = 230; // максимальное  рабочее значение ШИМ
  uint32_t scaled_product = (uint32_t)modulation_amplitude * MAX_PWM_DUTY_PUSH_PULL; // Маштабирование рабочего цикла ШИМ к мин и макс
  final_ocr_val_for_leg = (uint8_t)((scaled_product + (scaled_product >> 8)) >> 8); // Деление на 255 быстрый метод
  const uint8_t MIN_PWM_DUTY = 25; // минимальное  рабочее значение ШИМ
  if (final_ocr_val_for_leg < MIN_PWM_DUTY ) { // исключение отрицательного значения и не ниже MIN_PWM_DUTY
     final_ocr_val_for_leg = MIN_PWM_DUTY;
  }
    OCR0A = final_ocr_val_for_leg; // вывод шим сигнала на выход PB0 прямой 62.500 кГц с модуляцией синусоидой 54Гц
    OCR0B = final_ocr_val_for_leg; // вывод шим сигнала на выход PB1 инверсия 62.500 кГц с модуляцией синусоидой 54Гц
}

Фьюзы ставил Low Byte: 0xE1, High Byte: 0x7F, Extended Fuse Byte: 0xFE, Lock Bit Byte:0xFF
По входу PB5 обратная связь, на который подаем выпрямленное напряжение с выходной обмотки трансформатора
По выходам PB0 прямой и PB1 инвертированный ШИМ сигналы
С самого начала сделал выходной каскад по схеме Push-Pull и драйвер ucc27425 у которого два входа один инверсный,с небольшой переделкой кода.
Но для Push-pull максимальный рабочий цикл ШИМ ~48.2% , что неблагоприятно сказывается на качестве синусоиды учитывая что у нас 8bit ШИМ.
Дальше решил попробовать сделать на печатной плате и по мостовой схеме для драйверов IRS2186, транзисторы IRFP4004PBF
если есть какие нибудь советы рад буду применить, спасибо.
Занимаюсь только в целях интереса, и и освоения микроконтроллеров.


Вложения:
Комментарий к файлу: Прошивка шил через XGesuPro48
ATTINY85_1.hex [4.04 KiB]
Скачиваний: 19
Комментарий к файлу: Fuses Attiny85
Attiny85_Fuses.png [14.38 KiB]
Скачиваний: 20
Комментарий к файлу: Для push-Pull
Atiny85_push_pull_.c [6.73 KiB]
Скачиваний: 16
Комментарий к файлу: most
Atiny85_Most.c [10.01 KiB]
Скачиваний: 15
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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


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