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

adnega

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    3

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


  1. Применительно к резисторам.

    1. Как влияет тип резисторов (выводные, поверхностного монтажа) на степень подавления?

    2. Как влияет значение сопротивления резисторов на степень подавления?

    3. Каков механизм "работы" проходной емкости резистора?

     

    По-моему:

    1. Тип резистора влияет на вид схемы замещения. Т.е. добавляются паразитные элементы: индуктивности, емкости, нелинейности и т.п. Для разных типов резисторов (конденсаторов, печатных проводников) - разные схемы замещения с разными значениями R, L и C. Плюс ко всему диапазоны входных величин разные, плюс всякого рода стабильности и т.п.

    2. В 99% случаев резистор нужен для "работы закона Ома". Видимо, ток нужно ограничивать - поэтому и номинал больше.

    3. см. п. 1

     

    Вообще, у радиофизиков принято всем что "рояля не играет" пренебрегать. Так что в конкретных условиях все становится намного проще, чем может быть в строгой теории.

  2. Я бы собрал источник тока 12мА (lm317 и резитор 100 Ом). Датчик и источник тока последовательно с блоком питания 24В (не меньше). Измеряем падение напряжения в дежурном режиме и при пожаре.

  3. Предположу, что импульсы идут двухполярные 24 Вольта.

    Положительный импульс нужен для передачи энергии на питание и для контроля состояния "ПОЖАР". Отрицательными импульсами контролируется оконечный элемент цепи, иначе говоря обрыв шлейфа (как правило, диод и резистор). При пожаре положительные импульсы шунтируются (как правило тиристор и диод). КЗ от ПОЖАРа отличается тем, что отрицательная полуволна в случае КЗ потребляет значительный ток.

  4. Время выборки АЦП на канале термодатчика правильно установлено?

     

    Да.

     

    Причем делал два варианта:

    1. Запускал преобразование битом ADON (вручную) с фиксированной задержкой (много больше 17 мкс).

    При этом наблюдались периодически три значения с АЦП! Т.е. три пика в ПРВ (плотность распределения вероятности) значений. Аналогичный результат (три пика) и с опорой (!). Сигнал с реального входа - один пик. Если задержку сделать рандомную, то пики размываютя, но все равно три максимума.

     

    2. По событию T2C2 через DMA (450 мкс). Наблюдается один пик. Но зависит от температуры и очень сильно от частоты ядра. От периода дискретизации практически не зависит. Опора тоже "плавает". Значания "по даташиту" получаются при FPLL = 24МГц.

     

    Калибровку включал - принципиально не помогает.

     

    Впрочем, к АЦП есть еще один маленький вопросик. Что за "пила" с частотой дискретизации (44100Гц) наблюдается на входе АЦП болтающемся в воздухе?

     

    Нет. Я конечно понимаю, что большое входное сопротивление, перезарядка УВХ и емкости пина; допускаю, что на входе АЦП нужно ставить полосовой фильтр (или ФНЧ) для "работы теоремы Котельникова" без наложения спектров, но:

    1. А как же аналоговые входы с большим входным сопротивлением без "огорода"?

    2. Как один знакомый возмущается: "зачем ставить операционник там, где можно использовать один транзистор с ОЭ"?

     

    Теперь по теме:

     

    В целом, STM32F мне очень нравятся.

    LPC17xx тоже пробовал, но мало. Ближайшее время есть необходимость поделать кое-что на LPC1114 (светодиодом на нем уже моргал - понравилось, особенно цена), но в новые разработки закладываю STM32F10x.

     

    У STM, на мой взгляд, очень удачно Ethernet в 64 ногом корпусе, правда при этом многим приходится жертвовать...

    У LPC с ремапом пинов вроде лучше, у STM - бардак полный) - даже большая часть эраты этому посвящена.

    У LPC1114 сначало смутило, что под ремап пина уделяется отдельный регистр (причем хаос полный) - потом ощутил в чем прелесть)...

     

  5. Вообще-то у подавляющего большинства МК на время измерения температуры кристалла встроенным термодатчиком, рекомендуется переводить ядро в режим энергосбережения ("спячки"). В противном случае получается цена на дрова в соседней области, слабо коррелирующая с реальной температурой кристалла.

     

    Хм... тем не менее если держать пальцем корпус десятые доли градуса начинают бежать вверх (корпус холоднее 36C). Показание температуры держатся крайне стабильно (в пределах 4-х единиц).

     

    При скачкообразном изменении частоты ядра - температура тоже меняется скачкообразно.

    При изменении частоты от 12МГц до 72МГЦ температура меняется с +70С на минус 10С.

    Не верю, что при повышении частоты ядра "встроенный кондиционер"(?) сможет охладить кристалл на 80С за десятые доли секунды.

  6. Это в любом кристалле так.

    Обычно в качестве встроенного датчика стоит туподиод.

    Да и что может намерить встроенный датчик, если его кристалл греет?

    На мой взгляд, основное его предназначение - определить три области: слишком холодно-нормально-слишком горячо.

     

    Датчик и должен показывать температуру кристалла.

     

    У STM32F10x показания зависят... от частоты ядра, периодичности выборки, последовательности каналов.

    Показания, от -10 до +70 (от 72МГц до 12МГц)! - значение получем в единицах, переводим в милливольты, затем в градусы.

     

    Слишком-холодно и слишком-горячо не получается. Можно лишь сказать "за последние 10 секунд температура повысилась на 12 градусов".

  7. По документации- надо ОЧЕНЬ внимательно читать, Yо, действительно, все описано.

    Кристалл хороший, но, как уже писали- надо перед проектированием устройства внимательно все изучить, как что работает.

     

    +1

    Особенно понравилось "многа букаф" про встроенный температурный датчик...

    Из которых самыми нужными были те, что в начале: мол, если хотите абсольтную температуру, то пользуйтесь внешними датчиками температуры; если достаточно увидеть динамику (теплее-холоднее) - то можно пользоваться встроенным )

  8. ..Удивился.

    Периферия, как раз – общее место.

    Практически стандартная. У PIC-ов чуть получше, чем у AVR.

    Интересовать может только конкретный список, у конкретной модели.

    Ну, так, при выборе МК это и учитывается, а дальше-то, что на неё глядеть, на периферию?

     

    Периферия может отличатся сильно! Например "практически стандартный" таймер у AVR и LPC-ARM:

    - предделитель AVR есть степень двойки, у LPC - произвольный;

    - разрядность у AVR 8 бит, у LPC 32 бита, у STM32F 16 бит;

    - реализация ШИМ на AVR и на LPC(STM) "две разницы";

    - на таймере STM делал захват сигнала: по фронту импульса счетчик обнулялся, по спаду происходил захват длительности импульса, по фронту - захват периода с последующем обнулением и прерыванием. В обработчике получал совершенно железные два числа: длительность и период. По сути анти-ШИМ, для получения сигнала от ИК-приемника. На AVR так не сделать!

     

    Про DMA, ADC, DAC, Ethernet, USB я молчу...

     

    Конечно если от таймера нужно лишь периодически возникающее прерывание или установка флажка, то... различий как таковых нет.

     

    ..А вот система команд..

    При смене семейства, сравните: 30 (примерно) против 130 (примерно). Это пустяк, разве (PIC и AVR)?

     

    Если писать на C, то код практически "стандартный". Написал один раз библиотечку, а потом везде ее пользуешь. "Я так сто раз делал!" (с).

     

    ..Отладочные платы никогда не использовал..

    Вероятно, они, для каких-то кружков пионеров, что-ли.. :rolleyes:

    Реально, в них нужды нет.

     

    Т.е. Вы заливаете код в контроллер и он сразу же работает! Если так, то... возьмите меня в ученики.

     

  9. Господа, я бы добавить хотел!

    Дело в том, что контроллер по моему разумению - это не "тупая" молотилка команд, это еще и периферия!

    "Правильная" программа для микроконтроллера (мнение субъективно) выглядит примерно так:

     

    int main(void)

    {

    init_all();

    while(1);

    }

     

    или так:

     

    jmp RESET

     

    RESET:

    call InitAll

     

    MAINLOOP:

    rjmp MAINLOOP

     

    При изучении конкретного контроллера бОльшую часть времени лучше тратить на изучение его периферии, а не системы команд. На C результат достигается быстрее; не лишено смысла понятие "переносимость" (замечательнейшее свойство!).

     

    Ассемблер знать... желательно. Помню, случай когда, у программистов одного крупного нефтеперерабатывающего предприятия не "взлетела" наша DLLка связи - велетает странная ошибка, чуваки в панике: "ничего не работает! я вызываю функцию из библиотеки, а она приводит ошибке"... Десять секунд в отладчике под изумленными взглядами публики (мол, а что это такое? ассемблер?!) показали, что нарушены соглашения вызовов библиотечных функций. Поправили импорт - все заработало. Итого: можно было или отладчиком самостоятельно понять причину (подразумевается знание asm), или почитать доку на DLL (подразумевается знание руских букв и слов).

     

    Я бы рекомендовал C для начала (про asm и машинный код достаточно просто знать, что такое тоже бывает).

    И еще один совет: обязательно иметь при изучении железку с "кнопкой и светодиодом" - мощный мотиватор.

    И еще одно наблидение: у новичка и у дядьки, разрабатывыющего устройства за деньги взгляды на предметную область сильно отличаются.

  10. здесь не полный код. Нет настроек каких-то,которые идут до таймера.

     

    Здесь достаточный код для генерации ШИМ сигнала на ноге PB7 указанного МК)

     

    А Вы его уже запускали?

     

    Достаточно:

    1. Включить тактовые частоты таймера, порта, альтернативных функций;

    2. Настроить порт на альтернативную функцию;

    3. Настроить таймер на генерацию ШИМ;

    4. Зациклится на месте.

     

    0. Не использовать библиотеку от ST (опционально)

  11. #include    "stm32f10x_map.h"
    
    #define    RCC_APB1ENR_TIM4EN        ((u32)(2))
    #define    RCC_APB2ENR_IOPAEN        ((u32)(2))
    #define    RCC_APB2ENR_IOPBEN        ((u32)(3))
    #define    RCC_APB2ENR_AFIOEN        ((u32)(0))
    #define    RCC_CFGR_ADCPRE            ((u32)(14))
    #define    RCC_CFGR_PPRE1            ((u32)(8))
    #define    AF_PP_50                    ((u32)(11))
    #define    CFG_PIN7                    ((u32)(28))
    #define    TIM_CCER_CC1E            ((u32)(0))
    #define    TIM_CCER_CC2E            ((u32)(4))
    #define    OC_MODE_PWM1            ((u32)(6))
    #define    TIM_CCMR1_OC1M            ((u32)(4))
    #define    TIM_CCMR1_OC2M            ((u32)(12))
    #define    TIM_CR1_CEN                ((u32)(0))
    #define    TIM_CR1_ARPE                ((u32)(7))
    
    int    main()
    {
        RCC->AHBENR=0;
        RCC->APB1ENR=
            (1<<RCC_APB1ENR_TIM4EN);
        RCC->APB2ENR=
            (1<<RCC_APB2ENR_IOPAEN)
            |(1<<RCC_APB2ENR_IOPBEN)
            |(1<<RCC_APB2ENR_AFIOEN);
        RCC->CFGR=
            (3<<RCC_CFGR_ADCPRE)
            |(4<<RCC_CFGR_PPRE1);
    
        GPIOB->CRL=(AF_PP_50<<CFG_PIN7);    // T4_C2
    
    
        TIM4->ARR=(12000000/75000)-1;        // запись периода
        TIM4->PSC=0;                        // запись базы
        TIM4->CCR1=10;                    // длительность импульса DIM0
        TIM4->CCR2=20;                    // длительность импульса DIM1
        TIM4->CCER=
            (1<<TIM_CCER_CC1E)
            |(1<<TIM_CCER_CC2E);            // разрешить первый и второй выходы сравнения
        TIM4->CCMR1=
            (OC_MODE_PWM1<<TIM_CCMR1_OC1M)    // режим ШИМ для первого канала
            |(OC_MODE_PWM1<<TIM_CCMR1_OC2M); // режим ШИМ для второго канала
        TIM4->CNT=0;
        TIM4->CR2=0;
        TIM4->CR1=
            (1<<TIM_CR1_CEN)                 // разрешить счет
            |(1<<TIM_CR1_ARPE);            // разрешить автоматическую перезагрузку
    
        while(1);
    }

     

    В Keil даже симулируется...

     

    АХТУНГ!

    А есть ли четвертый таймер у 103T8?

  12. Ага.

    Только стандарт у каждого свой :)

    Наиболее стандартно, что 5 контакт - земля

    Часто бывает, что 1 и 2 - это А и В

     

    А MOXA, например, 3 и 4 любит под RS-485 задействовать:

    N - 4-wire - 2-wire

    1 - TxD+(B) - x

    2 - TxD-(A) - x

    3 - RxD+(B) - Data+(B)

    4 - RxD-(A) - Data-(A)

    5 - Gnd - Gnd

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