Перейти к содержанию
    

murmur

Участник*
  • Постов

    665
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные murmur


  1. у stm32f429 вроде как нет DSI, только в 469.

    Так я ж писала

    Если DSI можно напрямую подключать к LVDS, то может проще мне на указанном выше модуле заменить 429 чип на 469? Собственно вопрос - DSI и LVDS прямо совместимы?

     

    и у dsi там две пары, дисплею надо 8.

    Почему 2? Почему 8?

    DSI в камне 3 пары. А дисплею, для режима 565 нужно 2 пары - 16 бит - 2 пары по 8 бит.

    Более того - DSI в STM Cube включается не где-нибудь, а в модуле LTCD.

     

    на свой дисплей даташит откройте и посмотрите

    сейчас посмотрю.

     

     

    Хм... в дисплее то нужно по 1 паре на R,G,B и CLK. Но при этом контроллируются четные и нечетные пикелы. Вы правы, 8 пар надо.469 чип однозначно не рулит. И сериализатор нужно искать на 8 пар....

     

    Вот такая табличка на сайте техасцев-инструментариев http://www.ti.com/interface/fpd-link-serde...s/overview.html

    Я правильно поняла, что максимальное разрешение, которое можно преобразовать из RGB в LVDS это 720p ? А для 1980p решений не существует?

     

    А вот еще интересный дисплейчик - там 3 пары всего, но называются они как-то странно - Lane0, Lane1 и AUX. Кто-нибудь знает, что это за формат такой?

  2. Так... я наверное недостаточно ясно выразилась.

    Во-первых, дисплей с LVDS, а не с DSI. Вопрос был в том, можно ли DSI порт процесора подключать к LVDS дисплею (я в STM CUBE MX создала проект, у меня появилось несколько дифференциальных пар, как в LVDS).

     

     

    ЗЫ. все, из мне известных мостов из rgb to dsi, исключительно в бга исполнениях, так что не для домашнего использования. (в смысле, на коленке не собрать)

    Вот вам мост RGB to DSI - https://docviewer.yandex.ru/view/0/?*=KyVcF...e=1&lang=en он не в BGA. Спаять смогу. А посему повторю свой вопрос - каковы минусы? Не потеряю ли в производительности?

  3. 1. Что хочется: порулить дисплеем 10.1 дюйм, 1920х1200 точек. Вот таким https://ru.aliexpress.com/item/IPS-B101UAN0...iceBeautifyAB=0

     

    Дисплей : B101UAN02.1

    Даташит : https://docviewer.yandex.ru/view/0/?*=Kz%2B...%3D&lang=en

     

    2. Какой камень имеется: STM32F429ZI

    На вот таком модуле https://www.hotmcu.com/system-on-chip-modul...7f0af6md85b9686

     

    У меня есть два варианта

     

    1. Искать RGB to LVDS конвертер. В связи с этим две проблемы-вопроса:

    - на алиэкспрессе полно конвертеров, с одного конца которых TTL, с другого LVDS, но непонятно что именно это за конвертеры - TTL to LVDS или LVDS to TTL. Как понять? Ни один продавец-китаец не смог ответить на этот вопрос.

    - не сказывается ли это отрицательно на производительности?

     

    2. Если DSI можно напрямую подключать к LVDS, то может проще мне на указанном выше модуле заменить 429 чип на 469? Собственно вопрос - DSI и LVDS прямо совместимы?

     

    Маленькое пояснение - видео крутить не собираюсь, нужна не очень сложная, но очень четкая картинка, так что быстродействие не является ключевым.

     

    Какой вариант более рациональный и правильный?

  4. Коллеги, есть задача - объект несложной формы - цилиндрический с полушаровидным носом и различными выстоящими элементами. Сравнение с подводной лодкой было бы удачным.

    Необходимо рассчитать, с какой силой нужно тащить этот объект в воде, дабы он двигался определенной скоростью.

    Можно ли это сделать в Solidworks?

  5. Все пока хорошо, но вот почему то запускается двигатель с дерганьем. Непредсказуемым по времени. Поможешь рукой - крутится.

     

    Посмотрела на управляющие импульсы на фазах - они какие-то неодинаковые по ширине.

    Что-то мне подсказывает, что сигнал обратной ЭДС кривой.

    Посмотрите на эту ЭКГ - что с ней не так?

    post-64708-1528659045_thumb.jpg

  6. Поигралась с настройками - увеличила таймаут, по которому обычный режим переключается в режим с контролем ЭДС. Программа не дожидалась и сбрасывала сччетчик в ноль. И доходило до этого, в том числе, из-за отсутсвия ШИМ и инерции мотора. Сейчас заработало. Дергается, но через некоторое время раскручивается. Попробую реализовать программный ШИМ.

     

    Мда... с ШИМом он почему-то вообще не стартует, только дергается.

    Будем искать...

     

    значит теперь смещайте угол пока не закрутится.

    Это что-то вроде угла опережения зажигания?

     

    Где-то здесь задержку ставить надо?

    switch (commutation_step)
        {
            case (0):
                if(!SENSE_UVW || startup) 
                {
                    UH_ON; // На фазе U - ШИМ
                    WH_OFF; // Фаза W отключена
                    SENSE_W; // Активируем вход фазы W
                    commutation_step = 1; // Следующий шаг
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
            case (1):
                if(SENSE_UVW || startup)
                {
                    VL_OFF; // На фазе V - лог. 0
                    WL_ON;  // На Фазе W - лог. 1
                    SENSE_V; // Активируем вход фазы V
                    commutation_step = 2;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
            case (2):
                if(!SENSE_UVW || startup)
                {
                    UH_OFF; // Фаза U отключена
                    VH_ON;  // На фазе V - ШИМ     
                    SENSE_U; // Активируем вход фазы U
                    commutation_step = 3;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
         
            case (3):
                if(SENSE_UVW || startup)
                {
                    UL_ON;  // На фазе U - лог. 1
                    WL_OFF; // На Фаза W - лог. 0
                    SENSE_W; // Активируем вход фазы W
                    commutation_step = 4;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
             case (4):
                if(!SENSE_UVW || startup)
                {
                    VH_OFF;  // Фаза V отключена
                    WH_ON;   // На фазе W - ШИМ
                    SENSE_V; // Активируем вход фазы V
                    commutation_step = 5;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
            case (5):
                if(SENSE_UVW || startup)
                {
                    UL_OFF; // На фазе U - лог. 0
                    VL_ON;  // На Фазе V - лог. 1
                    SENSE_U; // Активируем вход фазы U
                    commutation_step = 0;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
        }

  7. Что-то не получается у меня с ЭДС. Господа, взгляните на схему цепочки детектирования в статье в первом сообщении, на ту же схему, но выложенную мной в PDF и скажите, будет ли отличаться алгоритм работы с компаратором?

    У меня ЭДС детектируется, прерывание срабатывает где надо (хотя впрочем, посмотрите на осциллограмму и оцените).

    Но двигатель пищит и не стартует.

     

    ОСЦИЛЛОГРАММА - красный график - вход компаратора, синий - строка PORTD.3=~PORTD.3 в самом начале обработчика прерывания от компаратора, чтобы понять, в какой момент времени он срабатывает.

     

     

    Код (мне его пришлось переделать) привожу

     

    #include <mega8.h>
    #include <delay.h>
    
    // Фаза U(Верхнее плечо)
    #define UH_ON   PORTD.4=1;
    #define UH_OFF  PORTD.4=0;
    
    // Фаза U(Нижнее плечо)
    #define UL_ON   PORTD.5=1;
    #define UL_OFF  PORTD.5=0;
    
    // Фаза V(Верхнее плечо)
    #define VH_ON   PORTC.5=1;
    #define VH_OFF  PORTC.5=0;
    
    // Фаза V(Нижнее плечо)
    #define VL_ON   PORTC.4=1;
    #define VL_OFF  PORTC.4=0;
    
    // Фаза W(Верхнее плечо)
    #define WH_ON   PORTC.3=1;
    #define WH_OFF  PORTC.3=0;
    
    // Фаза W(Нижнее плечо)
    #define WL_ON   PORTB.0=1;
    #define WL_OFF  PORTB.0=0;
    
    #define PHASE_ALL_OFF   UH_OFF;UL_OFF;VH_OFF;VL_OFF;WH_OFF;WL_OFF;
    
    #define SENSE_U     ADMUX = 6; // Вход обратной ЭДС фазы U 
    #define SENSE_V     ADMUX = 7; // Вход обратной ЭДС фазы V
    #define SENSE_W     ADMUX = 0; // Вход обратной ЭДС фазы W
    
    #define SENSE_UVW   (ACSR&(1 << ACO)) // Выход компаратора
    
    #define START_PWM   10 // Минимальный ШИМ при запуске
    #define WORK_PWM   100 // Рабочий уровень ШИМ
    
    unsigned char start_stop = 0;
    unsigned char current_phase = 0;
    volatile unsigned char motor_pwm = WORK_PWM;
    volatile unsigned char commutation_step = 0;
    volatile unsigned char rotor_run = 0; // Счетчик импульсов обратной ЭДС
    
    // Крутим по часовой стрелке
    void commutation(unsigned char startup)
    {
        switch (commutation_step)
        {
            case (0):
                if(!SENSE_UVW || startup) 
                {
                    UH_ON; // На фазе U - ШИМ
                    WH_OFF; // Фаза W отключена
                    SENSE_W; // Активируем вход фазы W
                    commutation_step = 1; // Следующий шаг
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
            case (1):
                if(SENSE_UVW || startup)
                {
                    VL_OFF; // На фазе V - лог. 0
                    WL_ON;  // На Фазе W - лог. 1
                    SENSE_V; // Активируем вход фазы V
                    commutation_step = 2;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
            case (2):
                if(!SENSE_UVW || startup)
                {
                    UH_OFF; // Фаза U отключена
                    VH_ON;  // На фазе V - ШИМ     
                    SENSE_U; // Активируем вход фазы U
                    commutation_step = 3;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
         
            case (3):
                if(SENSE_UVW || startup)
                {
                    UL_ON;  // На фазе U - лог. 1
                    WL_OFF; // На Фаза W - лог. 0
                    SENSE_W; // Активируем вход фазы W
                    commutation_step = 4;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
             case (4):
                if(!SENSE_UVW || startup)
                {
                    VH_OFF;  // Фаза V отключена
                    WH_ON;   // На фазе W - ШИМ
                    SENSE_V; // Активируем вход фазы V
                    commutation_step = 5;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
    
            case (5):
                if(SENSE_UVW || startup)
                {
                    UL_OFF; // На фазе U - лог. 0
                    VL_ON;  // На Фазе V - лог. 1
                    SENSE_U; // Активируем вход фазы U
                    commutation_step = 0;
                    TCNT0 = 0; // Обнуляем счетчик T0
                }
                break;
        }
    }
    // Обработчик прерывания по компаратору. Детектор обратной ЭДС
    
    
    // Analog Comparator interrupt service routine
    interrupt [ANA_COMP] void ana_comp_isr(void)
    {
    PORTD.3=~PORTD.3;
    rotor_run++; // инкрементируем импульсы
    if(rotor_run > 200) rotor_run = 200;
    if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, крутим наполную 
    {
    
    commutation(0);
    
    }
    }
    
    // Обработчик прерывания по переполнению Т0. Работа двигателя без сигналов обратной ЭДС
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {   
    
    commutation(1); // Если сработало прерывание, есть пропуски импульсов обратной ЭДС
    rotor_run = 0;  // Сбрасываем счетчик импульсов
    
    }
    
    // Timer2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
             
    /*
    // // ЭТО ПОПЫТКА СДЕЛАТЬ ПРОГРАМНМНЫЙ ШИМ, РАЗБЕРУСЬ ПОТОМ
       if (commutation_step==0) UH_ON;
       if (commutation_step==2) VH_ON;
       if (commutation_step==4) WH_ON;
      */ 
       
           
    }
    
    // Timer2 output compare interrupt service routine
    interrupt [TIM2_COMP] void timer2_comp_isr(void)
    {
             
    // ЭТО ПОПЫТКА СДЕЛАТЬ ПРОГРАМНМНЫЙ ШИМ, РАЗБЕРУСЬ ПОТОМ
        /*
       if (commutation_step==0) UH_OFF;
       if (commutation_step==2) VH_OFF;
       if (commutation_step==4) WH_OFF;
       */  
    }
    
    
    
    void main(void)
    {
    
    
    // Порты ввода/вывода
    
    DDRD.4=1; // UH
    DDRD.5=1; // UL
    DDRC.5=1; // VH
    DDRC.4=1; // VL
    DDRC.3=1; // WH
    DDRB.0=1; // WL
    
    DDRD.3=1;
    PORTD.3=0;
    
    /*
    while(1)
    {
    
    PORTD.4=1; // UH
    PORTD.5=0; // UL
    PORTC.5=1; // VH
    PORTC.4=0; // VL
    PORTC.3=1; // WH
    PORTB.0=0; // WL
    delay_ms(10);
    
    PORTD.4=0; // UH
    PORTD.5=0; // UL
    PORTC.5=0; // VH
    PORTC.4=0; // VL
    PORTC.3=0; // WH
    PORTB.0=0; // WL
    delay_ms(10);
      
    }
      */
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 15,625 kHz
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x02;
    OCR2=20;
    
    // T0 - для старта и работы двигателя без сигналов обратной ЭДС
    TCCR0=0x05;
    
    TIMSK |= (1 << TOIE0)| (1 << TOIE2)|(1 << OCIE2); // Разрешаем прерывание по переполнению T0
    
                                                                                          
    
    PHASE_ALL_OFF; // Выключаем все фазы 
         
    // Аналаговый компаратор
    ADCSRA &= ~(1 << ADEN); // Выключаем АЦП
    SFIOR |= (1 << ACME); // Отрицательный вход компаратора подключаем к выходу мультиплексора АЦП
    ACSR |= (1 << ACIE); // Разрешаем прерывания от компаратора
    
    #asm("sei") // Глобально разрешаем прерывания
    
    start_stop=1;
    
    if(start_stop)
    {
    
    ACSR |= (1 << ACIE); // Разрешаем прерывание от компаратора
    TIMSK |= (1 << TOIE0)| (1 << TOIE2)|(1 << OCIE2); // Разрешаем прерывание по переполнению T0
      
      
      if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, можем менять ШИМ
      {
       // OCR2=0x0F;
      }
    
    }
    else
    {
    
    PHASE_ALL_OFF; // Все фазы выключены
    ACSR &= ~(1 << ACIE); // Запрещаем прерывание от компаратора
    TIMSK &= ~(1 << TOIE0); // Запрещаем прерывание по переполнению T0
    
    }
    
    }

    post-64708-1528638982_thumb.jpg

  8. д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп.

    Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат

  9. Смущает в коде, что по ссылке в первом сообщении, отсутствие deadtime. Или я слепая и не вижу?

     

    Зато гироскутеры наверное все на них бегают :rolleyes:

    Гироскутеры на них не просто бегают, они на них равновесие держат. Именно этим определяется необходимость в датчиках Холла.

  10. Конечно можете.

    Более того, мотор будет крутится даже если вовсе не будете следить за обратной ЭДС.

    Все упирается в назначение мотора и характеристики регулирования.

    Если не планируется какое-то точное регулирование, то всеми ключами можно управлять программно без аппаратного ШИМ-а.

    Мотор изначально предназначен для авиамодели. Но мной он будет установлен в детский автомобильчик (через редуктор), взамен старого и дохлого.

  11. Хм... странно все таки. Почему разработчик моего контроллера не использовал аппаратные возможности шим....

    Скажите я ведь могу, используюя для управления верхними ключами навязанные мне пины, завести таймер и с его помощью тупо менять состояния пинов обычным "ногодрыгом" и возвращать их обратно? Это будет адекватная замена аппаратным возможностям?

  12. В статье применялся очень маломощный двигатель. В таких случаях алгоритм на компараторах еще кое-как работает, особенно если отключен ШИМ.

    Но в случае более мощного мотора вариант с компараторами не пройдет.

     

    Статья статьей, но я привела свою схему, на которой именно компаратор, а мотор к ней можно подключать до 20 ампер. И схема работает.

    Конденсаторы фильтров на плате есть, я их просто на схеме не привела. За статью спасибо, очень интересно.

     

    V_N, вам тоже спасибо. СЛона то я и не заметила)))

     

    Следующий вопрос - ШИМ. В статье, которую я привела, все просто и логично - управление верхними ключами осуществляется через ШИМ выходы контроллера. При проектировании же моей платы китайцы наверное следовали Конфуцию или еще кому-то... Но у меня OC1A, OC1B и OC2 вообще не заняты. Управление верхними ключами повешено на PC3 PC5 PD4.

     

    Есть статейка от АТМЕL, где есть интересное решение - один ШИМ выход и логические элементы. Но у меня такое решение не применено.

    Неужели у меня был программный ШИМ?

     

    Как на практике еще организовывают ШИМ управление? Может есть какой-то способ шимировать все ключи или ток регулировать?

    У меня на плате есть еще несколько элементов, предназначение которых я понять не могу пока, в виду того, что плата 4-х слойная.

     

    Кстати - на плате почему то целых 3 преобразователя напряжения 7805, которые соединены параллельно, только выход их развязаны маломощными резисторами 22 ом. И это при том, что из 5-ти вольтовых потребителей только Атмега... Никого ни на какие мысли не наводит?

  13. Коллеги, есть трупик модельного регулятора скорости бесколлекторного двигателя. Китайский. Плата 4-х слойная, прозвонила ее с трудом. На плате ATmega8.

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

    В общем, частичный реверсинг.

    В принципе схема очень похожа на вот это http://radioparty.ru/prog-avr/program-c/61...bldc-sensorless

    С одним лишь отличием - посмотрите как реализована схема детекции обратной ЭДС там, и посмотрите в выложенный мной PDF - это в моем контроллере, для которого хочу писать прошивку.

     

    В статье, которую я привела выше, замечательно расписано, как с помощью компаратора детектируется обратная ЭДС. Но совершенно непонятно, какую функцию выполняют входы ADC0 ADC1 ADC2. Ни в статье это не описано, ни в приведенном коде на С обращения к этим пинам нет.

     

    Посмотрите на мою схему, в прилагающемся PDF. Там немного по другому. Но тоже идут 3 линии к ADC0 ADC6 ADC7.

    Для чего же они нужны, какую роль они играют в управлении двигателем?

     

    Ну и, учитывая то, что в моей схеме цепи детекции несколько иные, будет ли отличаться алгоритм обработки поступющих с них сигналов на компаратор и на ADC ?

    Sheet1.pdf

  14. Реально на нагрузку 12,4 Ом? Вы это реально проверяли?

     

    Нет, нахолостую.

    Ну да ладно, новый аккумулятор уже куплен.

     

    Приглашаю в новую соседнюю тему (сейчас открою)

  15. Что за зарядник? Может просто поднять напряжение хх зарядника? В конце заряда свинцовый аккумулятор должен иметь около 7 В.

    Обычный зарядник из радиоширпотребмага.

    Написано 6 вольт, 0.6А, но реально выдает 7.45 вольт

    Я бы подождала, пока аккумулятор зарядится до 7 вольт, но я контролировала ток заряда. Он быстро падает до 40мА. Да и, кстати - однажды всю ночь заряжался, но бестолку, заряда хватило на несколько минут.

     

    При исследовании проводки электромобиля, к которому был подключен данный аккумулятор, не было обнаружено никакой схемы защиты от разряда. Ребенок, естественно, катался до полного опустошения бака. Так вот через десяток зарядок аккумулятор и сдох.

  16. А какой коэффициент заполнения получаете?

     

    Навскидку около 50-ти. При делителе 13.3/130 кОм. При этом напряжение на выходе 9 вольт.

    Уменьшаешь верхний резистор менее 80 кОм, пульсация на SW какая-то безобразная и бесформенная получается.

  17. Эта схема способна выдать 60 вольт? У меня не получается почему-то сделать это изменением параметров резисторов делителя. Это мультисим неидеален или еще что?

  18. Попытка просимулировать приведенную последнюю схем в Multisim приводит к ошибке.

    Что я делаю не так?

     

    Мультисим 14 выполнил поиск ошибки и вроде все заработало. Но уж очень медленно как-то идет моделирование - микросекунды тянутся очень долго. Как настроить чтобы было в реальном времении

    TKMP.rar

  19. Есть ОУ с двуполярным питанием 50 вольт.

    У кого-нибудь был опыт создания источника питания для таких?

    Существуют ли готовые микросхемные решения?

    Или же нужно будет ставить два и объединять их, примерно как здесь http://rcl-radio.ru/?p=35570

     

    Входное напряжение даже не знаю пока, пусть будет 5 вольт. Выходной ток - навскидку не более 50 мА.

     

     

    Вот кстати виновник торжества (который кормить нужно)

    ADA4700_1.pdf

  20. Свинцово-кислотный аккумулятор 6 вольт 4.5 ампер-часов . Вот такой https://www.dns-shop.ru/product/850524e3fef...m-6045-6v-45ah/

     

    Подключаю зарядное устройство сначала зарядный ток чуть более 200 мА , затем в течение 5-ти минут падает до 45 мА. Заряжается до 6 с копейками вольт.

    Разряжаем: подключаю нагрузку 10 Ом, напряжение просаживается до 4 вольт, но планируемый ток в 0.6 А выдает. Через 5 минут напряжение на аккумуляторе даже без нагрузки 4 с копейками вольт.

     

    Аккумулятор на выброс?

     

    P.S. - Зарядник способен выдать 0.6 А, но зарядка идет с током 0.2 А. Так и должно быть? Я так понимаю, даже если внутри зарядного нет ограничения тока и накороткую он способен дать 0.6 А, то аккумуятор за счет своего внутреннего сопротивления как-то этот ток ограничит?

    В общем если зарядное выдает 0.6 А без регулировки, и если подключить к нему аккумулятор 6 вольт 4.5 ампер-часов, какой зарядный ток будет нормльным при здоровом аккумляторе?

×
×
  • Создать...