Генерация синуса 50 Гц на AVR
Генерация синуса 50 Гц на AVR
Генерация синуса 50 Гц на AVR
ru
Топики Блоги Люди Форум Магазин Конкурс Справочная Войти или Зарегистрироваться
Сообщество EasyElectronics.ru
синхронизирующей периоды сети и UPS, чтобы избежать импульсов при antohami → Beremiz - свободная среда
переключении. программирования ПЛК. Часть 1 67 → PLC
Для облегчения задачи я сделал простую табличку расчета параметров Vga → Фоторезист + ЛУТ = ... 34 →
Технологии
таймера и таблицы синуса под нужные параметры. Кстати, ее легко
адаптировать под другие задачи. kos → Модуль Zigbee UART DL-20 33 →
Деталька
Таблицу синуса я использовал для простоты, но, пользуясь информацией из sdv_cyborg → MCUCapture - утилита для
интернета, можно генерировать вполне приемлемый синус на лету. Я захвата данных из массива в памяти
проверил, результат получается очень близкий. Или подготовить таблицу микроконтроллера 3 → Софт для электронщика
при старте контроллера. К сожалению, для достижения необходимой Technicum505SU → Корректируем время
точности этот метод требует умножения чисел с несколькими цифрами после на счётчике СОЭ-55 МЗЭП 23 → Блог им. toxin65
запятой или каких-то трюков, поэтому я пока от него отказался.
anakost → Delphi. Определение
разрешения видеофайлов форматов AVI и MKV
Таблица содержит только четверть периода синуса, остальное повторяется в прямым парсингом без использования кодеков.
разном порядке, ну, вы поняли. Часть II. 1 → Алгоритмы и программные
решения
Количество импульсов ШИМ на период синуса фиксированное, оно
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 1/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
расчитывается из исходных данных в таблице. kalobyte-ya → USB для AVR. Часть 2. HID
Class на V-USB 363 → Связь железа с
компьютером.
/*
* PWM_Mega168.c 011119xx → Управление светодиодной
лентой на WS2812B с STM32F10x 254 → STM32
*
* Created: 08.03.2015 19:03:07 Vga → Две схемы таймера для
* Author: antonluba вентилятора ванной комнаты. 16 → Блог им.
Technicum505SU
*/
trengtor → Макетирование на Veroboard
#include <avr/io.h> stripboard и на простых stripboard 105 →
Технологии
#include <avr/interrupt.h>
Vga → DDS синтезатор AD9833 83 → Блог
#define PULSE_PER_QUADRANT 88 им. grand1987
257 ,
262 , AVR 38.98
268 , STM8 37.92
273 ,
279 , Мусоровоз 29.53
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 2/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
336 ,
340 ,
344 ,
348 ,
352 ,
355 ,
359 ,
362 ,
366 ,
369 ,
372 ,
375 ,
378 ,
381 ,
383 ,
386 ,
388 ,
390 ,
393 ,
395 ,
396 ,
398 ,
400 ,
401 ,
403 ,
404 ,
405 ,
406 ,
407 ,
407 ,
408 ,
409 ,
409 ,
409
};
uint8_t quadrant;
uint8_t pulse_counter;
uint8_t sin_index;
ISR(TIMER1_OVF_vect)
{
switch (quadrant)
{
case 1:
OCR1A = sinus[pulse_counter];
pulse_counter++;
if (pulse_counter==PULSE_PER_QUADRANT-1)
{
quadrant = 2;
}
break;
case 2:
OCR1A = sinus[pulse_counter];
pulse_counter--;
if (pulse_counter == 0)
{
quadrant = 3;
OCR1A = 0;
}
break;
case 3:
OCR1B = sinus[pulse_counter];
pulse_counter++;
if (pulse_counter==PULSE_PER_QUADRANT-1)
{
quadrant = 4;
}
break;
case 4:
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 3/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
OCR1B = sinus[pulse_counter];
pulse_counter--;
if (pulse_counter== 0)
{
quadrant = 1;
OCR1B = 0;
}
break;
}
}
int main(void)
{
pulse_counter = 0;
quadrant = 1;
// ports init
PORTB = 0;
DDRB = (1 << PB1)|(1 << PB2);
// timer init
TCCR1A = (1 << COM1A1)|(0 << COM1A0)|(1<< COM1B1)|(0 << COM1B0)|
TCCR1B = (1 << WGM13)|(0 << WGM12)|(0 << CS12)|(0 << CS11)|(1 <<
ICR1 = TOP_;
TIMSK1 = (1 << TOIE1);
OCR1A = 0;
OCR1B = 0;
//global init
sei();
while(1)
{
//TODO:: Please write your application code
}
}
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 4/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 5/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
Продолжение здесь
Комментарии (22)
RSS свернуть / развернуть
Подобного рода осциллограммы в Proteus проще и лучше делать в «Graph Mode», для 0
смешанных сигналов лучше использовать Mixed graph. Кроме увеличения скорости
анализа, можно будет легко масштабировать, использовать курсоры. Осциллограф в
Proteus работает медленно, да и кривовато.
kvm
09 марта 2015, 23:35
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 6/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
__bl__
09 марта 2015, 23:37
Anatol80
10 марта 2015, 00:49
__bl__
10 марта 2015, 01:18 ↑
antonluba
10 марта 2015, 10:39 ↑
Anatol80
10 марта 2015, 12:41 ↑
antonluba
10 марта 2015, 12:46 ↑
Anatol80
10 марта 2015, 13:07 ↑
antonluba
10 марта 2015, 13:35 ↑
e_mc2
10 марта 2015, 13:44 ↑
uint8_t quadrant;
uint8_t pulse_counter;
antonluba
10 марта 2015, 13:50 ↑
e_mc2
10 марта 2015, 16:33 ↑
Anatol80
10 марта 2015, 14:07 ↑
переменная 0
const uint16_t sinus[PULSE_PER_QUADRANT]
Mihail
10 марта 2015, 10:24
переменная 0
const uint16_t sinus[PULSE_PER_QUADRANT]
будет храниться в памяти RAM
Да, это я знаю, спасибо. Но для проверки идеи, тем более на модели, не стал
усложнять.
antonluba
10 марта 2015, 10:38 ↑
Mihail
10 марта 2015, 10:37
antonluba
10 марта 2015, 10:46 ↑
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 8/9
29.02.2020 Генерация синуса 50 Гц на AVR / Блог им. antonluba / Сообщество EasyElectronics.ru
-1
значит соответственно и другая программа. А что мы обсуждаем тогда вообще?
Сама идея синуса на МК тоже не нова.
Mihail
10 марта 2015, 11:24 ↑
antonluba
10 марта 2015, 11:40 ↑
Диодный мост->конденсатор->ШИМ
dekar
10 марта 2015, 12:08
antonluba
10 марта 2015, 12:41 ↑
scaldov
14 марта 2015, 15:22 ↑
we.easyelectronics.ru/antonluba/generaciya-sinusa-50-gc-na-avr.html 9/9