Синусоидальный генератор

Тед
Солнце 16 июля 2017 г. 22:15
Привет
Синусоидальный генератор
Может ли кто -нибудь помочь мне в программировании STM32F103C8T6, чтобы генерировать сигнал синусолюбии, аналогичный; https: // www.Romanblack.com/oneyec/sinedds.htm но с способностью изменять фазу и амплитуду одного канала.


Rogerclark
Пн 17 июля 2017 г., 7:41
[Chismicro - Пн 17 июля 2017 г. 4:21] - https: // github.com/chrismicro/attinysou ... Модуляция
Я надеюсь, что у OP есть четкое понимание регистров AVR

Chismicro
Пн 17 июля 2017 г. 9:08
UPPS ... Это был неправильный каталог. : шок:
Я исправил это и надеюсь, что это более полезно.

Rogerclark
Пн 17 июля 2017 г. 9:59 вечера
РЖУ НЕ МОГУ

Хорошо.

Спасибо за публикацию

Дэнниф
Пн 17 июля 2017 г. 11:51
Гораздо легче выбрать один со встроенным ЦАП.

Mrburnette
Пн, 01 января 2018 г., 19:05
В течение дождливого дня можно пожелать изучить дискуссию Дона Ланкастера о волшебных волнах синуса.
https: // www.Тинаджа.com/magsn01.SHTML

В современном мире посвященных IC обсуждение может иметь небольшую практическую ценность за пределами достойного обзора математики.

Луча

Пито
Вторник 02 января 2018 12:17
@Ray - интересная статья. Точное время - вот почему у STM32F334 есть таймер с Линейка продуктов STM32F3X4 специально рассматривает приложения цифрового преобразования питания, такие как D-SMP, освещение, сварка, инверторы для солнечных систем и беспроводные зарядные устройства..
Таймер с высоким разрешением: 217 л.с., самокомпенсированные по сравнению с источником питания и дрейф температуры..
Разрешение 217 л.с., доступное для всех режимов эксплуатации..
Прозрачная реализация высокого разрешения (эквивалентная 4.6 ГГц таймер)..

Тед
Сб 6 января 2018 г. 12:15
Генератор синусоидальных волн на STM23F103 завершен.

Дэнниф
Сб 06 января 2018 г. 1:58
Генератор синусоидальных волн на STM23F103 завершен. Ваш ответ оказал большую помощь другим, желающим реализовать генерацию синусоидальных волн.

Тед
Вторник 30 января 2018 г., 17:03
Вот это
#define F_TIMER 72000000 #define FREQ 10000 //in Hz #define SAMPLES ((int)sqrt(F_TIMER / FREQ)) #define T_CNT ((F_TIMER/FREQ)/SAMPLES) #define sin_zero (T_CNT/2) #define amp0 (sin_zero/2) #define max_amp (sin_zero-1) /* #define DEBOUNCE_DELAY 100 #define DEBOUNCE_IDLE 0 #define DEBOUNCE_ACTIVE 1 */ #include dma_tube_config dma_cfg, dma_cfg2; int flag1 = 0; int flag2 = 0; int out1 = PB7; int out2 = PA8; int out3 = PA9; int * val1 = new int[SAMPLES]; int * val2 = new int[SAMPLES]; int phasep = PB6; int phasen = PB5; int ampp = PB8; int ampn = PB9; int16 shift = 0; int amp = amp0; int cnt = 0; int time_track = 0; float stp = 6.2831 / SAMPLES; int ret = 17; timer_dev *dev1 = PIN_MAP[out1].timer_device; timer_dev *dev2 = PIN_MAP[out2].timer_device; uint8 cc_channel1 = PIN_MAP[out1].timer_channel; uint8 cc_channel2 = PIN_MAP[out2].timer_channel; void fun() { static uint8_t ff = 0; flag1++; } void fun2() { static uint8_t ff = 0; flag2++; digitalWrite(out3, ff = (1 - ff)); } void timer_conf() { timer_dma_set_base_addr(dev1, TIMER_DMA_BASE_CCR2); timer_dma_set_burst_len(dev1, 1); timer_dma_enable_req(dev1, cc_channel1); timer_set_reload(dev1, T_CNT); timer_set_prescaler(dev1, 0); timer_dma_set_base_addr(dev2, TIMER_DMA_BASE_CCR1); timer_dma_set_burst_len(dev2, 1); timer_dma_enable_req(dev2, cc_channel2); timer_set_reload(dev2, T_CNT); timer_set_prescaler(dev2, 0); } void dma_conf() { dma_init(DMA1); /* T4C2 DMA C4 */ dma_cfg.tube_dst = &(dev1->regs.gen->DMAR); dma_cfg.tube_dst_size = DMA_SIZE_32BITS; dma_cfg.tube_src = val1; dma_cfg.tube_src_size = DMA_SIZE_32BITS; dma_cfg.tube_nr_xfers = SAMPLES; dma_cfg.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC | DMA_CFG_CMPLT_IE; dma_cfg.tube_req_src = DMA_REQ_SRC_TIM4_CH2; dma_cfg.target_data = 0; ret = dma_tube_cfg(DMA1, DMA_CH4, &dma_cfg); /* T1C1 DMA C2 */ dma_cfg.tube_dst = &(dev2->regs.gen->DMAR); dma_cfg.tube_dst_size = DMA_SIZE_32BITS; dma_cfg.tube_src = val2; dma_cfg.tube_src_size = DMA_SIZE_32BITS; dma_cfg.tube_nr_xfers = SAMPLES; dma_cfg.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC | DMA_CFG_HALF_CMPLT_IE | DMA_CFG_CMPLT_IE; dma_cfg.tube_req_src = DMA_REQ_SRC_TIM1_CH1; dma_cfg.target_data = 0; ret = dma_tube_cfg(DMA1, DMA_CH2, &dma_cfg); } void dma_start() { // dma_attach_interrupt(DMA1, DMA_CH4, fun); dma_enable(DMA1, DMA_CH4); timer_resume(dev1); dma_attach_interrupt(DMA1, DMA_CH2, fun2); dma_enable(DMA1, DMA_CH2); timer_resume(dev2); } void init_wave() { int i; for (i = 0; i < SAMPLES; i++) { val1[i] = sin_zero + amp * sin(stp * i); val2[i] = val1[i]; } } void setup() { int i; pinMode(out1, PWM); pinMode(out2, PWM); pinMode(out3, OUTPUT); Serial.begin(9600); timer_conf(); dma_conf(); dma_start(); init_wave(); } void loop() { }

Ахулл
Вторник 30 января 2018 г. 20:37
Это выглядит довольно полезно, каковы ограничения (максимальная частота, размер выборки и т. Д.) и как это работает?

Тед
Вторник 30 января 2018 г. 20:54
Я использовал его в течение 15 кГц, вы меняете частоту очень простую - линия № 2, для частоты выше 2 или 3 кГц одиночный LC Filter отлично работает

3.97 Большой дисплей 240x400 ST7793

F405 & F411 версии Bluepill

Вход - выход