Форум myROBOT.ru » Роботы и робототехника » Обо всем » ШИМ на Атмега8

Страниц (2): [1] 2 »
 

1. beam - 15 Августа, 2010 - 17:19:57 - перейти к сообщению
Всем привет...покажите на скрине где на меге8 выводы ШИМ...это oc1a,oc1b ?заранее спасибо,ах да еще вопрос могу ли я подсоеденить один канал шим к плюсу,или даже к плюсам(их четыре вроде там) драйвера двигателей L293D,и регулировать скорость двигателей таким образом?
2. nest - 15 Августа, 2010 - 17:53:00 - перейти к сообщению
для ШИМ у L293D есть специальные ноги ENA1 или ENA2
3. beam - 15 Августа, 2010 - 18:22:02 - перейти к сообщению
njtcnm Enable1 и Enable2 да?...а у атмеги8 ШИМ где,какие выводы?
4. nest - 15 Августа, 2010 - 19:44:46 - перейти к сообщению
beam, а что за код для ШИМ вы будете использовать?
5. beam - 15 Августа, 2010 - 20:08:33 - перейти к сообщению
покашто только кусок кода есть,как допишу,покажу,на проверку=),так што с мегой,какие выводы ШИМ?
6. mihail - 15 Августа, 2010 - 22:05:18 - перейти к сообщению
ATmega8
PWM (ШИМ)
Timer1 - PB1, PB2
Timer2 - PB3

Подробно режимы ШИМ описаны в datasheet в разделах посвященных таймерам/счетчикам.
7. beam - 15 Августа, 2010 - 23:46:59 - перейти к сообщению
Значит если я подключу выходы PB1 и PB2 к входам Enable в драйвере двигателей L293D или наверно можно просто дать один сигнал ШИМ на ЕНЭЙБЛ и на ПЛЮС в драйвере...таким образом я смогу управлять скоростью вращения двигателя?
8. nest - 16 Августа, 2010 - 00:01:39 - перейти к сообщению
beam, вы уже решили, какой таймер вы будете использовать для ШИМ?

когда вы используете ШИМ, то у нас не будет ножек PB1, PB2 или PB3. У вас будут ножки OC1A, OC1B или OC2. На этих трёх ножках можно сделать ШИМ. То есть имеется три канала ШИМ.

один канал можно использовать для управления скоростью одного двигателя.

Посмотрите на структурную схему L293:



Нога ENA1 "отвечает" за ШИМ на выходах OUT1 и OUT2,
Нога ENA2 "отвечает" за ШИМ на выходах OUT3 и OUT4.

Вот как у вас двигатели тут подключены - так вам и нужно подавать ШИМ сигналы на L293.


Скорее всего опять не поймёте, но ... попробуйте переспросить :)
9. beam - 16 Августа, 2010 - 10:56:31 - перейти к сообщению
OC1A я подсоеденяю к ENABLE1,а OC1B к ENABLE2,
10. nest - 16 Августа, 2010 - 18:51:13 - перейти к сообщению
beam пишет:
OC1A я подсоеденяю к ENABLE1,а OC1B к ENABLE2
так можно.
11. beam - 16 Августа, 2010 - 19:37:19 - перейти к сообщению
Подробно прочитав о ШИМ я рискнул написать код,вы только не смейтесь если внем уж все неправильно=)ну вот код,

//ШИМ на Atmega8//
#include <avr/io.h>


void timer1_init(void);


int main(void)
{

timer1_init();

OCR1AL = 0xff;
OCR1BL = 0x7f;

while (1)
;
}


void timer1_init(void)
{
/
TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<PWM10);

TCCR1B = (1<<CS10);
TIMSK &= ~0x3c;
}
12. beam - 16 Августа, 2010 - 19:38:59 - перейти к сообщению
но это выдвет вот эти ошибки,я думаю что всетаки я напутал=)
(Добавление)
пользовался програмкой Code Wision
13. mihail - 17 Августа, 2010 - 00:44:47 - перейти к сообщению
На всю программу ни строчки комментария рёв в три ручья В программу не вникал.
Суть ошибки о которой говорит компилятор в том, что компилятор не знает ничего о PWM10. Вместо PWM10 можете просто указать порядковый номер бита который хотите изменить. Но, у меня такое ощущение, что это поможет не сильно Замешательство Не спешите прошивать микроконтроллер. Напишите к каждой строчке программы комментарий. Так хоть будет понятно, что Вы хотели сделать той или иной командой. Неплохо было бы почитать Ваше видение того как должна работать программа в целом (частота микроконтроллера, частота ШИМ, скважность).
14. beam - 18 Августа, 2010 - 12:18:34 - перейти к сообщению
ладно,тогда обьясните подробно как сделать ШИМ?
15. nest - 18 Августа, 2010 - 19:42:35 - перейти к сообщению
beam пишет:
как сделать ШИМ?
в соответствующем разделе даташита хорошо описано.