Игорь 2

Трансиверы, передатчики, РПУ => Software Defined Radio (SDR) => Тема начата: ra0ahc от Сентябрь 20, 2021, 01:30:31 pm

Название: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 01:30:31 pm
Давно хотел сделать, точнее избавится от STEP перестройки частоты в радио. В icom это сделано. Чем мы хуже.
На эту мысль меня натолкнуло то, что приходится подстраивать кратно кГц и ли у меня 330 импульсов на оборот то это капец как сложно, а тыкать степ ...ну как-то уже не времена  переменных кондеров, можно поизголятся на программным кодом.

Вижу так :
короткий стоп на 000 гц всего несколько импульсов (если идет плавная подстройка).
cw ssb разный стартовый шаг 1 гц и 5 гц
переменный степ по таймеру
пропуск импульсов при медленной настройке

...
пока все, что в голову пришло  lol22
Название: Re: Умный валкодер в радиостанции
Отправлено: Игорь 2 от Сентябрь 20, 2021, 02:32:07 pm
Если я правильно понял Вашу мысль, Вы хотите делать адаптивный шаг перестройки валкодера. В сущности это же давно применяется, к примеру, у меня в 80-х при самодельном валкодере с 32 по-моему, импульсами на оборот, стартовый шаг был 10 Гц, потом - 1 кГц, далее - 10 кГц. На валу сидел маховик, и всё было более-менее приемлемо.
Сейчас везде работают в качестве опоры синтезы от Андрея UR3ILF, четно говоря, особо не въезжал в алгоритм, но всё вполне себе приемлемо, шаг там тоже адаптивный, но маховиков на валкодере нет.
Начальный шаг - те же 10 Гц... 1yep dontt44 lol22
Название: Re: Умный валкодер в радиостанции
Отправлено: zenit от Сентябрь 20, 2021, 03:05:34 pm
Зачем пропускать импульсы при медленном вращении ручки?
Можно сделать умножение начального шага.
Такой алгоритм используют на AVR.
Таймер в режиме счёта запускается при любом изменении состояния валкода. Причём начальное число отсчёта до переполнения задаётся в установках и это число присваивается таймеру при каждом изменении состояния валкода. Непосредственно в обработчике валкода  байт используемый для умножения шага всегда инкриминируется. А в прерывании по переполнению таймера наоборот декриминируется и если этот байт умножения равен 1 то таймер останавливается.
Работает так.
Первый заход в обработку байт умножения равен 1. Шаги перестройки не умножаются. Следом множитель шага+1 байт умножения = 2 и запускается таймер например с числа 25 а переполнение по 255. Время счёта  до переполнения условно пусть для примера будет 50мс.
Если за это время переполнения таймера не было но произошла смена состояния валкодера то шаг перестройки х2 и на следующую обработку множитель инкриминировался и стал = 3 а таймер сбросился на 25.
Если между сменой состояния валкода было переполнение таймера то множитель -1 каждые условные 50мс пока множитель не станет равен 1 и таймер останавливается.

Такой алгоритм  удобно по диапазону пробежаться за него не вылетая.
Можно  сделать сравнение до сколько досчитал таймер между сменой состояния валкода и сделать таблицу выбирая шаг в зависимости сколько таймер насчитал. Удобнее считать и умножать байт так как код получается компактнее и быстрее работает на AVR. Потому что работать с байтом быстрее и проще чем с кучей сравнений.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 03:45:30 pm
Начальный шаг - те же 10 Гц...
Не пойдет, для телеграфа нужен шаг меньше чем 1Гц . Увы, уходим во float частоту (раньше хранилась в int). Шаг должен быть меньше 1 иначе ...лично я задолбался эти 000 гц выставлять...пролетаю.
 
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 03:46:00 pm
расчет степа

static float32_t getStep(int16_t df){

    if(df==0) {
       if(level>1.0f) {
           if(level<10) level-=0.1f;
           else  level-=2.0f;
       }
        return 0;
    }
    df= abs(df);
    if( trx.trx[trx.activRX][trx.nowBandNN[trx.activRX]][MODE] ==CW){
        df/=2;
    }
    if(df==0)  df=1;

        if (level + (float32_t) df / 2 < 100.0f) level += (float32_t) df / 8;
    return level;
}
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 03:47:51 pm
Вот так нормально рыскать. Ручку если умеренно дергать то рысканье происходит в малых диапазонах. Если быстрее, то степ сам набрасывается. Но если остановится то степ постепенно сам вниз улетает до 0.5Гц.
Пока не пробовал ...станций еще нет в эфире.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 03:50:18 pm
Таймер в режиме счёта запускается при любом изменении состояния валкода. Причём начальное число отсчёта до переполнения задаётся в установках и это число присваивается таймеру при каждом изменении состояния валкода.
Это в стм сделано а HAL я просто считываю константу и там уже импульсы посчитаны (формат uint32_t)
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 03:51:27 pm
вот в принципе подпрограмма изменения частоты

void FREQ_encoderMain(void) {
    if (TIM3->CNT == 0x7fff) {
        getStep(0);
        return;
    }

    f.deltafreqAndEnc = TIM3->CNT - 0x7fff;
    TIM3->CNT = 0x7fff;//обнулим чтобы потом только дельту смотреть

    int32_t a = (int32_t)((float32_t)f.deltafreqAndEnc * getStep(f.deltafreqAndEnc));// f.step;
    if (trx.activRX) {
        if (f.rx2 + a < 30000001 && f.rx2 + a > 500000) {
            f.rx2 += a;//2
            trx.trx[RX2][trx.nowBandNN[RX2]][FREQ] = f.rx2;
        }
    } else {
        if (f.rx1 + a < 450000000 && f.rx1 + a > 500000) f.rx1 += a;//1
        trx.trx[RX1][trx.nowBandNN[RX1]][FREQ] = f.rx1;
    }
    f.needToDraw = f.saveFPGA = YES;


}
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 03:53:22 pm
Первый заход в обработку байт умножения равен 1. Шаги перестройки не умножаются. Следом множитель шага+1 байт умножения = 2 и запускается таймер например с числа 25 а переполнение по 255. Время счёта  до переполнения условно пусть для примера будет 50мс.
ну что то подобное только без таймеров. Чисто на скорости вращения.
Название: Re: Умный валкодер в радиостанции
Отправлено: zenit от Сентябрь 20, 2021, 04:32:28 pm
Чисто на скорости вращения.
Как без точного временного интервала узнать скорость вращения? И зачем шаг 0,5 герца? Перестройка шагом 1 герц тоже не слышна. 5 герц начальный шаг нормально. И даже 10. А чтоб последний ноль не ловить надо младший разряд индикации частоты убрать. 123123
А вообще настраиваться в ноли до седьмого знака это мода нынче такая. Я по привычке на слух настраиваюсь а сколько там на шкале ни на что кроме проблем в башке не влияет.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 04:51:21 pm
И зачем шаг 0,5 герца? Перестройка шагом 1 герц тоже не слышна. 5 герц начальный шаг нормально. И даже 10.
Согласен, но у меня 360 импульсов на оборот. так что мне никак 10гц
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 06:27:02 pm
Все поменял после прослушивания эфира  lllol lllol

static float32_t getStep(int16_t df) {
    float32_t def_level;
    if (trx.trx[trx.activRX][trx.nowBandNN[trx.activRX]][MODE] == CW)
        def_level = 1.0f;
    else
        def_level = 5.0f;

    if (df == 0) {
        level = def_level;
        return 0;
    }
    if (direction && df < 0) {
        direction = 0;
        level = def_level;
    }
    if (!direction && df > 0) {
        direction = 1;
        level = def_level;
    }

    df = abs(df);
    if (trx.trx[trx.activRX][trx.nowBandNN[trx.activRX]][MODE] == CW) {
        df /= 2;
    }
    if (df == 0) df = 1;

    if (df > 1 && df < 5) {
        if (level + 0.5f < 100.0f) level += 0.5f;//(float32_t) df / 10;
    } else if (df >= 5) {
        if (level + 0.7f < 100.0f) level += 0.7f;//(float32_t) df / 10;
    }
    return level;
}
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 06:29:01 pm
Правда теперь, если оперативно перестраиваешься, то надо смотреть на панораму  nea33 можно пролететь.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 07:19:50 pm
Ввел задержку на начало ускорения и вроде нормуль. После остановки обнуляется все и восстанавливается задержка, тоже при реверсе. Вот так нормуль и можно крутить.
Осталось сделать на 000Гц остановочку.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 20, 2021, 08:02:16 pm
А вообще, этот алгоритм должен созреть.
Пока у меня нет ручки, просто вал на энкодере и это не понятно.
Завтра попробую купить ручку для полного контакта. Тогда и продолжу алгоритм.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 21, 2021, 06:21:57 pm
Только такой есть в нашем сельпо  44443
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 21, 2021, 06:51:04 pm
Ну после тестов  adm алгоритм пошёл в помойку.
Название: Re: Умный валкодер в радиостанции
Отправлено: Игорь 2 от Сентябрь 21, 2021, 06:55:33 pm
 dontt44 cr123
С трудом понимаю, что там у Вас, но я со второй иттерации принял то, про что выше писал...
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 21, 2021, 07:24:38 pm
Пока пальцами крутил вал энкодера было одно  , а когда Крутик поставил вообще все плохо стало ))) улетает капец куда и ускорение очень быстрое. Надо дорабатывать алгоритм.
Название: Re: Умный валкодер в радиостанции
Отправлено: Core от Сентябрь 21, 2021, 07:45:16 pm
Это ещё шишечка пустотелая, была бы увесистая…
Название: Re: Умный валкодер в радиостанции
Отправлено: Игорь 2 от Сентябрь 21, 2021, 08:02:06 pm
У меня с маховиком была.... cr123
Название: Re: Умный валкодер в радиостанции
Отправлено: RK4CI от Сентябрь 21, 2021, 11:35:22 pm
У меня с маховиком была.
Современные валкодеры в основном на подшипниках. Даже с обычной ручкой он чуть ли не минуту будет крутиться. У себя наоборот под ручку ваты напихал, что бы чуть притормаживало. И при перестройке внутри диапазона, при шаге 10 Гц, никакого умножения или пропуска шагов не требуется. А перегонять на другой диапазон валкодером, просто нет смысла. У меня 128 импульсов на оборот. Шаг и по фронту, и по тылу импульса. Почти 3 кГц на оборот. Собственно близко к этому у меня и на старом трансивере было. Увеличение шага перестройки при быстром вращении, в настройках предусмотрено. Но пользоваться этим не очень понравилось.
Название: Re: Умный валкодер в радиостанции
Отправлено: RK4CI от Сентябрь 21, 2021, 11:42:11 pm
была бы увесистая
У меня такая же на дополнительной ручке настройки стоит. Так же пришлось принимать меры для притормаживания. Может у меня сами валкодеры чуть другие. Без подтормаживания, они по моему просто от дуновения воздуха крутиться будут.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 22, 2021, 09:37:34 am
На самом деле возможно так и есть… эта функция не нужна. К тому же у меня на экране если тыкать пальцем в край то перестройка на 40 кГц идёт и скорость нажатия любая. Если и нужно это делать то в небольших приделах… скажем … шаг максимум 10 гц (по умолчанию 5 для ссб) если у меня 360 импульсов на оборот то это 3600 на оборот … практически перестройка на следующую станцию )))
Название: Re: Умный валкодер в радиостанции
Отправлено: Core от Сентябрь 22, 2021, 09:40:28 am
У вас валкодер на шариковых подшипниках, ход очень легкий. Я под шишечку тонкий войлок подкладывал чтобы убрать эффект маховика
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Сентябрь 22, 2021, 09:53:00 am
Методы торможения разные )) можно смазку на жесткую в подшипниках поменять и тоже затормозится вал. Эти энкодеры сделаны для длительной работы на производственных линиях и они обязаны легко крутится.
Но тема не про это. На самом деле при 360 импульсах тяжко на 1 импульс повернуть вот поэтому и надо пропуски делать при малых изменениях или рысканиях туда сюда
Название: Re: Умный валкодер в радиостанции
Отправлено: Core от Сентябрь 22, 2021, 10:03:05 am
Я делитель собирал.
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Октябрь 02, 2021, 11:36:16 am
Вот так получилось нормально. при ssb степ начинает с 5 гц и может достигать 100 гц на один импульс что равно 36кГц за один оборот. Причем, если на мгновение остановится и продолжить вращать, то скорость падает плавно или вообще не падает, зависит от "мгновения". На этом я запоролся в первых вариантах алгоритма и только сейчас исправил. Мягко работает, без скачков. Если меняется направление, то сразу степ скидывается по умолчанию.

при CW степ начинается от 1Гц

static float32_t getStep(int16_t df) {
    float32_t def_level;
    if (trx.trx[trx.activRX][trx.nowBandNN[trx.activRX]][MODE] == CW) def_level = 1.0f;
    else def_level = 5.0f;

    if (df == 0) {
       // level = def_level;
        delay = 30;
        return 0;
    }

    if (direction && df < 0) {
        direction = 0;
        level = def_level;
    }
    if (!direction && df > 0) {
        direction = 1;
        level = def_level;
    }

    df = abs(df);
    if (trx.trx[trx.activRX][trx.nowBandNN[trx.activRX]][MODE] == CW) {
        df /= 2;
    }
    if (df == 0) df = 1;
    if (delay)
        delay--;
    else {
        if (df > 1 && df < 5) {
            if (level + 0.5f < 100.0f) level += 0.5f;
        } else if (df >= 5) {
            if (level + 0.7f < 100.0f) level += 0.7f;
        }
    }
    return level;
}
Название: Re: Умный валкодер в радиостанции
Отправлено: ra0ahc от Октябрь 02, 2021, 11:38:21 am
Пока непонятно как сделать короткий стоп на 000 частоте.
Название: Re: Умный валкодер в радиостанции
Отправлено: RC3U от Ноябрь 03, 2021, 01:36:58 pm
Вот так получилось нормально.
У Геннадия Завидовского примерно так сделано в его воробье. Просто сказка.  1999 На 1000-ке приходится привыкать кнопку FAST нажимать.  dontt44
Пока непонятно как сделать короткий стоп на 000 частоте.
А оно надо?