AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
15.04.2013, 23:36
|
|
Частый гость
Регистрация: 27.03.2013
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Да, полезно. Но там про аппаратный ШИМ. А про программный нет почти. Но сам принцип описан подробно.
|
|
|
|
16.04.2013, 06:31
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,770 раз(а) в 5,896 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Сообщение от AsSoul
|
Да, полезно. Но там про аппаратный ШИМ. А про программный нет почти. Но сам принцип описан подробно.
|
Полностью "программный" ШИМ не применим, т.к. съедает все ресурсы, выполняется в главном цикле. Полностью аппаратный из-за разводки платы - тоже. Поэтому вариант аппаратно-программный. Ногами дрыгаем программно, но для этого прерывания вырабатываем "аппаратно", т.е., связь аппаратного ШИМа с дрыгаемой ногой программная. Это хорошо еще и полной свободой выбора - какой ногой пошевелить (прямо в обработчике прерывания в соответствии с направлением вращения). Посмотрите тему "прерывания" - это совсем не страшно.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
16.04.2013, 13:05
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Переделал - чем больше pwm тем быстрее
|
|
|
|
16.04.2013, 15:43
|
|
Частый гость
Регистрация: 27.03.2013
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Сообщение от oleg110592
|
Переделал - чем больше pwm тем быстрее
|
Работает!) Спасибо. Сегодня на железе проверю, что получиться.)
|
|
|
|
21.04.2013, 20:55
|
|
Частый гость
Регистрация: 27.03.2013
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
oleg110592, снова здравствуйте. Снова вернулась к программе. Можете ответить на несколько вопросов по последней программе?
Правильно ли я понимаю, что там происходит?
1) цикл прерывания interrupt [TIM0_OVF] void timer0_ovf_isr(void) -›
Мы подаем 1 на ENABLE (т.е. как бы включаем драйвер) до тех пор пока pwm_counter не станет больше pwm. А также при достижении pwm_counter значения 200 сбрасываем его в 0. (а почему такое ограничение в 200, почему не 300, 400? изначально pwm_counter у нас равен нулю?)
2) цикл while (1) -›
1 - строка 231 -устанавливаем значение ШИМ
2 - строки 233-235 - крутим двиг в одну сторону + задержка 2 сек. (т.е. я так
понимаю у нас двигатель крутится 2 секунды?)
3 - строки 237-240 - стоп - останавливаем двиг (а почему подаем единицы, а не
нули?)
4 - строки 242-244 - крутим двиг в другую сторону + задержка 2 сек.
5 - все сначала - см. пункт1
|
|
|
|
21.04.2013, 21:32
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
1) pwm_counter у нас unsigned char - 8 битная переменная - максимум 255, можно сделать unsigned int - будет максимум 65536, но тогда частота шим будет 16000000Гц/65536=244Гц - будет слышно гул в двигателе, а так у нас 16000000/200 - 80000Гц. Вообще то многовато для реальных условий - делал 20000Гц - ухо не слышит) . Число 200 от фонаря, брал из своих поделок - мне хватало 200 градаций.
2) все правильно. Стоп там, похоже не правильно - лучше значение шим сделать минимальным, подождать пока остановится, установить опять шим, затем крутить в другую сторону.
|
|
|
|
21.04.2013, 22:25
|
|
Частый гость
Регистрация: 27.03.2013
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Сообщение от oleg110592
|
1) pwm_counter у нас unsigned char - 8 битная переменная - максимум 255, можно сделать unsigned int - будет максимум 65536, но тогда частота шим будет 16000000Гц/65536=244Гц - будет слышно гул в двигателе, а так у нас 16000000/200 - 80000Гц. Вообще то многовато для реальных условий - делал 20000Гц - ухо не слышит) . Число 200 от фонаря, брал из своих поделок - мне хватало 200 градаций.
2) все правильно. Стоп там, похоже не правильно - лучше значение шим сделать минимальным, подождать пока остановится, установить опять шим, затем крутить в другую сторону.
|
1) а сам алгоритм работы я правильно поняла?)
2) т.е. поставить pwm=0?
|
|
|
|
21.04.2013, 22:31
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
1)алгоритм правильно
2)Попробуйте 0, у меня было минимум 1 - это будут очень короткие импульсы - раскрутить двигатель не смогут
|
|
|
|
21.04.2013, 22:37
|
|
Частый гость
Регистрация: 27.03.2013
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Сообщение от oleg110592
|
1)алгоритм правильно
2)Попробуйте 0, у меня было минимум 1 - это будут очень короткие импульсы - раскрутить двигатель не смогут
|
Спасибо, попробую!)
|
|
|
|
21.04.2013, 22:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,447
Сказал спасибо: 96
Сказали Спасибо 318 раз(а) в 233 сообщении(ях)
|
Re: АЦП на Атмега8 и УАРТ - помогите
Программный шим - это просто. Для этого нужен 1 аппаратный счётчик. На нём можно построить хоть сотню шимов.
PHP код:
|
char cnt_1; char wm_1;
interrupt [TIM1_COMPA] void timer1_compa_isr(void) { cnt_1++; if(cnt_1 › 99) cnt_1 = 0; if(cnt_1 ‹ pwm_1) PORTD.1 = 1; else PORTD.1 = 0; }
|
В переменную pwm_1 заносим нужную скважность (в процентах).
Частота шим будет в 100 раз ниже частоты ссрабатывания таймера.
Для точных интервалов надо использовать режим CTC таймеров (сброс при совпадении).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:30.
|
|