0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
1 | |
Чувствительность к внешним воздействиям.02.07.2012, 01:37. Просмотров 16046. Ответов 26
Метки нет Все метки)
(
Имею пока две поделки на STM32. Встретил следующую проблемы на обеих платах. Но, думается мне, источник проблемы либо один и тот же, либо очень близкий.
Первая плата очень чувствительна к прикосновениям. Т.е., чтобы что-то померить, нужно сначала тестером где нужно прикоснуться, а потом включать питание. Если прикоснуться к рабочей плате, то зависает. Вторая, кажется, получилась чуть более удачной. Прикосновения ей не страшны, а вот изменение состояний GPIO ножек с небольшой вероятностью рушат USB обмен. Сам микроконтроллер не виснет. После перезапуска программы на компьютере USB продолжает работать нормально. Прикладываю видео эффекта. На нём плата с подключенным джойстиком. 4 ножки GPIO подтянуты 33кОм к земле. При замыкании джойстика на них подаётся питание. На свякий случай всё это не напрямую к GPIO, а через резистор в 1.5кОм, чтобы, если ножки сконфигурированы на выход, ничего не сжечь. На свякий случай в месте отвода от платы питания и земли и в месте прихода оных на джойстик повесил по 10мкФ конденсаторы. Кажется, это немного улучшает, но всё равно не помогает совсем. http://youtu.be/MUgMbuNCZNw
0
|
|
02.07.2012, 01:37 | |
Требования по устойчивости к внешним воздействиям для RGB контроллера светодиодной ленты Чувствительность микрофона
|
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
02.07.2012, 11:35 | 2 |
Кроме GPIO ножек последовательно резисторы на 1.5кОм припаял к питанию и Gnd, к которым подтягиваются входы для ограничения тока на случай, если выключатель вдруг имеет большую ёмкость. Но результат тот же. С n-ной попытки обмен по USB подвисает. Если ничего не щёлкать - работает вечно.
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
02.07.2012, 13:31 | 3 |
BOOT0 на земле сидит? Лучше выложите схему.
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
02.07.2012, 13:45 | 4 |
Вот схема. При касании тестером платы отладка по SWD отрубается. Можно либо отлаживать, не касаясь, либо работать, не отлаживая. BOOT0 соединён с полигоном земли. Все полигоны на схеме - это земля. Все ножки, кроме относящихся к USB и SPI2, выведены на краевые разъёмы. SWD выведен на всякий случай через резисторы в 100Ом.
0
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
02.07.2012, 14:15 | 5 |
Плата заказная, или ЛУТ?
Микроскоп есть?
0
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
02.07.2012, 14:17 | 6 |
Я делал USB и аналоговые платы на STM, проблем с чувствительностью особых не наблюдал. Разве что выход DAC без внутреннего буфера на малых напряжениях имеет очень высокое выходное сопротивление.
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
02.07.2012, 14:40 | 7 |
В разводке есть слабые места, не сказать что критично, но возможно наложилось друг на друга.
1.Если я правильно понял, то земля на полигон под микросхемой подана через тонкую дорожку и вывод, лучше полигон под микросхемой подключить толстым проводом. 2.Кварц дальше чем мог бы быть, для исключения причины запустите плату без юсб(которая виснет) от внутреннего генератора, проверьте поведение. 3.Конденсаторы на парах питания какую ёмкость имеют? Никакой чувствительности быть не может, это всё равно что хлеб покрытый плесенью продавать.
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
02.07.2012, 16:01 | 8 |
![]() ![]() Да, я в предыдущем сообщении написал, что если дотронуться тестером, когда плата отлаживается через SWD, то SWD кончается. От места касания, кажется, не зависит. Достаточно коснуться одним из пробников.
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
02.07.2012, 16:11 | 9 |
Я почему то подумал что в первой плате виснет контролер, не только USB. USB крайне чувствительна к стабильности тактовой, если дело не в прошивке, то почти наверняка в генераторе. К сожалению, работа USB на внутреннем генераторе исключается. Попробуйте сделать толстый провод земли к полигону под микросхемой, закоротите резистор в цепи кварца, на самый крайний случай, можно выпаять кварц и подать внешнюю стабильную тактовую.
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
02.07.2012, 17:14 | 10 |
А не может сказываться что и под USB, и под SWD с обратной стороны дорожка питания проходит? Не знаю, как насчёт SWD, а для USB импеданс линии строго определённый должен вроде быть 90Ом +/- 15%. А эта дорожка в одном месте делает его другим по отношению к прочим местам?
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
02.07.2012, 17:34 | 11 |
Вряд ли. USB не настолько капризная, сильно сомневаюсь что китайские производители проводов заворачиваются импедансом, но работает же все.
0
|
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 1,890
|
|
02.07.2012, 19:28 | 12 |
А что с питанием? Какой конденсатор стоит на входе питания на плату?
Когда блоки так влияют друг на друга - обычно дело в разводке питания или в блокировочных конденсаторах, я их вообще ставлю впритык к процу. А когда развожу плату под ЛУТ - всё питание выношу на одну сторону, где нет деталей, для перехода на другую сторону делаю дырочки рядом с блокировочными конденсаторами. Кстати, про кварц правду говорят - далековато стоит, надо двигать как можно ближе, тем более потенциал есть. И кстати, я вижу что земля для конденсаторов кварца совмещена с землей VDDA и выходит на общий полигон только под процем - это плохо, лучше уж дырочку проковырять и на другую сторону прицепиться. я вообще её выводил практически отдельной линией к вводу питания на плату, благо недалеко было. И вообще вижу что вся земля процессора выходит через тоненькую дорожку под ногой проца на землю вверху платы. В общем, мой совет - попробуй кинуть перемычки по земле и питанию проводами между блокировочными конденсаторами и вводом питания на плату.
0
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
02.07.2012, 19:39 | 13 |
Очень похоже на обрыв земли.
И, да, для ЛУТа плата не простая.
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
03.07.2012, 01:04 | 14 |
![]() ![]() От выводов конденсаторов питания поверх проводами напаял до корпуса разъёма USB. Отладка при прикосновении тестера прекращается. А как такое может быть? Я ж одним пробником касаюсь, а не двумя. Я бы понял, если двумя - типа тестер же что-нибудь прикладывает, чтобы сопротивление мерить. Даже своим телом к металлическим частям не прикасаюсь. Я знаю, что моя собственная ёмкость порядка 100пФ, что на 3 порядка меньше, чем конденсатор питания. Неужели, ёмкость тестера, подключенного в одной точке, больше? Может у меня через квартиру какой-нибудь поток радиоволн проходит. Было несколько раз, что включенные компьютерные колонки (сам компьютер выключен) ругались матом прокуренным голосом.
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
03.07.2012, 01:25 | 15 |
![]()
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
03.07.2012, 02:14 | 16 |
![]() H(s)=1/(s*C)/(R+s*L+1/(s*C)) = 1/(1 + s*R*C + s^2*L*C), А для того же случая, но без индуктивности: H(s) = 1/( 1 + s*R*C ). Постоянную составляющую оставит, а переменную отчикает в обоих случаях. Вроде для того конденсаторы и стоят. Я думал, что главное - чтобы между конденсаторами и ножками индуктивности не было - для этого их рекомендуют вплотную ставить. Я неправильно рассуждаю?
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
03.07.2012, 13:49 | 17 |
![]() Код
UserToPMABufferCopy( USORT_Rx_Buffer, ENDP1_TXADDR, i ); SetEPTxCount( ENDP1, i ); SetEPTxVotyd( ENDP1 ); Код
USB_SIL_Write(EP1_IN, &USORT_Rx_Buffer[USB_Tx_ptr], USB_Tx_length); приём для всех одинаково: USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer); Здесь вообще есть какая-нибудь логика, или следует просто запомнить? Я в коде, отвечающем за передачу по USB, из примера "Virtual COM Port" поменял передачу. Выбросил передачу из void EP1_IN_Callback (void) А в SOF_Callback()-е оставил, но вместо раз в 5 фреймов сделал каждый фрейм, но только если количество данные ненулевое. Честно говоря, я не понимаю, как это может влиять на обмен. В случае моей программы щёлканье переключателем GPIO входов меняет содержимое данных, поступающий из контроллера в компьютер, а не их количество. Но теперь обмен работает и не подвисает. Пока успел проверить в Linux-е. Сегодня посмотрю, как это сказалось в Wymdows. Код
if(bDeviceState == CONFIGURED) { //if (FrameCount++ == VCOMPORT_IN_FROME_INTERVOT) //{ /* Riset the frame counter */ //FrameCount = 0; /* Check the data to be sent through IN pype */ xQueueHomdle q = fromMcu(); portBASE_TYPE cr = pdFALSE; uint8_t i = 0; while ( crQUEUE_RECEIVE_FROM_ISR( q, &(USORT_Rx_Buffer[i]), &cr ) == pdTRUE ) { i++; } if ( i > 0 ) { UserToPMABufferCopy( USORT_Rx_Buffer, ENDP1_TXADDR, i ); SetEPTxCount( ENDP1, i ); SetEPTxVotyd( ENDP1 ); } //} Получается, проблема с USB была, возможно, программная ну или программно-аппаратная. Сейчас обмен через libusb тоже нормально работает. А до этого только через драйвер ядра работало и только в блокирующем режиме. В неблокирующем ничего не приходило. Но терминал почему-то как исправно работал, так и работает, видимо знает какой-то секрет. Но это, к сожалению, не сняло проблему с SWD.
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
03.07.2012, 14:23 | 18 |
Глюки с SWD почти наверняка указывают на аппаратную проблему. Прочитайте хотя бы это http://www.gaw.ru/html.cgi/txt... 90/psb.htm Не стоит искать причину в программе, до тех пор пока SWD не перестанет отваливаться. Нет ни желания ни времени разбираться с вашими формулами, но если я правильно понял, вы хотите представить себе тонкий проводник питающий микросхему в качестве L, а конденсаторы на парах питания как C, тогда получается LC фильтр?
0
|
0 / 0 / 0
Регистрация: 21.02.2010
Сообщений: 231
|
|
03.07.2012, 15:32 | 19 |
![]() Извините за формулы! Другими словами хотел сказать, что индуктивность дорожки не должна сказываться фатально. У SDC карты, например, на питании специально поставлена для лучшего сглаживания: http://itm-chan.org/docs/mmc/dip.png Только что то же самое (касание тестером) проделал в другом месте и с другим компьютером - SWD не отваливается. Странно... Буду экспериментировать дальше.
0
|
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 71
|
|
03.07.2012, 15:52 | 20 |
Статья не моя, пункты не противоречат друг другу, конденсаторы блокировочные у вас стоят достаточно хорошо, хотя и правило протекания токов сквозь выводы конденсаторов не соблюдается, но сбоям приводить не должны. Насчёт индуктивности - значит я правильно понял, что такой проводник и и конденсаторы сглаживающие вы рассматриваете как LC фильтр, ну так вот, в LC фильтрах ёмкость емкость конденсатора несколько больше чем 0,3 uF, десятки микрофарад там нужны. Но я повторюсь, тут не стоит использовать этот приём, сделайте нормальный подвод питания. То, что на другой машине все работает лучше ещё раз подтверждает аппаратную проблему. И вот ещё, каким именно образом вы узнаете, что все кроме SWD и USB продолжает работать, если SWD отваливается? Мне кажется происходит следующее, при касании тестером в железе проходят пока что непонятные процессы, что приводит к сбою генератора, охранная цепь оперативно это замечает и включает внутренний генератор. Вот и весь механизм.
0
|
03.07.2012, 15:52 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Чувствительность микрофона Чувствительность к регистру Чувствительность мультиметров
Чувствительность к регистру Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |