| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Атмега 8 PWM и сервы mg995Tower Pro
24.05.2011, 10:01
|
|
|
Частый гость
Регистрация: 02.04.2009
Сообщений: 42
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Атмега 8 PWM и сервы mg995Tower Pro
для управления mg995 Tower Pro требуется частота в 50 Гц, как смодулировать выходной сигнал с ножки контроллера частотой в 50 Гц ?? можно ли это сделать только программно с помощью выставления регистров ?? я пытался это сделать в режиме fast PWM но добился только частоты в 62 Гц ... на ней серва не работала =( подскажите решение, спасибо !
|
|
|
|
24.05.2011, 10:05
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Атмега 8 PWM и сервы mg995Tower Pro
можно изменять состояние ножки по тикам таймера в прерывании. если нужна экономия по процессам и малая длительность импульса, то можно изменятть регистр счета в прерывании.
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
24.05.2011, 16:31
|
|
|
Вид на жительство
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
|
Re: Атмега 8 PWM и сервы mg995Tower Pro
Частота большой роли не играет, длительность импульса должна быть в пределах 1-2 мс.
|
|
|
|
24.05.2011, 18:40
|
|
|
Частый гость
Регистрация: 02.04.2009
Сообщений: 42
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Атмега 8 PWM и сервы mg995Tower Pro
ну проблема решилась по другому ))
с помощью этого кода :
|
Код:
|
int main(){
// set up 2 PWM channels on PB1 and PB2 using Timer1
TCCR1A = 0; // disable all PWM on Timer1 whilst we set it up
ICR1 = 19999; // frequency is every 20ms
// Configure timer 1 for Fast PWM mode via ICR1, with no prescaling
TCCR1A = (1 ‹‹ WGM11)
TCCR1B = (1 ‹‹ WGM13) | (1‹‹WGM12) | (1 ‹‹ CS10);
// Set PB1 and PB2 as outputs
DDRB |= _BV(1) | _BV(2);
TCCR1A |= 2 ‹‹ 6; // enable PWM on port B1 in non-inverted compare mode 2
TCCR1A |= 2 ‹‹ 4; // enable PWM on port B2 in non-inverted compare mode 2
OCR1A = ICR1 * 2 /20; // 2ms pulse to left motor on PB1
OCR1B = ICR1 * 2 /20; // 2ms pulse to right motor on PB2
while(1){
// do nothing - the hardware is pumping out 2ms pulses every 20ms to the servos on PB1 and PB2
// for a differential drive robot the motors are on each side of the robot so the robot should be spinning around its midpoint
}
return 0;
} |
теперь у меня такие вопросы к знатокам кода
Объясните пожалуста 2 следующие строчки ... интуитивно я понимаю что так выставляются биты в регистрах ... но не могу понять смысл самих операций ...
TCCR1A = (1 ‹‹ WGM11)
TCCR1B = (1 ‹‹ WGM13) | (1‹‹WGM12) | (1 ‹‹ CS10);
|
|
|
|
24.05.2011, 18:52
|
|
|
Временная регистрация
Регистрация: 24.09.2010
Сообщений: 97
Сказал спасибо: 9
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: Атмега 8 PWM и сервы mg995Tower Pro
Сообщение от deeman30rus
|
TCCR1A = (1 ‹‹ WGM11)
TCCR1B = (1 ‹‹ WGM13) | (1‹‹WGM12) | (1 ‹‹ CS10);
|
| - битовое логическое ИЛИ
‹‹ - битовый сдвиг влево (в сторону старшего бита)
WGMxx, CS10 - номера битов в регистрах (нумерация с 0) определены в файле ioavr.h (точное имя зависит от компилятора) с помощью #define
Смысл операции - запись единиц в разряды регистра, соответствующие заданным номерам битов.
|
|
|
|
Сказали "Спасибо" EugenyAM
|
|
|
26.05.2011, 10:08
|
|
|
Частый гость
Регистрация: 02.04.2009
Сообщений: 42
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Атмега 8 PWM и сервы mg995Tower Pro
импульсы научился генерировать! теперь такая проблема возникла,
в while пишу следующие строчки
OCR1A = ICR1 * 3 /40;
OCR1B = ICR1 * 3 /40;
чтобы получить импульс в 1.5 мс и выставить сервы в центральное положение, но ... ! получается следующее ! если включена одна серва ... то всё работает зашибись, как только включаю 2 сразу у меня та что висит на OCR1A выворачивается в крайнее положение а вторая в центр ... в чём прикол ?? тыкал осцилографом ноги контроллера импульсы именно такие какие должны быть, менял код на
OCR1A = ICR1 * 1 /20;
OCR1B = ICR1 * 2 /20;
и снова проверял осцилографом ... импульсы выдаются разной длительности как и должно быть, а сервы совместно не рулятся так как надо !
|
|
|
|
26.05.2011, 12:37
|
|
|
Частый гость
Регистрация: 02.04.2009
Сообщений: 42
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Атмега 8 PWM и сервы mg995Tower Pro
есть солюшн )) проблема была в том что саморез на который была прикручена серва контакитровал с какой-то металической хренью внутри и в итоге получались помехи ! ... матерился долго !
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
PWM НА PIC16F877A
|
sprew |
Микроконтроллеры, АЦП, память и т.д |
13 |
11.02.2011 09:48 |
Часовой пояс GMT +4, время: 18:39.
|
|