| Автор |
Съобщение |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
 Проблем с АЦП на STM32 Cortex M3
Здравейте.
Мъча се вече трети или четвърти ден с това и няма оправия!
Проблема е следния.
Имам вече доста напреднала програма за конкретно устройство - в което ми се налага да добавя АЦП. Просто мерене на един единствен канал. Нищо особено. Оказа се обаче, че имам голям проблем.
Процесора е STM32F103RBT6.
АЦП-то, което е по принцип 12 битово, при тоя звяр има нужда от калибрация след power on.
От тук идва и проблема.
Само да уточня. Меря външен пин и той е вързан на маса през 2.2к, което е достатъчно за входно съпротивление на АЦП-то.
Така - ето проблема:
- При пускане или рестарт на устройството - разбирай преминаване през калибрация - някой път вместо да показва 0 почва да показва 38-40 - и резултата играе яко. При това положение се разиграват и всички други канали - ако ползвам и такива. Ако калибрацията мине успешно - след това вече резултата е какъвто очаквам и мърда най-много с 1-2 бита, което за това АЦП може да се приеме за нормално, защото при тоя корпус, референса на АЦП-то е вързан направо за аналоговото захранване и го няма изведен на отделен пин. Аналоговото захранване пък е свързано през бобинка само към дигиталното и от там може да се очаква някое и друго смущение...
Какво съм проверил - тоест от какво не е проблема.
- захранванията са ми стъбилни - проверено със скоп.
- клока на АЦПто е в рамките 72/6 = 12мХз, което е в рамките 0.6-14мХз.
- промяна във времената за конвертиране - все тая.
- инициализацията е по книга - в много различни примери е точно така дадена.
- пробвано е инициализацията да се мести на различни места - преди включване на някои вътрешни модули - не помага.
- АЦП-то има вграден референсен източник, който може да се мери на вътрешен канал. Ако меря него вместо външен пин - същите признаци.
- Четенето от АЦП-то, с полиране, с прекъсване, с ДМА - никаква промяна.
- още много проби дето ми идваха на ум - без промяна.
Какви са ми съмненията:
Проблема сякаш не е от към хардуер - имам в предвид платки захранвания и т.н., защото щом веднъж калибрацията мине добре - после няма проблеми. Явно нещо става с калибрацията - обаче какво - идея си нямам вече.
За дебъгер - късно е вече. Устройството е почти готово - пиновете за дебъг са заети с друго.
Имам съмнения някакви в натвореното от компилатора - обаче всеки път когато се стигне да мисля така - все аз излизам кривия...
Та някой сблъсквал ли се е с такъв проблем с АДЦ-то на тоя вид процесори или подобни?
Просто съм учуден, че тук срещнах проблем - защото останалата част от програмата е с много-много по-голяма сложност - а там не срещнах никъде някакви особени проблеми...
|
| Вто Фев 23, 2010 11:39 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Конкретно с ST нямам никакъв опит и изобщо не съм запознат...
Но от опита ми с другите АРМ-чета всеки втори чип има проблем с ресета, особено ако пък има и дебъгер (макар че ти казваш че нямаш).
Тъй че на твое място бих сложил още един ресет - виж App. Int & Reset Control Reg. Пробвай да ресетнеш софтуерно, все пак при powerup някое от напреженията може да изостава или да не нараства достатъчно бързо и нещо да се латчва не както трябва...
|
| Вто Фев 23, 2010 11:57 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Имаш в предвид ресет на целия чип - не на АЦП-то самo?
Може да има някаква връзка с лош ресет - защото имам боотлоадер и при всяко пускане първо пали той - след това отива в главната програма и може да има някаква омазване - което до момента да не се е проявило...
Какво е "App. Int & Reset Control Reg", че нещо не стоплям? 
|
| Сря Фев 24, 2010 9:37 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами аз ползвам АЦП-то и то точно на осакатения чип, дето референса е на захранване.
Честно казано никога не съм имал проблем. Пускам си калибрацията отначало и даже не чета резултата след нея. После АЦП-то ми се върти автоматично през таймерите, при това ползвам и нормални и инжектирани канали, прекъсване, че май и DMA. И аналоговото куче и то е включено. Въобще почти всичко дето се сещам е пуснато около АЦП-то. И не съм забелязал никакви проблеми. Ако искаш да ти постна инициализиращия код да видиш да не бъркаш нещо в последователността?
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Сря Фев 24, 2010 9:49 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Значи кортекса е с уникален ресет. В смисъл всеки друг контролер може да го "рестартираш" като му инициализираш регистрите с ресет стойностите. При кортекса това не е достатъчно, защото има вътрешни състояния на ядрото, които не са достъпни чрез регистри. Примерно стека за текущите ексепшъни. Така ако от ексепшън рестартираш и отидеш на ресет вектора някои ексепшъни като PendSV няма да работят, а ако извикаш други като SVCall ще получиш hard fault.
Та затова в NVIC има специален регистър, чрез който ресетваш ядрото и/или периферии.... Намира се на адрес 0xE000ED0C и го има описан в CortexM3_TRM
Това е единствения начин за ресет, който съм открил... Лошото е, че и при мен (с Луминари) понякога ресета не минава като хората, но не ми работи дебъга само като хората. И не се оправя дори с този регистър, само с истински ресет. Не знам моя проблем може и да не е от чипа от емулатора... ще открия някой ден причината надявам се 
|
| Сря Фев 24, 2010 10:12 am |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Ами няма да е лошо да видя код - въпреки че предполагам, че и моя ще е верен.
Нещо ме мъчи от вътре, че това има нещо общо с вътрешното подравняването на масиви и структори. Уж може да подравнява и на по-малко - ама не винаги се справя добре сякаш...
Има и една друга "малка" странност.
Имам една картинка дето се рисува по дисплея - и то доста след като е минала калибрацията на АЦП-то.
Въпреки това - ако я рисувам - процента на калпавите инициализации на АЦП-то става поне 3 пъти по голяма от ако я прескоча. Проблема не е в самото рисуване, щото някой път наистина става. Май на калпав ресет ще отидат нещата - ама как ще го изловя без дебъгер...
Ще се правят капанчета явно - додето излезе... 
Последна промяна juzisound на Сря Фев 24, 2010 10:53 am, променена общо 1 път
|
| Сря Фев 24, 2010 10:13 am |
|
 |
|
rumen65
Ранг: Новодошъл
Регистриран на: Чет Окт 06, 2005 2:06 pm Мнения: 194 Местоположение: Sofia
|
Пускал съм АЦП-то на STM32F103C6T6 и не съм забелязал никакви проблеми. Референса също е на захранването. Единствено на платката имам ресет чип на 3V, а захранването е 3.3V. Забелязъл съм само че показанията се променят с два три отчета в зависимост от това дали след стартиране на меренето, което е по няколко канала с DMA, спирам процесора или той работи по време на меренето. Стабилизатора храни само процесора и явно промяната на неговата консумация, променя захранването и от там референса в тези граници. Но аз изчислявам входните спрямо измереното вътрешно опорно и резултата е постоянен. За това виж докато трае калибрацията, да нямаш много големи промени в консумацията от други периферни схеми ,които още не са се установили, и от там да ти се променя напрежението.
|
| Сря Фев 24, 2010 10:50 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ето го.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Сря Фев 24, 2010 12:19 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Благодаря!
Що се отнася до АЦП-то - същото е. Явно не е от това...
|
| Сря Фев 24, 2010 12:44 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Все още не се оправя това АЦП. Вече почвам да си мисля, че проблема е или в самия процесор - или в развойната платка "ET-STM32 Stamp", понеже и друг колега се оплаква от същото...
Цецо!
Казваш, че даже след калибрацията не четеш резултата от нея. Какъв е смисъла да се чете - щото аз не съм разбрал до сега? Пропуснал ли съм нещо?
Минава ми и друга идея.
Да пусна АДЦ1 и 2 едновременно - като единия чете само референсния източник - а другия аналоговия канал.
Решавам си колко трябва да дава референсния източник - и АКО смущенията са еднакви и за двата канала - ДАНО ДА Е ТАКА - то трябва да имам разлика и в референсния източник. Тази разлика си ползвам за компенсация в измерването на другия канал на и то при всяко измерване.
Лошото е, че днес имам друга задача - и няма да мога да пробвам - а така ме мъчи това...
Как ви се струва идеята?
|
| Чет Фев 25, 2010 11:49 am |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
Какво подаваш към аналоговите входове? Има ли вероятност в определен момент напрежението на някой от входовете, (независимо кой) да надхвърля захранването - включително преди и по време на подаване на захранването на чипа?
|
| Чет Фев 25, 2010 12:21 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Да! Има такава вероятност!
Има един вход - който обаче в случая не е конфигуруран като аналогов - а като цифров. Това е RX на USART2, на който нивата са ТТЛ.
Освен него - има 4 пина които са изхди и управляват външен ЦАП работещ на 5V, и 4 пина - пак изходи управляващи аналогов мултиплексор 4053 отново работещ на 5V.
Това е снимка на графиката на проблема с шумовете на АЦП-то. Получен е като резултата от канала на АЦП-то се подава направо на аудио ЦАП, с цел да се види характера на смущенията. Измерванията са на 2 милисекунди. Напълно са чуваеми. Нали съм по аудиото - по подобен начин прослушах и захранването. Там няма подобни проблеми.[/quote]
|
| Чет Фев 25, 2010 1:13 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
Провери този RX вход дали е 5V-толерантен. Ако не е - задължително подаваш сигнала през сериен резистор, 1к примерно, и добавяш шотки диод паралелно на входа към захранване. Ако има вероятност за отрицателно напрежение - втори шотки диод към маса.
Изходите към входове на 5V чипове не са проблем.
|
| Чет Фев 25, 2010 1:35 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Мамка му - НЕ Е!
Поне не го пише че е - което би трябвалода означава че не е!
Голямо съм магаре  - ама и те са го написали в съвсем отделен ПДФ
А дано да е от това - че голяма зор.
Дали да не му направя делител направо?
|
| Чет Фев 25, 2010 2:07 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
Може и с делител, ама само ако е сигурно, че захранването на 5V-чип не се включва преди захранването на контролера (и микросекунди изпреварване могат да направят фал). С шотки диод ще работи винаги.
Всъщност, ако резисторите са достатъчно големи да ограничат тока под максимално допустимия за конкретния пин при всяка ситуация, няма да има проблем и с делител. По време на работа обаче напрежението на входа задължително трябва да е по-ниско от захранването.
Последна промяна 741 на Чет Фев 25, 2010 2:51 pm, променена общо 1 път
|
| Чет Фев 25, 2010 2:41 pm |
|
|