| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с АЦП на STM32 Cortex M3 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7587 |
Страница 1 от 4 |
| Автор: | juzisound [ Вто Фев 23, 2010 11:39 pm ] |
| Заглавие: | Проблем с АЦП на STM32 Cortex M3 |
Здравейте. Мъча се вече трети или четвърти ден с това и няма оправия! Проблема е следния. Имам вече доста напреднала програма за конкретно устройство - в което ми се налага да добавя АЦП. Просто мерене на един единствен канал. Нищо особено. Оказа се обаче, че имам голям проблем. Процесора е STM32F103RBT6. АЦП-то, което е по принцип 12 битово, при тоя звяр има нужда от калибрация след power on. От тук идва и проблема. Само да уточня. Меря външен пин и той е вързан на маса през 2.2к, което е достатъчно за входно съпротивление на АЦП-то. Така - ето проблема: - При пускане или рестарт на устройството - разбирай преминаване през калибрация - някой път вместо да показва 0 почва да показва 38-40 - и резултата играе яко. При това положение се разиграват и всички други канали - ако ползвам и такива. Ако калибрацията мине успешно - след това вече резултата е какъвто очаквам и мърда най-много с 1-2 бита, което за това АЦП може да се приеме за нормално, защото при тоя корпус, референса на АЦП-то е вързан направо за аналоговото захранване и го няма изведен на отделен пин. Аналоговото захранване пък е свързано през бобинка само към дигиталното и от там може да се очаква някое и друго смущение... Какво съм проверил - тоест от какво не е проблема. - захранванията са ми стъбилни - проверено със скоп. - клока на АЦПто е в рамките 72/6 = 12мХз, което е в рамките 0.6-14мХз. - промяна във времената за конвертиране - все тая. - инициализацията е по книга - в много различни примери е точно така дадена. - пробвано е инициализацията да се мести на различни места - преди включване на някои вътрешни модули - не помага. - АЦП-то има вграден референсен източник, който може да се мери на вътрешен канал. Ако меря него вместо външен пин - същите признаци. - Четенето от АЦП-то, с полиране, с прекъсване, с ДМА - никаква промяна. - още много проби дето ми идваха на ум - без промяна. Какви са ми съмненията: Проблема сякаш не е от към хардуер - имам в предвид платки захранвания и т.н., защото щом веднъж калибрацията мине добре - после няма проблеми. Явно нещо става с калибрацията - обаче какво - идея си нямам вече. За дебъгер - късно е вече. Устройството е почти готово - пиновете за дебъг са заети с друго. Имам съмнения някакви в натвореното от компилатора - обаче всеки път когато се стигне да мисля така - все аз излизам кривия... Та някой сблъсквал ли се е с такъв проблем с АДЦ-то на тоя вид процесори или подобни? Просто съм учуден, че тук срещнах проблем - защото останалата част от програмата е с много-много по-голяма сложност - а там не срещнах никъде някакви особени проблеми... |
|
| Автор: | miro_atc [ Вто Фев 23, 2010 11:57 pm ] |
| Заглавие: | |
Конкретно с ST нямам никакъв опит и изобщо не съм запознат... Но от опита ми с другите АРМ-чета всеки втори чип има проблем с ресета, особено ако пък има и дебъгер (макар че ти казваш че нямаш). Тъй че на твое място бих сложил още един ресет - виж App. Int & Reset Control Reg. Пробвай да ресетнеш софтуерно, все пак при powerup някое от напреженията може да изостава или да не нараства достатъчно бързо и нещо да се латчва не както трябва... |
|
| Автор: | juzisound [ Сря Фев 24, 2010 9:37 am ] |
| Заглавие: | |
Имаш в предвид ресет на целия чип - не на АЦП-то самo? Може да има някаква връзка с лош ресет - защото имам боотлоадер и при всяко пускане първо пали той - след това отива в главната програма и може да има някаква омазване - което до момента да не се е проявило... Какво е "App. Int & Reset Control Reg", че нещо не стоплям? |
|
| Автор: | Цецо [ Сря Фев 24, 2010 9:49 am ] |
| Заглавие: | |
Ами аз ползвам АЦП-то и то точно на осакатения чип, дето референса е на захранване. Честно казано никога не съм имал проблем. Пускам си калибрацията отначало и даже не чета резултата след нея. После АЦП-то ми се върти автоматично през таймерите, при това ползвам и нормални и инжектирани канали, прекъсване, че май и DMA. И аналоговото куче и то е включено. Въобще почти всичко дето се сещам е пуснато около АЦП-то. И не съм забелязал никакви проблеми. Ако искаш да ти постна инициализиращия код да видиш да не бъркаш нещо в последователността? |
|
| Автор: | miro_atc [ Сря Фев 24, 2010 10:12 am ] |
| Заглавие: | |
Значи кортекса е с уникален ресет. В смисъл всеки друг контролер може да го "рестартираш" като му инициализираш регистрите с ресет стойностите. При кортекса това не е достатъчно, защото има вътрешни състояния на ядрото, които не са достъпни чрез регистри. Примерно стека за текущите ексепшъни. Така ако от ексепшън рестартираш и отидеш на ресет вектора някои ексепшъни като PendSV няма да работят, а ако извикаш други като SVCall ще получиш hard fault. Та затова в NVIC има специален регистър, чрез който ресетваш ядрото и/или периферии.... Намира се на адрес 0xE000ED0C и го има описан в CortexM3_TRM Това е единствения начин за ресет, който съм открил... Лошото е, че и при мен (с Луминари) понякога ресета не минава като хората, но не ми работи дебъга само като хората. И не се оправя дори с този регистър, само с истински ресет. Не знам моя проблем може и да не е от чипа от емулатора... ще открия някой ден причината надявам се |
|
| Автор: | juzisound [ Сря Фев 24, 2010 10:13 am ] |
| Заглавие: | |
Ами няма да е лошо да видя код - въпреки че предполагам, че и моя ще е верен. Нещо ме мъчи от вътре, че това има нещо общо с вътрешното подравняването на масиви и структори. Уж може да подравнява и на по-малко - ама не винаги се справя добре сякаш... Има и една друга "малка" странност. Имам една картинка дето се рисува по дисплея - и то доста след като е минала калибрацията на АЦП-то. Въпреки това - ако я рисувам - процента на калпавите инициализации на АЦП-то става поне 3 пъти по голяма от ако я прескоча. Проблема не е в самото рисуване, щото някой път наистина става. Май на калпав ресет ще отидат нещата - ама как ще го изловя без дебъгер... Ще се правят капанчета явно - додето излезе... |
|
| Автор: | rumen65 [ Сря Фев 24, 2010 10:50 am ] |
| Заглавие: | |
Пускал съм АЦП-то на STM32F103C6T6 и не съм забелязал никакви проблеми. Референса също е на захранването. Единствено на платката имам ресет чип на 3V, а захранването е 3.3V. Забелязъл съм само че показанията се променят с два три отчета в зависимост от това дали след стартиране на меренето, което е по няколко канала с DMA, спирам процесора или той работи по време на меренето. Стабилизатора храни само процесора и явно промяната на неговата консумация, променя захранването и от там референса в тези граници. Но аз изчислявам входните спрямо измереното вътрешно опорно и резултата е постоянен. За това виж докато трае калибрацията, да нямаш много големи промени в консумацията от други периферни схеми ,които още не са се установили, и от там да ти се променя напрежението. |
|
| Автор: | Цецо [ Сря Фев 24, 2010 12:19 pm ] | ||
| Заглавие: | |||
Ето го.
|
|||
| Автор: | juzisound [ Сря Фев 24, 2010 12:44 pm ] |
| Заглавие: | |
Благодаря! Що се отнася до АЦП-то - същото е. Явно не е от това... |
|
| Автор: | juzisound [ Чет Фев 25, 2010 11:49 am ] |
| Заглавие: | |
Все още не се оправя това АЦП. Вече почвам да си мисля, че проблема е или в самия процесор - или в развойната платка "ET-STM32 Stamp", понеже и друг колега се оплаква от същото... Цецо! Казваш, че даже след калибрацията не четеш резултата от нея. Какъв е смисъла да се чете - щото аз не съм разбрал до сега? Пропуснал ли съм нещо? Минава ми и друга идея. Да пусна АДЦ1 и 2 едновременно - като единия чете само референсния източник - а другия аналоговия канал. Решавам си колко трябва да дава референсния източник - и АКО смущенията са еднакви и за двата канала - ДАНО ДА Е ТАКА - то трябва да имам разлика и в референсния източник. Тази разлика си ползвам за компенсация в измерването на другия канал на и то при всяко измерване. Лошото е, че днес имам друга задача - и няма да мога да пробвам - а така ме мъчи това... Как ви се струва идеята? |
|
| Автор: | 741 [ Чет Фев 25, 2010 12:21 pm ] |
| Заглавие: | |
Какво подаваш към аналоговите входове? Има ли вероятност в определен момент напрежението на някой от входовете, (независимо кой) да надхвърля захранването - включително преди и по време на подаване на захранването на чипа? |
|
| Автор: | 741 [ Чет Фев 25, 2010 1:35 pm ] |
| Заглавие: | |
Провери този RX вход дали е 5V-толерантен. Ако не е - задължително подаваш сигнала през сериен резистор, 1к примерно, и добавяш шотки диод паралелно на входа към захранване. Ако има вероятност за отрицателно напрежение - втори шотки диод към маса. Изходите към входове на 5V чипове не са проблем. |
|
| Автор: | juzisound [ Чет Фев 25, 2010 2:07 pm ] |
| Заглавие: | |
Мамка му - НЕ Е! Поне не го пише че е - което би трябвалода означава че не е! Голямо съм магаре А дано да е от това - че голяма зор. Дали да не му направя делител направо? |
|
| Автор: | 741 [ Чет Фев 25, 2010 2:41 pm ] |
| Заглавие: | |
Може и с делител, ама само ако е сигурно, че захранването на 5V-чип не се включва преди захранването на контролера (и микросекунди изпреварване могат да направят фал). С шотки диод ще работи винаги. Всъщност, ако резисторите са достатъчно големи да ограничат тока под максимално допустимия за конкретния пин при всяка ситуация, няма да има проблем и с делител. По време на работа обаче напрежението на входа задължително трябва да е по-ниско от захранването. |
|
| Страница 1 от 4 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|