И ещё, я использую для защиты цепочку встречно-параллельных диодов,
но это нормально работает только на старой прошивке без балансировки.
В чем идея и как реализована эта самая балансировка? Почему оно не работает с диодами?
primuss3.com
Код: Выделить всё
//DAC1 TRIANGLE WAWE MODE | TRIANGLE Amplitude 15
|DAC_CR_WAVE1_1|DAC_CR_MAMP1_1|DAC_CR_MAMP1_0
//DAC2 TRIANGLE WAWE MODE | TRIANGLE Amplitude 15
|DAC_CR_WAVE2_1|DAC_CR_MAMP2_1|DAC_CR_MAMP2_0Код: Выделить всё
const uint32_t k = (SINE_OFFSET |(SINE_OFFSET<<16)); // Это смещение синуса для DAC? Типа OFFSET*2^16+OFFSET ???Код: Выделить всё
while(j-- > 0) {
uint32_t sig = ((sine[sptr])>>7)&0xffff; //Делаем из 20 bit sin(theta) 13 bit sin(theta), а может и 12 bit, зависит от макс значения
*dptr++ = k + sig - (sig<<16);// Похоже на операцию смещения по DC, но что это не понял
sptr++;
}
Код: Выделить всё
{
int dat = adc_dma[j] - SINE_OFFSET; //Смещение постоянной составляющей ADC Opa ?
mreal[k] += ((int)sine[j+N/4]*dat); //cos(theta) = sin(theta + pi/2), но это вроде справедливо только для 1kHz или для остальных частот это тоже так?
mimag[k] -= ((int)sine[j]*dat); //sin(theta)
j++;
}
Код: Выделить всё
TIM2->CCR1 = 46;
TIM2->CCR2 = 62;
TIM2->CCR3 = 10;
Балансировка убирает различие между каналами, чтобы не надо было подбирать емкости и резисторы рц цепочек. Не работает может быть потому что диоды ограничивают выходное напряжение на уровне полувольта, а оно в момент балансировки вольта два насколько я помню.slav0n писал(а):но это нормально работает только на старой прошивке без балансировки.
В чем идея и как реализована эта самая балансировка? Почему оно не работает с диодами?
На про радио, тема по рлц3 - http://pro-radio.ru/measure/6903/ub3taf писал(а):где можно найти описание по теории вопроса алгоритма измерения примененного в данном девайсе.
Позволяет увеличить разрешение и линейность ацп, цап одновременно выводит и треугольники и синус.ub3taf писал(а):1. Частности непонятно зачем у DAC включен режим генерации треугольника, но затем данные грузятся из буфера dac_buf через DMA?
Там два канала цапа же, 16 битов один канал и еще примерно 16 второй.ub3taf писал(а):2. Не понял код в прерывании DMA1_Channel4
Для всех частот которые используются Н/4 дает сдвиг фазы в четверть периода, а количество периодов меняется. Это для упрощения сделано.ub3taf писал(а):3. В прерывании DMA1_channel1 при вычислении mreal[k] точки берутся для всех частот с смещением +N/4 это и будет + pi/2 для всех частот? там вроде разное количество периодов в буфере для разных частот.
Видимо остальные каналы таймера тоже используютсяub3taf писал(а):4. Ядро я так понял работает в разгоне до 32MHz, а таймер TIM2 тикает с частотой 500kHz. Но вот зачем у него режим в котором используются три CCR регистра. Вроде достаточно TIM2->CCR1 = 46;
Мне тоже интересен данный вопрос, вдруг кто продвинулся в изучении.ub3taf писал(а):Я понимаю... у всего есть тайный смысл, но может кто-то ответит.
Нельзя, прошивка не поддерживает.anry025 писал(а):можно ли применить в данную схему дисплей от Nokia 6100?
Прошивка понятно, я имел ввиду железо потянет?Neekeetos писал(а):Нельзя, прошивка не поддерживает.anry025 писал(а):можно ли применить в данную схему дисплей от Nokia 6100?
Эту нескончаемую тему я видел, но изучить сообщения с 2008 года видимо жизни не хватитНа про радио, тема по рлц3 - http://pro-radio.ru/measure/6903/
Код: Выделить всё
Позволяет увеличить разрешение и линейность ацп, цап одновременно выводит и треугольники и синус.Код: Выделить всё
Там два канала цапа же, 16 битов один канал и еще примерно 16 второй.Код: Выделить всё
Видимо остальные каналы таймера тоже используютсяНе сталкивался с таким экраном, а так если четырех ножек хватит для его управления то наверно железо потянет.anry025 писал(а):я имел ввиду железо потянуть?
Ну кто то делает, а кто то обсуждает, это нормально. У меня планов по шагам описывать что делаю обычно нету, поэтому так, только в виде результата. Считаю что кому надо вполне может самостоятельно раскрыть мануал по мк и языку си, разобраться с исходниками, собсно многие так и сделали.ub3taf писал(а):Какое то в нашей стране странное отношение к коллективной разработке, все в форум, ни каких итого.
Глянул еще раз цитату из кода. Там строчка в которой константа помещается два раза в 32битное слово. В этом сложность? Понять что происходит дублирование?ub3taf писал(а):понятнее не стало.
Основная идея такая что разные каналы используются для синхронизации разных устройств типа ацп, цап и прочего барахла, это в общем очевидно из исходника.ub3taf писал(а):А можно тогда узнать название режима или основную идею.
на самом деле там амплитуда сигнала 0.8 вольта и я использую 6 диодовNeekeetos писал(а):Не работает может быть потому что диоды ограничивают выходное напряжение на уровне полувольта, а оно в момент балансировки вольта два насколько я помню.
Код: Выделить всё
mAcc[0].Re = 0;mAcc[0].Im = 0;
mAcc[1].Re = 0;mAcc[1].Im = 0;
mAcc[2].Re = 0;mAcc[2].Im = 0;
while(rounds-- >0 )
{
runRound();
mAcc[0].Re += mData[0].Re;
mAcc[0].Im += mData[0].Im;
mAcc[1].Re += mData[1].Re;
mAcc[1].Im += mData[1].Im;
mAcc[2].Re += mData[2].Re;
mAcc[2].Im += mData[2].Im;
runRound();
mAcc[0].Re -= mData[0].Re;
mAcc[0].Im -= mData[0].Im;
mAcc[1].Re -= mData[1].Re;
mAcc[1].Im -= mData[1].Im;
mAcc[2].Re -= mData[2].Re;
mAcc[2].Im -= mData[2].Im;
}
...
cplxMul(&mAcc[0], &(corr.Corr0) );
cplxMul(&mAcc[2], &(corr.Corr2) );Я не против вопросов по существу, но разжевывать каждую строчку мне бы не хотелось. Для человека знакомого с си что делает код понятно и без комментариев, а для незнакомого - просто не надо лезть в кодslav0n писал(а):интересно узнать смысл происходящего здесь
Это чтобы убрать синхронные наводки от работы мк, данные собираются через раз со сдвигом 0 и 180 градусов, акумулятор соотв всегда накапливает сигнал но обнуляет помеху.slav0n писал(а):непонятно накопление аккумулятора
Код: Выделить всё
if( DMA1->ISR & DMA_ISR_HTIF1 ) {j =0; }else{j =N/2;}Код: Выделить всё
j = (DMA1->ISR & DMA_ISR_HTIF1) ? 0 : N/2;Это не оно, тут просто двойной буфер дма обрабатывается, а сдвиг фазы происходит при переключении каналов ацп тутslav0n писал(а):если написать совсем уж по-сишномуКод: Выделить всё
j = (DMA1->ISR & DMA_ISR_HTIF1) ? 0 : N/2;
Код: Выделить всё
TIM1_BRK_TIM15_IRQHandler(void)честно говоря не понял как происходит сдвиг фазы.Neekeetos писал(а):а сдвиг фазы происходит при переключении каналов ацп тут
Код: Выделить всё
mData[0].Re = mreal[0];mData[0].Im = mimag[0];
mData[1].Re = mreal[1];mData[1].Im = mimag[1];
mData[2].Re = mreal[2];mData[2].Im = mimag[2];Да точно там, в остальных 43 строках этого обработчика.slav0n писал(а):В обработчике я увидел просто копирование
видимо в двух последнихNeekeetos писал(а): 43 строках
Name: atan2f
Prototype: float atan2f (float y, float x)
Description:
This function computes the arc tangent of y/x, but the signs of both arguments are used to determine the quadrant
of the result, and x is permitted to be zero. The return value is given in radians and is in the range -pi to pi,
inclusive.
If x and y are coordinates of a point in the plane, atan2 returns the signed angle between the line from the origin
to that point and the x-axis. Thus, atan2 is useful for converting Cartesian coordinates to polar coordinates. (To
compute the radial coordinate, use hypot; see Exponents and Logarithms.)
If both x and y are zero, atan2 returns zero.
Header files:
math.h
Спасибо, все нашлось.Header files:math.h