| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| cnc http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6457 |
Страница 1 от 1 |
| Автор: | spas92 [ Сря Яну 14, 2009 5:43 pm ] | |||||||||
| Заглавие: | cnc | |||||||||
zd през лятото бях решил да направя една малка cnc фреза преди години с баща ми направихме една но тя работи по съвсем различен начин скоро започнах да се занимавам с микроконтролери и реших да си направя драйвер за стъпков двигател с pic16f84a написах програмата тествах я на протеус - всичко е ОК но като я пробвах на един контролер изкочи проблем // за драйвер на CNC се ползват 2 пина - един за стъпка един за обръщане като дам "1" на пина за стъпка се забавя 5-6 сек и тогава продължава вече не знам от какво може да се получи това......... това ми е програмата ако има забележки кажете
EDIT: sory че не написах коментарчетата забравих ги |
||||||||||
| Автор: | ¶ [ Сря Яну 14, 2009 5:56 pm ] |
| Заглавие: | |
Ми то хубаво, ама от програмата ти не става ясно кой пин за какво |
|
| Автор: | setoy [ Сря Яну 14, 2009 6:42 pm ] |
| Заглавие: | |
Аз нищо не разбрах, за другите не знам как е |
|
| Автор: | spas92 [ Сря Яну 14, 2009 9:29 pm ] |
| Заглавие: | |
всичко опира до това зада се заравти двигателя на порт В се подава това: 01000000 00100000 00010000 00001000 01000000 00100000 00010000 00001000 и тн. при подаване на команда за стъпка проверява дали има 1 или 0 на пина за реверс - обръщане ако няма от 01000000 ще стане 00100000 ако няма от 01000000 ще стане 00001000 |
|
| Автор: | ¶ [ Сря Яну 14, 2009 10:09 pm ] |
| Заглавие: | |
С какво подаваш сигнал на тези пинове ? Генератор, бутони, с жички ? Ако нямаш стъпка ( v = 0 ) къде ти е кода с който спираш двигателя, няма ли да го повредиш така оставяйки го под напрежение ? Тия функции input кой бит четат или цял порт наведнъж четат ? Вместо 42 и 43 като входни параметри напиши нещо по-разбираемо, примерно #define PORTA нещо си, след това v = input( PORTA + bit_offset ); С една дума, не е добра практика да подаваш като входни параметри на функции някакви числа, по-добре дефинирай с константа параметъра, защото когато пишеш програмата ако объркаш името на константата компилатора ще се обади, но ако сбъркаш числото ще си трае. |
|
| Автор: | spas92 [ Чет Яну 15, 2009 12:42 am ] | |||||||||
| Заглавие: | ||||||||||
на пиновете подавам "+" с едно съпротивление от 1кОм за да огранича тока колкото до това че двигателя е постоянно "под напрежение" ми това си е стъпков двигател това му е нормалният режим на работа колкото до числата то те са си дифинирани още в 16F84A.h
друг е проблема че като дам "1" на пина пик-а зацикля и чак след 5-6 сек реагира |
||||||||||
| Автор: | ji4ka [ Чет Яну 15, 2009 1:03 am ] |
| Заглавие: | |
Ти симулатор нямаш ли си? |
|
| Автор: | ¶ [ Чет Яну 15, 2009 1:14 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Не съм съгласен с тебе Проблема с числата е точно обратен на стила на писане, който ти си си харесал А пиновете ( входните ) дефинирал ли си им отвън хардуерно нивата ? Ти подаваш +, а какво става, когато не подаваш този +, пина виси във въздуха или си има резистор, с който си го подпрял към земя ? |
|||||||||||||||||||
| Автор: | optron [ Чет Яну 15, 2009 11:47 am ] |
| Заглавие: | |
Тъй ... Аз предлагам по-лесен начин да си направиш драйвера: Един регистър, който зареждаш със стойност 10001000. Като постъпи фронт на пина за стъпка, правиш проверка на състоянието на пина за обръщане и според неговото състояние правиш побитово завъртане на този регистър наляво или надясно. След това побитово пренасяш десните четири или левите четири бита към изходния порт. Хубавото тук е, че лесно можеш да преобразуваш от пълностъпково към полустъпково управление - тогава зареждаш регистъра със стойност 00000111 и пренасяш всеки нечетен бит към изходния порт. Съветвам да добавиш някакъв таймер, който да се нулира при всяко постъпване на импулс за стъпка и когато изтече да изключва тока към двигателя, защото така направен драйвер ако го използваш за някой по-мощен двигател, ще получиш фурна. Аз примерно го настройвам на около половин секунда. |
|
| Автор: | Zeus [ Чет Яну 15, 2009 2:24 pm ] |
| Заглавие: | |
if(v==1&&t==1) Абе знам, че операциите си имат приоритет на изпълнение, но аз съм свикнал всичко да си заграждам със скоби за по- сигурно if((v==1)&&(t==1)) Това е просто едно мое мнение |
|
| Автор: | setoy [ Чет Яну 15, 2009 3:26 pm ] |
| Заглавие: | |
Виж си нивата на пиновете... дали са такива, каквито очакваш |
|
| Автор: | spas92 [ Чет Яну 15, 2009 5:40 pm ] | |||||||||
| Заглавие: | ||||||||||
мн благодаря на вс който помогнаха накрая го накарах да работи както трябва ето това е краиният код //следи кога на пина се появява 0
|
||||||||||
| Автор: | setoy [ Пет Яну 16, 2009 2:36 pm ] |
| Заглавие: | |
...v = input (42) Оправи ги тези глупости. Затова са ти ги дали тези дефиниции, за да ги ползваш. input (PIN_A0) е нещо далеч по-разбираемо и преносимо. Представи си, че четеш същия този код след години... има да се чудиш кое какво е и защо е така. Или си представи че прехвърляш същия този код за друг процесор или компилатор... и същия този код е набъбнал до няколко хиляди реда |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|