avr123.nm.ru писал(а): Вашим моторчиком можно плавно управлять как раз так как вы читали в задаче 8 - http://avr123.nm.ru/z8.htm
Скажите пожалуйста, в чем конкретно заключается это плавное управление моторчиком? В том, что он будет медленно поворачиваться? Или в том что он просто не будет работать на полную мощность от общей цепи питания и не сгорит?
драйвер мотора выше это двойной полный мост управляется два входа для управления направлением и один включение. 1-0 или 0-1 на управлении переключает мост в одну или другую сторону, включение 1 включено 0 выключено. соответственно процент времени когда на этом входе будет будет соотвествовать проценту максимальной мощьности подаваемой ена двигатель. если этот вход не подключить то что произойдет читать в спеке на девайс - кручение с отключеным выводом говорит об одном из 1) чтото шумит 2) вывод с пассивной 1(пока никуда не подключен считается что 1) 3) некорректно чтото спаял
у меня этот девайс работает замечательно, единственное с чем пришлось повозиться - на стораз перечитать даташит чтобы увидеть что вывод индикатора тока двигателдя нада подключить к общему через низкоомный мощьный резистор( или накоротко если не бояться перегрузок и отказаться от измерения тока на нагрузке) если есть необходимость могу дать схемку как он у меня подключен к авр-ке.
ой извиняюсь у меня L298 но сути не меняет - у меня там два полных моста у тебя 4ре половинки)))) отличие только в том что у 298 есть вывод чтоб снимать значение тока нагрузки
Вы говорите что моторчиком можно плавно управлять. Т.е вы хотите сказать что можно сделать так что бы колеса машинки не резко в право влево, а медленно поворачивались? Если так, то скажите пожалуйста, какая примерно нужна для этого величина ШИМ, или же нужно что бы величина ШИМ менялась? Т.е возможно при старте чтоб сдвинуть мотор с места нужно ШИМ 100%, а потом резко уменьшить допустим до 20% что бы колеса медленно крутились?
Если речь идёт о механизме поворота колёс - тут не нужен большой пусковой момент, следовательно, можно подавать минимальный процент ШИМа, при котором механизм поворачивает колёса. Этот процент лучше экспериментально найти. ТО есть менять ШИМ и смотреть, хватает напряжения мотору или нет. Если же речь идёт о ходовом приводе, то тут во время старта можно сделать рывок, для преодолевания сил сопротивления. А потом переходить в штатный режим скорости.
всем вышеописанным занимается регулятор тока в нормальной системе управления приводом..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Для плавности нужно постепенно увеличивать активную фазу ШИМа, удобнее будет сделать 2 внешние кнопки к контроллеру и ими изменять параметры ШИМа. Мост можно сделать на микросхемах, можно спаять на транзисторах как здесь http://rate.bget.ru/ страничка H-bridge.
Понадобилось управлять одной сервой с помощью 8-битного таймера. Аппаратный ШИМ дает слишком маленькое разрешение, два таймера использовать жирно. Поэтому я применил способ (основанный на методе 3, описанном тут в местной wike), использующий переконфигурирование таймера в каждом прерывании. В этом случае надо всего два прерывания на период управления - одно начинает управляющий импульс, другое его заканчивает. При кварце 14.7456Мгц разрешение получилось примерно 8,68мкс, диапазон ширины управляющего импульса - чуть шире 800-2200мкс. Среднее положение соответствует числу 172 в регистре OCR2, изменение на 1 соответствует примерно изменению ширины импульса на 8,68мкс. Привожу код для ATMega16a, может кому пригодится. Управление сервоприводом с помощью 8-битного таймера. Только нужная часть кода.
... //global variables uint8_t servo_position;//содержит текущее положение сервопривода, просто запишите в него нужное значение ... //начальная инициализация void init(){ ... sei(); servo_position=172; //сервопривод в среднее положение DDRD|=1<<servo_pwm; //пин OC2 на выход OCR2=0xFF; //пин OC2 Timer2 автоматически установится, когда таймер досчитает до OCR2=255 TIMSK|=1<<TOIE2; // активируем прерывание Timer2 overflow TCCR2=0b00110111; // ck/1024, normal mode, set OC2 on compare /*первым наступит прерывание Timer2 overflow, при этом пин OC2 автоматически установится потому что в настройках таймера задана "установка OC2 при равенстве TCNT2=OCR2=255", вручную устанавливать не надо.*/ ... } ...
//ПРЕРЫВАНИЯ
//=================Timer2 overwlow interrupt================ ISR(TIMER2_OVF_vect){ TCCR2=0b00100101; // предделитель ck/128, normal mode, clear OC2 on compare // при F_CPU=14.7456Мгц один тик таймера 8,6784мкс OCR2=servo_position; //задаем ширину управляющего импульса TCNT2=0; TIFR|=1<<OCF2; //сбрасываем флаг OCF2, флаг TOV2 сбросится при выходе из прерывания TIMSK|=1<<OCIE2; // активируем прерывание Timer2 compare TIMSK&=~(1<<TOIE2); // дизактивируем прерывание Timer2 overflow }
//=================Timer2 compare match interrupt================ ISR(TIMER2_COMP_vect){ TCCR2=0b00110111; // предделитель ck/1024, normal mode, set OC2 on compare OCR2=0xFF; //счет до 255 даст задержку ~17мс TCNT2=0; TIFR|=1<<TOV2; //сбрасываем флаг TOV2, флаг OCF2 сбросится при выходе из прерывания TIMSK|=1<<TOIE2; // активируем прерывание Timer2 overflow TIMSK&=~(1<<OCIE2); // дизактивируем прерывание Timer2 compare } ...