| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| SystemReset() в прекъсване на таймер !!! http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=17231 |
Страница 1 от 2 |
| Автор: | RM [ Чет Апр 09, 2020 6:06 pm ] |
| Заглавие: | SystemReset() в прекъсване на таймер !!! |
Имам управление на едно реле, по приети байтове. Всичко е силно зашумено цъкат и други релета пуска се еднофазен асин. двигател с пускова и капацитет. Имам една платка с STM32F103 ( причината да е тя е че е по евтина от тази на Атмел ) . Има няма 25 реда код . Забива ми на 10 до 30 дена ... и причинява щети Инициализирах таймер и вкарах в прекъсването му SystemReset(); На 10-20 минути преинициализирам хардуера и таймера. Нямам време да пускам Watchdog Timer, щото ще трябва да попрочета как става. Конкретно въпроса ми е Има ли разлика в използването на WDT и ресетването му, и използванет на обикновен таймер като WD. Ако забие контролера пак и обикновенния таймер не го ресетне, WD-a по сигурен ли е. |
|
| Автор: | stefan63 [ Чет Апр 09, 2020 6:31 pm ] | |||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | |||||||||
Направил си таймера на 20минути да ресетва? Пусни и WDT, а ако можеш- сложи и външно куче, щом ти прави бели. |
||||||||||
| Автор: | miro_atc [ Чет Апр 09, 2020 6:33 pm ] | ||||||||||||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | ||||||||||||||||||
WDT прави ресет на кура, таймерите обикновено не. Сега не помня как беше при СТМ32Ф1, при някои имаше опция ако не нахраниш веднъж кучето ти прави прекъсване. Ако се забавиш пак да го нахраниш на следващото превъртане хапи и прави ресет. Сега със сигурност има вариант и софтуерно да се ресетнеш. Не знам твоя SystemReset() какво и как прави, но принципно каквото трябва да се направи е първо всички периферии да се ресетнат и после самия кур. Като при ресета на кура има една особеност, че има хардуерен стек с вложените прекъсвания, който трябва да изчистиш, преди да скочиш към ресет вектора. При мен това е на асемблер и изглежда така:
Обърни внимание на пасажа където проверява младшите битове на PSR, които показват откъде съм дошъл. Ако са чисти значи не е прекъсване и отива на рестарт (9). Ако не се чисти си правя стек, пъха му се вътре адреса на същата процедура плюс статус да излезе едно ниво... и така завърта, докато се изчисти. |
|||||||||||||||||||
| Автор: | RM [ Чет Апр 09, 2020 7:27 pm ] |
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! |
Функцията напълно ресетва софтуера, с изключение на reset bit-а Настройл съм таймера на 2,5 секунди , байтовете ми са пакет по два на секунда. Отделно при всяко включване на двигателя средно през 10 до30 минути когат контролера няма друга работа наново инициализирам уарта и таймера. Ще го теставам така ... и ще търся начин да ползвам WD-a. miro_atc Благодаря , но същинския код е 10-12 реда, един Delay_ms ... и един if (UART1_Data_Ready()) receive = UART1_Read(); Няма какво да объркам в моя код. Вероятно шум може да обърква инициализациата на уарта, или забиват циклите на закъснението. Програмата се превърта стотици хиляди пъти докато забие. Индицирал съм едно диодче , да ми показва кога се ресетва от таймера, и като че ли имам повече възможности да се опитам да открия проблема, чрез възможност да вкарам код в прекъсването. Когато имам повече яснота ще пусна WD-a. Друго няма какво. Благодаря. |
|
| Автор: | itso.t [ Чет Апр 09, 2020 7:43 pm ] |
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! |
А мислил ли си в посока решаване на проблема хардуерно? Филтрация на сигнали, галванично разделяне, екраниране... |
|
| Автор: | RM [ Чет Апр 09, 2020 7:53 pm ] | |||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | |||||||||
Ефтина платка без едно кондензаторче, 15 сантиметрови тънки кабелчета, много релета и индуктивности в непосредствена близост. Платчицата съм я лепнал отстрани на един 450V 380uF кондензатор. Все условия дето изправят косите . Това ще го направя със сигурност. |
||||||||||
| Автор: | lcr [ Чет Апр 09, 2020 7:59 pm ] | |||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | |||||||||
+1000 Винаги е за предпочитане да бориш причините, отколкото следствията. |
||||||||||
| Автор: | itso.t [ Чет Апр 09, 2020 8:40 pm ] |
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! |
Като идея за кръпка - наслагай по кабелите от разглобяемите феритни сърцевини. https://www.google.bg/search?q=ferrite+ ... 0%BD%D0%B5 Ако имаш възможност, раздели галванично уарта. |
|
| Автор: | syscop [ Чет Апр 09, 2020 9:38 pm ] | |||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | |||||||||
Какви ферити на това
Дори някой от Хогуортс едва ли ще успее да помогне. |
||||||||||
| Автор: | Реконструктор [ Чет Апр 09, 2020 10:22 pm ] | |||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | |||||||||
Е, със сигурност WD е по-надежден, все пак хардуерно е вързан за RESET жицата. |
||||||||||
| Автор: | ToHu [ Пет Апр 10, 2020 12:51 am ] |
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! |
пусни вачдога, с таймер няма никаква гаранция че ще се получи може да забиеш,и никога да не изпълниш прекъсването защото няма да стигнеш до него. Ако е толкова зле че подозираш промяна на регистри няма гаранция че ще остане активно прекъсване. Кучето едва ли ще иска много повече чвтене от таймера, не знам каква ти е средата в повечето модерни и шарени среди пускането е сведено до един ред и след тов някъде викаш функция от тип wdt_reset()... |
|
| Автор: | RM [ Пет Апр 10, 2020 4:14 pm ] | ||||||||||||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | ||||||||||||||||||
Благодаря ви Ето това ми трябваше. |
|||||||||||||||||||
| Автор: | ToHu [ Пет Апр 10, 2020 4:40 pm ] |
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! |
То за тия случаи най-сигурно е външно куче, щото и вътрешното може да се нулира от смущение, или пък да му се промени някой флаг ... |
|
| Автор: | RM [ Пет Апр 10, 2020 4:56 pm ] | |||||||||
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! | |||||||||
То нещата щом опират до мен отдавна са изпуснати. Нормално машината работи така. Единия процесор казва на другия. "Ха сега пусни моторчето ... увеличи малко оборотите... ха така браво ... дръш така ... леко намали-нали сме зелени трябва да пестим енергия ... намали малко ... още малко ... дръш съвсем леки обороти ... балагодаря спри може да почиваш ... А при мен работи така " Ха пусни моторчето (Релето цъка и върти на макс) ... кво става много матрял идва ,дръш средни обороти... намали, намали .... съвсем леки обороти, че си ба мамата ... помощ спирай,спирай(релето цъка и спира мотора) ... Ба си майката едва се отървахме. Но най-вашното е че технологично няма проблем, и никой не може да се усети какво става. След малко предполагам ще се оправя с тоя WD намерих му описанието, само остав ада видя кой бит го ресетва.
|
||||||||||
| Автор: | RM [ Съб Апр 11, 2020 10:36 am ] |
| Заглавие: | Re: SystemReset() в прекъсване на таймер !!! |
То лошото никога не идва само. Точно включих IWDG - най добрия вариант, има си независим 40кHz клок , делител на 256, 12 битов регистър за обратен брояч ... Да ама не, за втори път ползвам компилатора на Микроелектроника |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|