|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 8:13 am
|
Страница 1 от 1
|
[ 13 мнения ] |
|
| Автор |
Съобщение |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
 cnc
zd
през лятото бях решил да направя една малка cnc фреза
преди години с баща ми направихме една но тя работи по съвсем различен начин
скоро започнах да се занимавам с микроконтролери и реших да си направя драйвер за стъпков двигател с pic16f84a
написах програмата тествах я на протеус - всичко е ОК но като я пробвах на един контролер изкочи проблем
// за драйвер на CNC се ползват 2 пина - един за стъпка един за обръщане
като дам "1" на пина за стъпка се забавя 5-6 сек и тогава продължава
вече не знам от какво може да се получи това.........
това ми е програмата ако има забележки кажете
EDIT: sory че не написах коментарчетата забравих ги
Последна промяна spas92 на Сря Яну 14, 2009 7:05 pm, променена общо 1 път
|
| Сря Яну 14, 2009 5:43 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Ми то хубаво, ама от програмата ти не става ясно кой пин за какво  Сложи някой коментар, че да можем да се ориентираме. Я си представи, че това не е твоя програма и сядаш да я погледнеш, какво би разбрал ?
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Сря Яну 14, 2009 5:56 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Аз нищо не разбрах, за другите не знам как е  Ако вземеш да го напишеш по-четливо, може дори и да разбереш къде е проблема  Помисли си : този код ако го четеш няколко години по-късно....
|
| Сря Яну 14, 2009 6:42 pm |
|
 |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
всичко опира до това
зада се заравти двигателя на порт В се подава това:
01000000
00100000
00010000
00001000
01000000
00100000
00010000
00001000
и тн.
при подаване на команда за стъпка проверява дали има 1 или 0 на пина за реверс - обръщане
ако няма от 01000000 ще стане 00100000
ако няма от 01000000 ще стане 00001000
|
| Сря Яну 14, 2009 9:29 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
С какво подаваш сигнал на тези пинове ? Генератор, бутони, с жички ? Ако нямаш стъпка ( v = 0 ) къде ти е кода с който спираш двигателя, няма ли да го повредиш така оставяйки го под напрежение ? Тия функции input кой бит четат или цял порт наведнъж четат ? Вместо 42 и 43 като входни параметри напиши нещо по-разбираемо, примерно #define PORTA нещо си, след това v = input( PORTA + bit_offset ); С една дума, не е добра практика да подаваш като входни параметри на функции някакви числа, по-добре дефинирай с константа параметъра, защото когато пишеш програмата ако объркаш името на константата компилатора ще се обади, но ако сбъркаш числото ще си трае.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Сря Яну 14, 2009 10:09 pm |
|
 |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
на пиновете подавам "+" с едно съпротивление от 1кОм за да огранича тока
колкото до това че двигателя е постоянно "под напрежение" ми това си е стъпков двигател това му е нормалният режим на работа
колкото до числата то те са си дифинирани още в 16F84A.h
друг е проблема че като дам "1" на пина пик-а зацикля и чак след 5-6 сек реагира 
|
| Чет Яну 15, 2009 12:42 am |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Ти симулатор нямаш ли си?
|
| Чет Яну 15, 2009 1:03 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Не съм съгласен с тебе  , нормалния режим на работа на стъпковия двигател е да се въртят фазите ( стъпките ) или да е спрян ( 0V на всяка една фаза ), докато при теб има момент ( когато v стане равно на 0 , а преди това е било 1 ), в който момент на намотките на двигателя ще остане непрекъснато да бъде активна последната фаза ( когато за последно v е било 1 ), или старото ти s. Това няма начин да не повреди драйвера, ако не на момента, то след като прегрее драйвера  , а може първо и двигателя да повреди. Въртял съм стъпкови двигатели на печатарки, с други не съм работил, ако ти си намерил някой стъпков двигател, дето може да се остави до безкрай някоя намотка под напрежение, моля сподели опита си
Проблема с числата е точно обратен на стила на писане, който ти си си харесал  , точно поради причината, която ти изтъкнах, числата 40,41,42 и т.н. са дефинирани като PIN_A1, PIN_A2 и т.н. Това е с цел да може и други хора ( освен теб ) да могат да разберат за какво иде реч. Примерно ако компилатора не ти беше CCS и така ми дадеш програмата нищичко не бих разбрал, обаче като напишеш input( PIN_A3 ) всеки читател ще вдене, че става дума за PORTA, и то за бит 3, докато input( 43 ) нищо не значи.
А пиновете ( входните ) дефинирал ли си им отвън хардуерно нивата ? Ти подаваш +, а какво става, когато не подаваш този +, пина виси във въздуха или си има резистор, с който си го подпрял към земя ?
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Яну 15, 2009 1:14 am |
|
 |
|
optron
Ранг: Ориентиран
Регистриран на: Чет Ное 20, 2008 1:49 pm Мнения: 276 Местоположение: Бургас
|
Тъй ...
Аз предлагам по-лесен начин да си направиш драйвера:
Един регистър, който зареждаш със стойност 10001000. Като постъпи фронт на пина за стъпка, правиш проверка на състоянието на пина за обръщане и според неговото състояние правиш побитово завъртане на този регистър наляво или надясно. След това побитово пренасяш десните четири или левите четири бита към изходния порт.
Хубавото тук е, че лесно можеш да преобразуваш от пълностъпково към полустъпково управление - тогава зареждаш регистъра със стойност 00000111 и пренасяш всеки нечетен бит към изходния порт.
Съветвам да добавиш някакъв таймер, който да се нулира при всяко постъпване на импулс за стъпка и когато изтече да изключва тока към двигателя, защото така направен драйвер ако го използваш за някой по-мощен двигател, ще получиш фурна. Аз примерно го настройвам на около половин секунда.
_________________ Digitally yours: Optron
|
| Чет Яну 15, 2009 11:47 am |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
if(v==1&&t==1)
Абе знам, че операциите си имат приоритет на изпълнение, но аз съм свикнал всичко да си заграждам със скоби за по- сигурно
if((v==1)&&(t==1))
Това е просто едно мое мнение 
|
| Чет Яну 15, 2009 2:24 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Виж си нивата на пиновете... дали са такива, каквито очакваш  НЕ съм сигурен, пиновете на този PIC дали не бяха с TTL драйвери. Ако е така, трябва да подаваш 0 вместо 1
|
| Чет Яну 15, 2009 3:26 pm |
|
 |
|
spas92
Ранг: Минаващ
Регистриран на: Пон Дек 08, 2008 11:37 pm Мнения: 59
|
мн благодаря на вс който помогнаха
накрая го накарах да работи както трябва
ето това е краиният код
//следи кога на пина се появява 0
Последна промяна spas92 на Съб Яну 17, 2009 4:24 pm, променена общо 1 път
|
| Чет Яну 15, 2009 5:40 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
...v = input (42)
Оправи ги тези глупости. Затова са ти ги дали тези дефиниции, за да ги ползваш. input (PIN_A0) е нещо далеч по-разбираемо и преносимо. Представи си, че четеш същия този код след години... има да се чудиш кое какво е и защо е така. Или си представи че прехвърляш същия този код за друг процесор или компилатор... и същия този код е набъбнал до няколко хиляди реда  Създавай си полезни навици отсега, докато е време
|
| Пет Яну 16, 2009 2:36 pm |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|