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

AntiDriver

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

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

  • Посещение

Репутация

0 Обычный

Информация о AntiDriver

  • Звание
    Частый гость
    Частый гость
  1. Plain, согласен, вариант неплохо. При возможности испытаю на практике и сообщу о результатах. perfect, в особенностях использования литиевых (и подобных) аккумуляторах не силён, просьба пояснить в чём минус того, что "sepic гоняет ток из батарейки и обратно"? варп, возможно, но решение уже принято и вопроса о его целесообразности не стояло. Plain, я нигде не указывал о том, что проблемой является КПД. Вопрос стоял о правильности включения конкретной микросхемы.
  2. wim, насчет LM2731, тоже неплохой вариант и даже есть в наличии в ближайших магазинах. Так что можно будет испытать на макете в ближайшее время. варп, да, Вы правы: верхний предел 8.4 В, в случае использования литий-ионных аккумуляторов. Однако, можно найти информацию, что максимальное напряжение может быть до 4,35 В. Поэтому два могут дать до 8,7 В. Это значение можно округлить до 9 В. Нижний предел также 6.4 В (возможно, и несколько ниже), однако, я говорил об импульсном характере нагрузочного тока, который вполне может кратковременно просадить напряжение до значения в 3 В. Частота импульсов тока нагрузки около 30 кГц, частота работы импульсного преобразователя более 1 МГц (более чем в 30 раз выше), поэтому такие кратковременные моменты предполагается компенсировать импульсным преобразователем. Если бы Вы были правы и напряжение не падало ниже 6.4 В, то не было бы причин сбрасываться микроконтроллеру, особенно учитывая, что он подключен через линейный стабилизатор, два керамических конденсатора в 4.7 мкФ и 1 мкФ по выходу стабилизатора и входу микроконтроллера соответственно и ещё 100 мкФ танталовый. Если возникают сомнения с тем, что импульсный преобразователь справится с такими падениями напряжений, то вот результаты моделирования LT1961 в программе LTSpice. 1961_sepic.rar
  3. Добрый день! Возникла необходимость спроектировать маломощный источник питания для микроконтроллера (pic18f) на 5 В с некоторой переферией (потребление 50-100 мА, может быть 300 мА в пике) от двух литиевых аккумуляторов, суммарное напряжение на которых может меняться от 9 до 4 Вольт. На аккумуляторе "висит" нагрузка, потребляющая один-два десятка ампер (импульсно), контроллер управляет ей. Изначально питание осуществлялось с помощью линейного преобразователя (lm317), однако, он не справлялся со скачками напряжения и мог сбрасывать микроконтроллер в момент коммутации нагрузки из-за падения напряжения. Нагрузка коммутируется ШИМом порядка 30 кГц с мощным транзистором в качестве ключа. Существует также требование к минимальным габаритам, что не позволяет использовать конденсаторы большой ёмкости. В качестве решения проблемы решил выбрать импульсный источник питания взамен линейного. Так как входное напряжение может быть как ниже, так и выше выходного, то следовало выбрать топологию sepic или buck-boost. Кроме того, требуется соблюсти требование минимальных размеров и низкой стоимости. Выбор пал на микросхему mic2290. Она имеет корпус 2х2 мм и стоит 0.5-0.7$ (в отличие от, например, lt1961, которая стоит порядка 3$). В документации сказано, что микросхема способна работать по архитектуре sepic. На этом информация об этом заканчивается и приводится подробная информация о boost топологии. Структурная схема приведена на рисунке ниже, правее принципиальная схема включения данной микросхемы по архитектуре sepic, как я её вижу. Хотелось бы уточнить у тех, кто имел дело с подобными задачами, будет ли работоспособна данная схема и есть ли моменты, которые я не учёл?
  4. hsoft, спасибо за ответ. Размеры платы у меня намного больше, я привел скрины части. Передатчик 1 Вт вряд ли можно уместить на 3 см. У меня там линии вплоть до 10 см имеются, а это уже 1/6, что уже вполне себе длинная линия. Кроме того, возможно, предстоит проектировать более высокочастотные устройства (800 МГц, а может и несколько ГГц), хотелось бы узнать что делать в таких случаях.
  5. Доброе время суток. Проектирую радиопередатчик УКВ диапазона (245-265 МГц) мощностью 1 Вт. Высокочастотные линии у меня выполнены в виде микрополосковых 50-Омных линий. Они содержат неоднородности: посадочные места катушек индуктивности и конденсаторов. Избавиться от неоднородностей не представляется возможным. По рассчетам толщина линии у меня должна быть 0.44 мм. Применяются компоненты типоразмеров 0402, 0603, 0805, 1008, 1206. Даже 0402 имеет ширину 0.5 мм, а так как требуется запас на контактной площадке, то у меня посадочные места для 0402 имеют ширину 0.7 мм. Тут если и можно как-то ужать, то с остальными компонентами такого не получится. Мне известно одно решение данной проблемы: делать линию не полосковой, а копланарной. Такой вариант, возможно, неплохой, если рядом нет других линий передач, что часто неосуществимо. Вижу другое решение проблемы: в местах неоднородностей в виде широких контактных площадок на опорном слое земли убрать металлизацию, тем самым убрать паразитную ёмкость, уменьшающую волновое сопротивление и создающее неоднородность. Думаю, суть будет понятна из прикреплённых изображений. Прошу подсказать как лучше поступить в данной ситуации. Буду благодарен ссылкам на публикации по этой теме.
  6. Доброе время суток. Речь пойдёт о системах автоматического управления (теории автоматического управления). Тема рассматривается на абстрактном теоретическом уровне, уровне передаточных функций, без физической реализации. Имеется система управления, её структурная схема представлена на рисунке ниже. Она предназначена для поддерживания выходного параметра Uвых равным (пропорциональным) управляющему сигналу Uвх и нейтрализации внешних возмущений f, приложенных к объекту. При ступенчатых воздействиях по Uвх и f установившееся значение ошибки ∆ должно быть равно нулю. Система состоит из двух блоков. Передаточная функция правого блока W0 известна и представлена в следующем виде: Передаточную функцию фильтра требуется определить. Далее привожу вывод передаточной функции фильтра. В данном выводе мне непонятно следующее: 1) При ступенчатом воздействии ∆(p) = ... Откуда взялась эта строчка. Я знаю, что реакция на ступенчатое воздействие в операторном виде - это передаточная функция, делённая на p. Непонятны значения букв DR, BG. Аналогично непонятно что такое r0, откуда взялся, почему именно тут и почему он должен равняться нулю. 2) Условие разрешимости системы. Эта фраза мне непонятна полностью. Что это за условие и откуда оно берётся? 3) Определили порядок полиномов в числителе и знаменателе передаточной функции фильтра, установили, что они равны 2. Почему знаменатель передаточной функции выглядит именно так, без свободного члена? Так понимаю, это необходимо, для того, чтобы в передаточной функции был интегратор. Почему? Кроме того, имеется ещё один вопрос. Далее приведён вывод значений коэффициентов передаточной функции фильтра. Для этого были выведены следующие передаточные функции: Знаменатель у них оказался одинаковым, числитель разный. Далее рассматривалось характеристическое уравнение, соответствующее знаменателю. В "предыдущем пункте" как раз были найдены передаточные функции W1 и W2. 4) Знаменатель какой функции был взят за характеристическое уравнение и почему рассматривалась именно эта функция?
  7. HardEgor, исправил. TSerg, спасибо за информацию. Вот только формула X2 = R2 + XC2 = R2 + 1/(w*C2) и следующие неверные. Вычисление сопротивления по ним даст неверный результат. Корректро будет X2 = R2 + XC2 = R2 + 1/(j*w*C2). Всё-таки у конденсатора комплексное сопротивление. И если понадобилось найти общее, необходимо взять модуль от обоих сопротивлений, а не каждого по отдельности, то есть X2 = sqrt(R2^2 + (1/(w*C2))^2). Со своей проблемой уже разобрался самостоятельно. Причина в математической ошибке в выводе формулы (2). Соответственно, полученная мной переходная функция, с учётом данного исправления, делится на тау квадрат и график переходной функции совпадает с результатами моделирования. Проблема решена.
  8. Доброе время суток. Осваиваю аналитические методы расчета электрических цепей. На этот раз решил рассмотрет RC фильтр нижних частот 2ого порядка. Требуется найти АЧХ, ФЧХ, реакцию на единичное воздействие, реакцию на дельта функцию. Для этого я нашёл передаточную функцию (1) Из неё получил АЧХ и ФЧХ, аналитические результаты совпали с моделированием (строил графики функций в Microcap, одновременно проводил моделирование данной схемы). Для реакции на единичный импульс требуется разделить на p передаточную функцию и выполнить обратное преобразование Лапласа. В передаточную функции привёл к следующему виду: (2) В результате: (3) Обратное преобразование даёт следующее: (4) График данной функции построил в программе Matlab, привожу исходный код для построения: R=4e+3; C=1e-9; tau=R*C; t=0:1e-7:1e-4; a = (3-sqrt(5))/(2*tau); b = (3+sqrt(5))/(2*tau); g = 1/(a*b) + (1/(b-a))*((1/b)*exp(-b*t)-(1/a)*exp(-a*t)); plot(t,g),grid; Результат построения: Результат моделирования в программе MicroCap: По временной оси графики вроде бы совпадают, но вот по амплитудной нет. Здесь понятно, что данная схема по окончании переходного процесса установит выходное напряжение равное 1 (когда зарядятся конденсаторы), но результат аналитического вычисления указывает на 1.6*10^-11, равное тау в квадрате, что явно неверно. Просьба помочь разобраться где я допустил ошибку в вычислениях.
  9. Доброе время суток. Возникла задача усилить сигнал гетеродина для многоканального радиоприемника. Сигнал гетеродина с частотами от 200 до 450 МГц, генерируется с помощью DDS AD9912. Имеет дифференциальный выход, который преобразовывается в сигнал общего вида с помощью трансформатора TC1-1TX+, затем поступает на фильтр низких частот, после на разветвитель на 3 канала SYPS-3-12W+. DDS дает максимальную выходную мощность +3 dBm, максимальное ослабление ФНЧ в полосе 1.5 dB, разветвитель даёт ослабление порядка 5.5 dB. В итоге, на выходах разветвителя имеется мощность -4 dBm. Используется смеситель LAVI-2VH+. По документации он требует +23 dBm на вход гетеродина. Однако, были проведены испытания, в которых сигнал гетеродина подавался от внешнего генератора с различными мощностями. Получилось, что при уменьшении уровня входного сигнала гетеродина с +20 dBm до +10 dBm соотношение сигнал/шум падало на величину порядка 1 dB. То есть мне нужно между фильтром и разветвителем вставить усилитель как минимум на 14 dB. Возник вопрос, как выбрать усилитель. Ранее пробовал использовать усилители GALI-2V+ и TQP3M9028. Первый по характеристикам слабоват и использовался только потому, что был в наличии. Дал значительное количество гармоник. Второй имеет +40 dBm Output IP3 и Output P1dB +20.7 dBm, при всём при этом коэффициент усиления 15..16 dB. При входной мощности +1.5 dBm выходная должна быть +16.5 dB максимум, что не приближается к точке компрессии. Однако, спектр сигнала был не на много лучше предшественника. Возникает вопрос, как выбрать усилитель так, чтобы он дал мне требуемую мощность с низкими искажениями? Какой для этого нужен тип усилителя и на какие параметры смотреть? Кроме того, желательно бы, чтобы этот усилитель можно было купить в магазине.
  10. Всем спасибо за ответы. На самом деле, мощность выделяется на сопротивлении открытого канала и учитывается ток, а не напряжение. Это у меня из головы вылетело. Вопрос с нагревом теперь для меня понятен. И действительно, реактивной нагрузки нет, энергию на выходе накапливать некому, потому нижний транзистор холодный.
  11. Доброе время суток. Возникла необходимость в разработке генератора прямоугольных импульсов высокой мощности (амплитуда 100-200 В, выходная мощность 200 Вт). Частота работы регулируемая: от 20 кГц до 100 кГц, скважность 2. Устройство выполнил по следующей схеме: 1. Задающий генератор. Построен на операционном усилителе, напряжение питания 12 В. Работает хорошо. Претензия была к низкому уровню, который составлял порядка 1.4 В, но это было устранено с помощью двух диодов 2. Преобразователь уровней. Используется для питания мощных выходных транзисторов, включенных по полумостовой схеме. Выполнена на микросхеме IRS2184. 3. Полумостовая выходная схема. Использовались два N-канальных МОП транзистора 16N65M5. Испытывал на низкой мощности: напряжение питания 30 В, нагрузка - 8 последовательно соединеных резистора (AH-25, 25 Вт, 1 Ом), то есть 8 Ом. Ниже приведена моя схема: Рекоммендуемая схема из документации: Далее приведены осциллограммы. Синий - затвор нижнего транзистора Q2 относительно земли, желтый - выход (X2), относительно земли: Красный - напряжение на затворе относительно выхода (измерялся как разность напряжений на затвре верхнего транзистора Q1 относительно земли и выхода относительно земли). Проблема в том, что верхний транзистор очень сильно греется, а нижний остается холодным. На данном напряжении и данной нагрузке тепло легко отводится радиатором, однако, ожидается подача напряжения в 300 В и выходная мощность 200 Вт. Поэтому необходимо исключить причину данного некорректного поведения. Хотелось бы услышать, что я сделал не так.
  12. Куплю ПАВ фильтры

    Доброе время суток. Я занимаюсь разработкой радиоприемника и меня интересуют фильтры на поверхностных акустических волнах (ПАВ, SAW). Интересуют фильтры с центральной частотй 60...90 МГц (или близко) и полосой не более 300 кГц (хотя можно и шире). К примеру следующие модели: 1) PX1002 2) PX1004 3) SF1081A 4) B1720 5) TB0259A 6) TB0444A 7) TB0505A 8) TB0630A 9) TB0208 Однако рассмотрю и другие варианты.
  13. АЦП на STM32F103VBT6

    Заметил странную особенность. Оставшиеся нужные мне 4 канала на самом деле работают, но вход оказывается низкоомным, а не высокоомным. Если соединить вход микроконтроллера, идущий на ADC_ch_2 с питанием 3.3 В перемычкой, на выходе вижу 0xFF, как и должно быть. Если соединить этот же вход с питанием через резистор 350 Ом, то на выходе вижу 0xBC (со смещёнными на 4 разрядами), мультиметром замеряю напряжение - 2.42 В. То есть получается что входное сопротивление 970 Ом, что маловато для подтяжки. Попробовал настроить вход как обычный GPIO с подтяжкой к питанию, начал выдавать 0x06 (со смещёнными на 4 разрядами), мультиметр показывает там 80 мВ. Есть подозрение, что сгорел внутренний защитный диод. Может всё же может быть с другим проблема?? С другими каналами такая же ситуация, кроме 0ого и 1ого. На всякий случай текущий код #include "stm32f10x_rcc.h" #include "stm32f10x_adc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "misc.h" #include "delay.h" void SetupUSART(void); void send_to_uart(uint8_t data); void ADC1_2_IRQHandler(void); void Get_Temp(void); uint8_t ind1_B; uint8_t ind2_B; uint8_t ind3_B; uint8_t ind4_B; uint8_t ind5_B; uint8_t ind1_C; uint8_t ind2_C; uint8_t ind3_C; uint8_t ind4_C; uint8_t ind5_C; uint8_t ind1_D; uint8_t ind2_D; uint8_t ind3_D; uint8_t ind4_D; uint8_t ind5_D; uint8_t ind_B; static volatile uint16_t temp=0; int main(void) { SysTick_Config(8000); RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN, ENABLE); // ?? GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_USART2, DISABLE); //RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;// ?? //AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // ?? disable JTAG GPIO_InitTypeDef GPIO_InitStructure; // PORTA // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = /*GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |*/ GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // alternative GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // PORTB // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); // output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); // PORTC // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure); // output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); // PORTD // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); // alternative GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // PWM output pins GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); // PORTE // input RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOE, &GPIO_InitStructure); // output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &GPIO_InitStructure); SetupUSART(); // TIM4 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // Clock to PORTD for TIM4 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); // Clock to TIM4 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); TIM4->CCER |= (TIM_CCER_CC1E|TIM_CCER_CC2E|TIM_CCER_CC3E|TIM_CCER_CC4E); // Enable all PWM outputs TIM4->CCMR1|= (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2); //Forward PWM for ch1 TIM4 TIM4->CCMR1|= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2); //Forward PWM for ch2 TIM4 TIM4->CCMR2|= (TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2); //Forward PWM for ch3 TIM4 TIM4->CCMR2|= (TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2); //Forward PWM for ch4 TIM4 TIM4->CR1 |= TIM_CR1_CEN; TIM4->CCR1 = 65536/5; // Duty cycle PWM1 (Avr voltage = 1.65 V) TIM4->CCR2 = 65536/4; // Duty cycle PWM2 TIM4->CCR3 = 65536/3; // Duty cycle PWM3 TIM4->CCR4 = 65536/2; // Duty cycle PWM4 // ADC RCC_ADCCLKConfig(RCC_PCLK2_Div8); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; ADC_DeInit(ADC1); ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); NVIC_Init(&NVIC_InitStructure); ADC_Cmd(ADC1, ENABLE); //ADC_TempSensorVrefintCmd(ENABLE); ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)) { }; ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)) { }; GPIO_SetBits(GPIOE,GPIO_Pin_1); while(1) { GPIO_SetBits(GPIOC,GPIO_Pin_6); Delay_ms(2000); GPIO_ResetBits(GPIOC,GPIO_Pin_6); Delay_ms(2000); ind1_B = GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6); // ok ind2_B = GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_7); // ok ind3_B = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3); // ok //(?) always 0 ind4_B = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5); // ok ind5_B = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8); // ok ind1_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2); // ok ind2_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3); // ok ind3_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4); // ok ind4_C = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6); // ok ind5_C = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1); // ok ind1_D = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6); // ok ind2_D = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7); // ok ind3_D = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4); // ok ind4_D = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0); // ok ind5_D = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7); // ok ind_B = 5-(ind1_B+ind2_B+ind3_B+ind4_B+ind5_B); switch (ind_B) { case 0: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 1: GPIO_SetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 2: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_SetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 3: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_SetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 4: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_SetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_ResetBits(GPIOE,GPIO_Pin_0); // sel5_B break; case 5: GPIO_ResetBits(GPIOB,GPIO_Pin_6); // sel1_B GPIO_ResetBits(GPIOB,GPIO_Pin_4); // sel2_B GPIO_ResetBits(GPIOB,GPIO_Pin_7); // sel3_B GPIO_ResetBits(GPIOB,GPIO_Pin_9); // sel4_B GPIO_SetBits(GPIOE,GPIO_Pin_0); // sel5_B break; } Get_Temp(); unsigned char a = temp>>4; send_to_uart(a); send_to_uart(0xFF); } } void ADC1_2_IRQHandler(void) { if (ADC_GetITStatus(ADC1, ADC_IT_EOC)) { ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); temp = ADC_GetConversionValue(ADC1); } } void Get_Temp(void) { ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_1Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); } void send_to_uart(uint8_t data) { while(!(USART1->SR & USART_SR_TC)); USART1->DR=data; } void SetupUSART() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE); //RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_DeInit(USART1); USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); }
  14. АЦП на STM32F103VBT6

    Если прерывания включены, но зацикливание, если отключить, то выдаются нули, как и раньше.
  15. Спасибо за ответы. Выбрал следующий путь решения проблемы: Так как мне все эти каналы нужно просуммировать, каждые 5 я суммирую аналоговым сумматором на LM358 (операционник не прецизионный, но большая точность мне не нужна, моделирование дало удовлетворительные результаты, как и готовое устройство), в итоге имею 25 входов и 5 выходов. Именно 5 выходов хочу послать на МК с последующей оцифровкой. Использую для оцифровки STM32F103VBT6, в нем 6 ножек посадил на АЦП (один на переменный резистор как тестовый). Это входы PA0..PA5. Так получается, что сигнал с PA0 и PA1 оцифровывается успешно, а вот с остальных считываются нули. Побробнее тема обсуждается здесь: http://electronix.ru/forum/index.php?showtopic=128992
×
×
  • Создать...