roboforum.ru

Технический форум по робототехнике.

разгон и торможение ШД

разгон и торможение ШД

wolly » 10 ноя 2007, 01:26

:RTFM: Где-то тут в форуме, видел фразу о таблицах разгона и торможения ШД, второй раз уже найти это место не смог.. не суть дело, а вот в чем:
я планирую изменять скорость в ходе работы ШД программно, т.е. изменением стартового числа в регистре TCNTх таймера ATmega128 и вдруг читаю ... :shock: таблицы разгона и торможения!!! Век живи, век учись.
Подскажите пожалуйста про них.

PS при перезаписи TCNTх необходимо ли запрещать прерывания???

Re: разгон и торможение ШД

Master » 10 ноя 2007, 17:23

Ни и что с разгоном и торможением не ясно? Таблиц универсальных кажется нету нуна смотреть характеристики определенного ШД.

Re: разгон и торможение ШД

avr123.nm.ru » 10 ноя 2007, 19:22

wolly писал(а):таблицы разгона и торможения!!! Век живи, век учись.
Подскажите пожалуйста про них.


В апноуте AN155 на http://kurs8051.narod.ru
есть управление ШД с разгоном и торможением.

Re: разгон и торможение ШД

wolly » 10 ноя 2007, 19:44

Master писал(а):Ни и что с разгоном и торможением не ясно? Таблиц универсальных кажется нету нуна смотреть характеристики определенного ШД.

Что не ясно... ну, по порядку:
1. При занесении новых значений в регистры TCNTх необходимо ли запрещать прерывания???
2. TIM1 имеет два 8bit регистра TCNT1H TCNT1L, стартовое число в TIM1 16bit-ное. Изменять скорость скачком я думаю не корректно, движок будет дергаться да и драйвер будет от этого не в восторге. Возникла идея менять скорость нарастанием, по шагам. С каждым шагом частота прерываний увеличивается/уменьшается до необходимой.
Код этой функции еще не полностью готов - вымучиваю :durak: Я с С только только начал знакомится.
Выкладываю черновик:
Код: Выделить всёРазвернуть
void speed_change (void){
int REG;                            //REGistr startovogo 4isla
#asm("cli")                   
   if(TCNT1H!=0x6F && TCNT1L!=0xFE){//esli skorost menee 100Hz
REG = (int)TCNT1H<<8;   //zapolnenie 8-16 bitov REG
REG |= (int)TCNT1L;   //zapolnenie 0-7 bitov REG
REG = REG + 0x6C0;   //uveli4enie skorosti "Y" 10-100Hz za ~12 shagov
TCNT1L = REG;            //vybor dannyh 0-7 bita iz REG dlja TCNT1L
REG=REG>>8;      //zdvig bitov v REG s 8-12 na 0-7
TCNT1H=REG;      //vybor bitov 0-7 dlja TCNT1H
//ustanovit 4astotu srabatyvanija TIM1 (skorost' dvizhenija po Y)             
#asm("sei")
}

Сомнение вызывают строки с 3 по 12 :D
3. Как по грамотному должно выглядеть условие переключения по переднему/заднему фронту взведенного/сброшенного бита?
if( :?: ) while( :?: )
Предпологаю что где-то необходимо организовать виртуальный регистр выставленных битов, и каждое изменение бита сравнивать с его (регистра) содержанием. :idea:

Re: разгон и торможение ШД

avr123.nm.ru » 10 ноя 2007, 19:51

wolly писал(а):1. При занесении новых значений в регистры TCNTх необходимо ли запрещать прерывания???


При записи двухбайтовые регистры ИМХО лучше запрещать прерывания.

Re: разгон и торможение ШД

wolly » 10 ноя 2007, 19:59

Спасибо теб AVRcourse, но вопрос №2 все-таки важнее :!:

Re: разгон и торможение ШД

avr123.nm.ru » 10 ноя 2007, 20:09

wolly писал(а):Спасибо теб AVRcourse, но вопрос №2 все-таки важнее :!:


Строка странная
Код: Выделить всёРазвернуть
if (TCNT1H!=0x6F && TCNT1L!=0xFE) { //esli skorost menee 100Hz

Может этого хватит ?
Код: Выделить всёРазвернуть
if (TCNT1H < 0x6F) { //esli skorost menee 100Hz


Советую исходники и текст апноута почитать !

Re: разгон и торможение ШД

wolly » 10 ноя 2007, 20:58

avr123.nm.ru писал(а):Строка странная (TCNT1H!=0x6F && TCNT1L!=0xFE)
Может этого хватит ? if (TCNT1H < 0x6F)

Ошибся в написании, должно быть (TCNT1H!=0xF6 && TCNT1L!=0xFE)
Если же брать, как условие, только верхний регистр TCNT1H < 0xF6 (вероятно предполагается, что TCNT1L==0х00), то итоговая частота шага составит 90Гц :cry: , а препологалось 100Гц.
Последний раз редактировалось wolly 11 ноя 2007, 13:40, всего редактировалось 1 раз.

Re: разгон и торможение ШД

avr123.nm.ru » 10 ноя 2007, 21:20

wolly писал(а): а препологалось 100Гц.


Дак пересчитай.

Re: разгон и торможение ШД

wolly » 11 ноя 2007, 13:58

avr123.nm.ru писал(а):Дак пересчитай.

Как вариант упрощения задачи, конечно можно пожертвовать точностью и выкинуть нафиг упоминания о нижнем регистре стартового слова. В условии if() проверять содержание только верхнего регистра TCNT1H.
Ну, а как в будущем потребуется большая точность?!
Годится ли подобный вариант (двухрегистровый)сравнения и перезаписи стартового числа?

Re: разгон и торможение ШД

wolly » 26 ноя 2007, 00:52

avr123.nm.ru писал(а):При записи двухбайтовые регистры ИМХО лучше запрещать прерывания

Как оказалось, если для изменения (например поэтапного) содержимого этих регистров TCNTnH TCNTnL использовать буферные переменные, то можно и не запрещать прерывания. Ведь не запрещаются же они, при реинициализации во время программы обработки прерываний. Во... :good:


cron
Rambler\'s Top100 Mail.ru counter