Страница 2 из 2

Добавлено: 22 янв 2010, 12:14
vzgherea
Прочитал, всё очень доступно, спасибо. Я за 3 простые вместо 1 сложной строки кода:). Такой код понятнее и его легче отлаживать. Позже, конечно, можно будет и переписать по желанию.

Резисторы и конденсаторы, пока нету ШИМ-а, можно исключить, да?

Добавлено: 22 янв 2010, 13:42
koolhatcker
Да, конечно. Они ж на будующее:).

Добавлено: 23 янв 2010, 18:29
ShCoder
рассуждения по написанию "одной строки"

исходные данные - процедура обработки прерывания isr(void){}, которая по сигналу "Step"
должна проверить состояние линии "Dir" и при Dir=1 увеличить значение переменной
cur_step, а при Dir=0 - уменьшить(сигнал "Dir" - это (PORTB & 2) ).

итак при Dir=1 (...или (PORTB & 2)=2) cur_step=cur_step+1,
а при Dir=0 (...или (PORTB & 2)=0) cur_step=cur_step-1

заметим, что при (PORTB & 2)=2 нам нужна "+1", а при (PORTB & 2)=0 - "-1"
поэтому пишем (cur_step+(PORTB & 2)-1). Ну а теперь осталось ограничиться
размером таблицы, т.е. значением индекса от 0 до 3 (0,1,2,3) :

cur_step=(cur_step+(PORTB & 2)-1) & 3;
или так, что чуть лучше:
cur_step=(--cur_step+(PORTB & 2)) & 3;
все .... и вроде ничего непонятного тут нет :)

  Не в тему:   
Цель - заставить людей ДУМАТЬ и искать ОПТИМАЛЬНЫЕ решения (.. и не ждать ХАЛЯВЫ)

Добавлено: 23 янв 2010, 20:42
koolhatcker
или так, что чуть лучше:
И получим выигрыш в объёме кода на 3 байта в ROM, но проигрыш на 2 байта в RAM по сравнению с текстом статьи. И всё это ради того, чтобы уместить всё в одну строку, но при этом сделать листинг абсолютно нечитаемым для новичка?
Цель - заставить людей ДУМАТЬ и искать ОПТИМАЛЬНЫЕ решения
Уместить всё в одну строчку - далеко не всегда оптимальное решение. Как по быстродействию, так и по читаемости. Ещё раз напоминаю: статья - для новичков. Поэтому прошу в дальнейшем смотреть на происходящее в этой теме именно с этой позиции и критерием лучше/хуже считать в первую очередь читаемость и понимание общего алгоритма.
  Не в тему:   
P.S. Сообщения с выяснением отношений удалил. Выясняйте в личке. А тут - только по существу. Кто не поймёт - не обижайтесь :).

Добавлено: 27 янв 2010, 13:47
vzgherea
koolhatcker, а продолжение к статье http://it-en.ru/cnc/doc/1.html будет? Интересна реализация ШИМ на мк.

Добавлено: 27 янв 2010, 17:39
koolhatcker
Ну если хотите именно ШИМ, то давайте внедрим ШИМ.:)
P.S. Это ШИМ? Или не совсем?:). Попытка симуляции работы ДШИ200-2, питание 24В. Синее - опорное, зелёное - затвор ключа, красное - напряжение на датчике тока.
Изображение

Добавлено: 29 янв 2010, 19:56
koolhatcker
Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html

Добавлено: 30 янв 2010, 15:55
koolhatcker
И опять все молчат...
Ждут 3-й части с полушагом и режимом удержания, т.е. исходников для готового драйвера под полушаг?:). Чую зря я тут распинаюсь...

Добавлено: 30 янв 2010, 21:00
Artem
koolhatcker писал(а):Чую зря я тут распинаюсь...
:no: Нет, не зря!!! Вы же описываете алгоритм, а как и к чему его применить каждый решит сам для себя. :ok:

Добавлено: 30 янв 2010, 21:53
vzgherea
koolhatcker писал(а):Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html
Всё очень доступно изложенно :trumbsup: Спасибо! Думал всё намного сложнее :)

Есть пара вопросов:
1. Когда (периодически или после какого-либо события) приходят прерывания с компараторов?
2. Зачем использовать ножку МК для формирования опорного напряжения? Источник питания МК не годится?

Добавлено: 30 янв 2010, 22:22
koolhatcker
1. Когда (периодически или после какого-либо события) приходят прерывания с компараторов?
Это подробно описано в документации на МК:).
При изменении уровня сигнала на выходе любого компаратора устанавливается флаг прерывания от компараторов CMIF. Далее в подпрограмме обработки прерываний пользователь может проверить флаги C1OUT и C2OUT и выяснить какой именно компаратор вызвал прерывание. В рассмотренном случае как только напряжение с датчика тока превысит опорное, то тут же (типовое время задержки 150nS) будет установлен флаг CMIF и возникнет прерывание.
Зачем использовать ножку МК для формирования опорного напряжения? Источник питания МК не годится?
Источник питания МК вполне годится. Обратите внимание на схему - эта ножка МК является выходом имеющего в PIC16F628 аппаратного модуля ШИМ. Поэтому если в дальнейшем в драйвер захочется ввести режим снижения тока двигателя при простое, то на эту ножку можно выдавать например не уровень лог.1, а ШИМ сигнал со скважностью 50%, что позволит снизить ток в режиме удержания:).

Добавлено: 30 янв 2010, 22:50
Dj_smart
koolhatcker, если я в твоём первом описании таблицу шагов тупо заменяю на полушаг, и указываю что элементов таблицы стало 8, будет работать?
И там есть вот такое:
PORTB = 0x00; //Выводим в порт В нули
TRISB = 0x03; //Весь порт В кроме 2-х младших разрядов - на вывод
Строки не надо поменять местами? А то(на мой взгляд) сначала выводим данные в порт, а потом производим его настройку(ввод или вывод).

Добавлено: 30 янв 2010, 23:19
koolhatcker

Код: Выделить всё

указываю что элементов таблицы стало 8, будет работать? 
Нет. Нужно ещё там где указатель меняется при приходе импульса STEP поправить. Надеюсь не в реальном железе решил проверять? Сгорит скорее всего:).
Строки не надо поменять местами?
Надо. Сначала - направление, потом - значение.

Добавлено: 30 янв 2010, 23:30
Dj_smart
Сгорит скорее всего
Да нивжизнь:). Униполяр, хоть все полевики сразу открой... По крайняку не вижу причины гореть:)
там где указатель меняется
Ага, прошляпил. И больше причин нет, так? И тогда вполне естественно добавить опрос ноги, типа "выбор режима - шаг/полушаг". Я так понимаю,это надо всунуть в программу в самом начале, после настроек портов?
Ага, так это надо и какие-то указатели на таблицы, и... Короче недорос:). Пока:).

Добавлено: 30 янв 2010, 23:57
koolhatcker
По крайняку не вижу причины гореть
Ну попробуй:).
И больше причин нет, так?
На первый взгляд вроде как нет(при абсолютной идентичности обмоток). Пробовать нужно, чтобы точно сказать.
"выбор режима - шаг/полушаг"
Мужики, только честно, кто-нибудь полным шагом пользуется?:) Мало того что на нём из-за резонанса движок не разогнать, так ещё и звук не тот :).

Добавлено: 31 янв 2010, 00:23
Dj_smart
кто-нибудь полным шагом пользуется?
Ради прикола попробовал...Раньше не использовал, и впредь не собираюсь:). Во гремит-то! Тем более что по Х осталось монолитное соединение винта и движка. С муфтой вроде помягче, но даже не сравнитиь:(.

Добавлено: 04 фев 2010, 14:30
vzgherea
life писал(а):...Самое простое что приходит на ум, так это перезапускать степом таймер, при отсутствии степ таймер переполняется и по прерыванию уходим на удержание...
Через какой промежуток времени, при отсутствии STEP сигнала, ШД переводят в режим ожидания?
Какой % от номинального тока рекомендуется пропускать при удержании?

Или это всё индивидуально?

Добавлено: 04 фев 2010, 15:17
koolhatcker
Через какой промежуток времени, при отсутствии STEP сигнала, ШД переводят в режим ожидания?
Через промежуток времени превышающий минимальную частоту сигнала Step.
Какой % от номинального тока рекомендуется пропускать при удержании?
Ток удержания должен быть таким, чтобы вал двигателя надёжно фиксировался.
  Не в тему:   А вобще эти вопросы никакого отношения к программированию не имеют, поэтому завязываем с офтопиком. Подобные вопросы впредь прошу задавать в соответствующих темах форума.

Добавлено: 08 фев 2010, 20:04
Pyku_He_oTTyda
Приветствую всех!
Вероятно, уже пролетала эта ссылка
www.chipenable.ru
если нет, то очень рекомендую! Более лучшего изложения я не встречал в сети.

Добавлено: 27 мар 2010, 12:12
ra59m
Dj_smart писал(а):Вот тут Скачать файл "prog_avr_pic.rar"(9.1 мб)
А по диску... Смотри оглавление в книге, и что интересует выложу.
Классный учебник -спасибо !!!

Добавлено: 30 мар 2010, 20:19
koolhatcker
Ну вот и свершилась проверка теории на практике.
Вроде даже работает.:)
http://it-en.ru/cnc/driver/Simple%20driver%20628.html
Для обсуждения вопросов работы данного устройства создал тему тут: http://www.cncmasterkit.ru/modules.php? ... 0053#10053

Re: Уроки на Си.

Добавлено: 28 окт 2012, 12:35
neyvert
спасибо! изучил, все вроде понятно почему контроль степа делаем по спадающему фронту? а так же хотелось продолжения хотябы в виде теории по быстрому, медленному, смешанному спаду токов! когда и в какие моменты лучше ими пользоватся? до какого уровня можно поднять частоту ШИМ?
Если частота ШИМ 20кгц это получается 50мкс, если сигнал степ превышает это значение тогда будет пропуск шагов?
Спасибо за статью.

Re: Уроки на Си.

Добавлено: 28 окт 2012, 13:52
koolhatcker
neyvert писал(а):почему контроль степа делаем по спадающему фронту?
Потому, что вход Step подтянут к +5В и активный уровень для него - низкий.
neyvert писал(а):теории по быстрому, медленному, смешанному спаду токов!
К данному "железу" это неприменимо. Рекомендую ознакомиться с документацией на интегральные микрошаговые драйверы - там всё это расписано.
neyvert писал(а):до какого уровня можно поднять частоту ШИМ?
Насколько позволит МК при данной тактовой.
neyvert писал(а):если сигнал степ превышает это значение тогда будет пропуск шагов?
Нет, пропуска не будет. Время обработки изменения уровня на входе Step около 5uS. Частота ШИМ с частотой Step связана косвенно, а не непосредственно :).

Re: Уроки на Си.

Добавлено: 28 окт 2012, 14:21
neyvert
ОК! Спасибо за разьяснения.

Re:

Добавлено: 05 июл 2016, 16:05
Baykonur
koolhatcker писал(а):Выложил пока сюда: http://it-en.ru/cnc/doc/1.html
koolhatcker писал(а):Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html
Ссылки не рабочие. Материал, наверно давно пропал? Интересно было бы почитать !

Re: Уроки на Си.

Добавлено: 26 сен 2016, 07:48
alecsey
Baykonur писал(а):koolhatcker писал(а):
Выложил пока сюда: http://it-en.ru/cnc/doc/1.html
koolhatcker писал(а):
Ну раз все молчат, то вот вам пища для разговоров...
http://it-en.ru/cnc/doc/2.html
Можно как то попросить материал или перезалить куда нибудь? Хотел на зиму занятие себе организовать)))
  Не в тему:   в добавок к аэрографу :crazy:

Re: Уроки на Си.

Добавлено: 27 сен 2016, 20:42
BMB
В 9-м радио драйвер ШД на меге48, есть исходники на асме с коментами, на зиму должно хватить)))

Re: Уроки на Си.

Добавлено: 28 сен 2016, 07:28
alecsey
:company: спасибо! :)

Re: Уроки на Си.

Добавлено: 29 окт 2016, 12:43
Baykonur
BMB писал(а):В 9-м радио драйвер ШД на меге48, есть исходники на асме с коментами, на зиму должно хватить)))
Спасибо, конечно! Но тема всё таки "Уроки на Си" На Сях попроще маленько, тут проблемы возникают при настройке периферии, и хотелось бы видеть примеры программирования шагового со стабилизацией тока - в 1, 1/2, микрошаге. К асму всё равно потом подходить придётся, на нём всё чётче, конечно, но потом...
Пока нарыл книгу Программирование на языке C для AVRи PIC микроконтроллеров Ю.А.Шпак 2011-600M и полезный сайтик - easyelectronics.
Сам пока подсел на Атмегу.