Jump to content

    

zWitCh

Участник
  • Content Count

    29
  • Joined

  • Last visited

Everything posted by zWitCh


  1. коллеги, всем огромное спасибо за подсказки.
  2. Выделил под переменные определенную секцию в памяти: Соответственно переменные кладу в этот сегмент: И наивно полагаю, что в такой последовательности они у меня и лягут в секцию, но нет... Там совершенно не очевидный порядок, я конечно понимаю что никто не мешает мне обращаться к ним по имени, но все же, как сделать их расположение в памяти более предсказуемым, друг за другом?
  3. вот что-то то же к этому прихожу, разведено у меня именно так, делители на матрицах у ножек АЦП, есть конденсатор, правда на 1nF? наверно да, придется увеличить и его номинал и делители...
  4. просто транзистор имеет и меньшее сопротивление, и больший ток, да и габариты у меня не позволяют такие корпуса ставить....
  5. 1. Делаю схему с батарейным питанием, в батарее много ячеек, контроль напряжения на ячейках через резистивные высокоомные делители на АЦП контроллера, все прекрасно работает, НО даже через высокоомные (0.3 - 0.4 МОм) резисторы батарея немного садиться, увеличивать номиналы не хочу, слишком шумная схема получиться, вот подумал, что если ноль делителя завести на ногу процессора, тогда через него ничего не будет утекать пока я ногу не переключу в режим выхода и не уложу на землю. Погрешность будет не большая так как у меня делители высокоомные и доли ома не сыграют сильно, да и все равно я калибрую каналы, что скажите, покритикуйте? Какой может быть подводные камень? 2. Нагрузку к батарее подключаю мощным транзистором, по классической схеме ("было"), она ниже, а тут я подумал, зачем мне вообще второй транзистор? я могу от порта процессора управлять затвором, в режиме порта "открытый коллектор", при этом хоть на порт и попадает напряжение выше чем допускается по документации, но через высокоомный резистор, так что ничего с портом случиться не может, верно?
  6. более менее вроде это, но четкого требование как в госте не использовать пайку как единственный способ крепления кабеля не нашел... может плохо искал, может есть что-то еще?
  7. Заказываю компоненты у европейских поставщиков, приходят узлы, с точки зрения наших ГОСТов тут два грубых нарушения, и изоляция повреждена, оголенные провода, и шлейф крепиться только пайкой и никак более. Но не буду же и им это доказывать ссылаясь на Российский ГОСТ. Думаю что элементарные правила монтажа у них не нарушают законы логики и похожи, но как они называются, куда копать? где искать?
  8. нужен разъем в который можно заделать плоский кабель, желательно конечно 6 разъемов мелких а не один большой, под плоский кабель стандартно используют IDC но они просто гигантские...
  9. Обращаюсь к коллективному разуму, сам ничего не могу придумать, есть компактный прибор в него 6 датчиков заходят с выходящими из них плоскими шлейфами, все их надо подключить к плате, внутренний габарит прибора 10 х 30 х 50 мм и я просто теоретически туда 6 разъемов IDC не засуну, на макете я отрезал плоский кабель и напаял МГТФ но это на макете... в готовое изделие такое решение не потащишь.... Неужели нет ничего компактнее чем то что на картинке для плоского шлейфа? С датчиков (энкодеров выходит вот такой плоский шлейф), что придумать, что бы подключение к плате было компактным я уже не знаю, пайка - это компактно, но сложно собирать и разбирать... Пока самое лучшее что придумал я это сделать плату переходник (см первое фото)
  10. что за диковинные разъемы, как называются, где взять?
  11. спасибо, а то были сомнения что неужели просто названия продублировали номером просто так, и никак этот номер не используют, казалось это странным и вызвало сомнение...
  12. PGN - тут все понятно, это часть CAN ID, для каждого PGN определен набор SPN, я не могу понять что это такое, и для чего используется? ну вот пришло мне сообщение, по его ID я могу понять какое у него PGN? далее из таблицы: Распределение адресов определено в таблицах "SAE J1939 Tables B2" понимаю что из себя представляют поля данных и все, какой смысл имеет номер SPN? его вообще как то можно использовать?
  13. очевидно именно это и произошло по собственному моему недосмотру и забывчивости, зато вот как интересно это проявилось :-)
  14. Занизил частоту ADCCLK поделил на 16, все стало ок... Век живи век учись ;-) SystemInit(); RCC_ADCCLKConfig(RCC_PCLK2_Div8); SystemCoreClockUpdate(); PS да буфер есть, достаточно конденсатор на 10мкФ, в боевой схеме мэрию медленно меняющееся напряжение (напряжение на большом ионисторе, так что эти мои 10vrA там просто что бы компенсировать подводящие провода).
  15. и так, теперь я вместо 72 МГц по дефолту, ставлю принудительно частоту как на Дискавери - 24 МГц и о чудо, помехи уже ничего не сбивают ни по питанию не по сигнальной шине, АЦП магическим образом обретает гладкую характеристику... данные с АЦП при частоте 72 Мгц на ядре, хорошо видно дырки, определенные значения не выдаются АЦПхой не при каких входных воздействиях: Данные с АЦП на частоте 24 Мгц, характеристика гладкая, нет дырок, всем входным воздействиям есть выходной аналог: Что выходит что АЦП не успевал работать, или вернее не успевал заряжать свои внутренние конденсаторы и из-за этого сбоил если надо было сменить сразу много разрядов? Как бороться кроме понижения частоты, может таки оптимизировать разводку?
  16. да вот и я о том же, вобщем пока мы тут общались на вход АЦП гнал я псевдослучайный сигнал (пилу с генератора), затем вывел всё что оцифровывал мне мой АЦП, так вот в его результатах напрочь отсутствует целая груда значений, то есть при любом входе он никогда не выдает определенные цифры на выходе... На данной диаграмме хорошо видно что определенные значения я на выходе у АЦП не получаю никогда, хотя на входе была достаточно гладкая функция без разрывов... да все верно, только вот что это за помеха то такая которая сбивает только когда у меня ацп хочет выдать 1024 - 1049 (и еще пары диапазонов которые всегда одни и теже и мало вообще от чего зависят, просто есть) но никогда не сбивает при других выходных значениях, при этом источник питания и источник сигнала независимы и питание чистое...
  17. ну я уже новые данные поимел я подовая на вход ШУМ имею кучу значений разных с АЦП, так вот среди этих значений отсутствуют определенные значения всегда, в частности там нет цифр в промежутке 1024-1048, что мне кажется просто невероятным что бы в течении получаса сыпался условно случайный сигнал и в нем ниразу не встретилось напряжение эквивалентное значению с 1024 по 1048 но при этом все другие встречаются великое множество раз... источник питания подключен на вход АЦП, отдельный источник питания в качестве сигнала, который я оцифровываю, даже не понимаю как еще это можно объяснить что бы стало понятно, батарейку я если подключу на вход АЦП это же не как не будет значить что мой ацп питается от батарейки, я беру ее напряжение как сигнал... фу... все не по теме... Зачем мне фильтровать сигнал, меня не смущают момехи, напротив меня смущает то что АЦП не при каких входных напряжениях не выдает на выходе скажем "1030" или "1035" и еще пару десятков значений, как это связано с питанием которое мало того что независимое так еще и чистое, ок, допустим помехи, что это за такие синхронные помехи которые сбивают именно АЦП и именно тогда когда он хзочет выдать любую цифру в промежутке от 1024 до 1048 но при этом НИКОГДА не сбивают его в других случаях и в других значениях его передаточная функция гладкая...
  18. вход Vref отсутствует в моем корпусе, на входе Vdda стоит 10u и 0.1u плюс дроссль
  19. источник СИГНАЛА который я подаю на вход ЦАП, и да это я написал, слово источник не всегда источник питания тем более когда оговорено иное...
  20. вот тут была картинка в самом начале: там наглядно показано что выдает (оцифровывает АЦП), на входе напряжение при этом меняется линейно (проверено осциллографом на хорошей развертке)
  21. на дискавери есть источник: L1117 Series но это не суть, моя плата по схемотехники запитана аналогичным с дискавери образом, через линейный преобразователь, Помехи идет в лилии сигнальной, уровень этих помех мал что видно на графике, да и исходно я обнаружил данный феномен на плате где сигнал не так зашумлен, мы сейчас обсуждаем на сколько чистый я сигнал оцифровываю, но я сейчас в рамках проверки АЦП оцифровываю шум, шум этот малой амплитуды (меньше чем питание АЦП), так что не очень понял причем тут помехи по питанию, в начале топика я уже писал, что питание проверил первым, в нем нет выбросов и провалов. Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ! Зашумел помехой я сигнал который оцифровываю специально для эксперимента, что бы поиметь на выходе с АЦП более менее нормальное распределение!
  22. Интересные помехи которые распределены во всем диапазоне равномерно а в определенных точках отсутствуют и сигнал в них идеально гладкий, ну да ладно, пошел дальше в изысканиях, немного переписал код, теперь я просто считаю сколько раз я с выхода АЦП имею определенное значение, а на вход подал просто шум, ниже код и результат. uint16_t arr[4096], indx; int main(void) { uint32_t i; GPIO_InitTypeDef PORT; // Initialize USART1 (для рабочей платы) /* USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); AFIO->MAPR |= AFIO_MAPR_USART1_REMAP; PORT.GPIO_Pin = GPIO_Pin_6; PORT.GPIO_Speed = GPIO_Speed_2MHz; PORT.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &PORT); //*/ // Initialize USART1 (для стартика MINI_STM32_V3) USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); PORT.GPIO_Pin = GPIO_Pin_9; PORT.GPIO_Speed = GPIO_Speed_2MHz; PORT.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &PORT); 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_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE); ADC1->CR2 |= ADC_CR2_CAL; while (!(ADC1->CR2 & ADC_CR2_CAL)) ADC1->CR1 |= ADC_CR1_SCAN; ADC1->CR2 |= ADC_CR2_EXTSEL; ADC1->CR2 |= ADC_CR2_EXTTRIG; ADC1->SQR3 |= (ADC_SQR3_SQ1_3|ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_1|ADC_SQR3_SQ1_0); // вход AN15 ADC1->CR2 |= ADC_CR2_ADON; ADC1->CR2 |= ADC_CR2_SWSTART; while (!(ADC1->SR & ADC_SR_EOC)); _debug_print_str("\r\n *** TEST *** \r\n"); while(1) { ADC1->CR2 |= ADC_CR2_SWSTART; while (!(ADC1->SR & ADC_SR_EOC)); indx = ADC1->DR; if(arr[indx] < 0x1FFF) arr[indx]++; if(arr[4090] > 100) break; } i = 4096; while(i--){ _debug_print_num(i); _debug_print_str(";"); _debug_print_num(arr[i]); _debug_print_str(";\r\n"); } while(1); } И вот что мы имеем на выходе: Тут отчетливо видно что есть значения которые АЦП на выходе не выдает никогда, я лично очень сомневаюсь что тот сигнал что я подавал на вход (шум), действительно имеет такие дырки (я его формировал крутя потенциометр в зад - перед раз 20, в конце выкрутил в крайнее положение и мой код отследил приход значений соответствующих крайнему положению и выдал результат в UART).
  23. продолжил свои изыскания, взял я совершенно другую плату (на STM32F103RBT6): проводами на один из входов подключил источник питания регулируемый, и начал плавно его регулировать попутно записывая все измерения (код программы тот же что и ранее), вот что вышло: Вроде все хорошо, помехи и выбросы есть и на осциллограмме, они связаны с тем что источник плохой и длинными проводами подключен, но если рассмотреть участок вблизи моей злополучной точке "1023" то мы увидим все ту же проблему: Тут хорошо видно что вблизи точки "1023" (значение выдаваемое АЦП) полностью отсутствуют значения в диапазоне от 1024 до 1048 и все они заменяются на мои 1023! Дальше я просто посмотрел а АЦП хоть когда либо выдает ли мне на выходе цифры в диапазоне 1024 - 1048, и выяснились что нет, на двух совершенно разных платах и немного разных процессорах... Обнаружив такую особенность я достал старую добрую STM32-Discovery и запустил тот же код на ней, там все ок, таких особенностей работы АЦП не заметил...
  24. судя по вашей ссылке и по характерности цифр (например 1023 это цифра в бинарном виде состоящая из однах едениц, и при увеличении ее на один придется перещелкнуть сразу все разряды) есть у меня подозрение на некую нестабильность внутреннюю, возможно далеко стоят блокирующие конденсаторы, не могу найти апнот по теме разводки питания цифрового и аналогового для STM32F10x, ссылкой не поделитесь?