Академический Документы
Профессиональный Документы
Культура Документы
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