roboforum.ru

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

 

ШИМ - PWM Аппаратная генерация - новая задача к курсу

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сообщение avr123.nm.ru » 06 май 2006, 00:20

avr123.nm.ru писал(а):дополнил задачу рассказом о том как мастером начального кода сконфигурировать таймер для генерации PWM.

Сделал вывод 2-х аппаратных ШИМ.


интересный скриншот симуляции 2 аппаратных ШИМ в МК ATmega16 к Задаче 8 курса
Последний раз редактировалось avr123.nm.ru 10 июн 2006, 18:33, всего редактировалось 1 раз.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 10 июн 2006, 18:21

плавно ШИМ-ом управлять нагрузкой подключеной к переменному току (моторы, эл. инструменты) можно двумя полевыми транзисторами -например IRF840 (любые MOSFET на напряжение более 400 вольт и ток в 3-5 раз более максимального)

вот картинка

http://forum.roboclub.ru/IPBoard/index. ... ost&id=272

быстро набросал схему и померил "ее" параметры - удобно и просто !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение KiCom » 11 июл 2006, 15:26

Как установить нужную мне частоту ШИМ?
Явно какуе-то роль играют эти регистры

TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;

Кусок из задачи 8.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 11 июл 2006, 15:52

внимательно почитайте задачу 8 .  

там и картинка есть.

http://avr123.nm.ru/z8/z8_120.png
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение KiCom » 11 июл 2006, 15:56

Открываем Clock value и там 5 различных частот, но как если я хочу например 50 гц для управления сервой при моем кварце 14.7456 миниму что я могу выбрать примерно 14 кГц
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 11 июл 2006, 17:19

для управления серво не нужен ШИМ хотя сигнал и похож на него.

Вам нужно 50 раз в секунду генерировать импульс управления длительностью от 800 до 2200 мкС

Как прерываться 50 раз в секунду есть в задаче 6.  Добавьте код выдающий нужный импульс и все.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение KiCom » 11 июл 2006, 17:25

Почему тут ШИМ не подойдет? Если частота у него будет 50 Гц то все будет нормально. Как реализовать это программно я знаю и не хочу этого делать т.к. это останавливает МК на 1/10 что вообщем то нехорошо для моей задачи. Вопрос в том можно ли сделать ШИМ нудной мне частоты а именно 50 Гц.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 11 июл 2006, 17:53

а я не програмно а железно предложил.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение KiCom » 11 июл 2006, 18:33

Код программы будет выглядеть примерно так:
Код: Выделить всёРазвернуть
  прерывание_таймер_0   \\ 50 раз в секунду
{
PORTB.0=1;
delay(x); \\ ждем сколько нужно
PORTB.0=0;
}

Если так то получеам что МК через каждые 20 мс останавливаеться на от 1 до 2 мс, тоесть примерно на 1/10 своего рабочего времени.
Я спрашиваю еще раз как сделать частоту ШИМ 50 гц ??? Или это вообще не возможно? Если это невозможно, кто-то говорил что для управление сервы необходим ШИМ частотой 50 гц, или он обманывал?
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 11 июл 2006, 19:06

Изобретать велосипед это правильно и полезно в образовательных целях.

Но почитайте на форуме топики по управлению сервами и возьмите примеры кода по опубликованым мной и другими участниками ссылкам.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 11 июл 2006, 19:08

KiCom писал(а):Я спрашиваю еще раз как сделать частоту ШИМ 50 гц ?


увеличить битность ШИМа  выбрать нужный коэф деления, если не поможет то снижать частоту кварца.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение KiCom » 12 июл 2006, 12:09

Из нашего разговора я так ничего и не понял. По форму я уже искал но к сожалению ничего не нашел. Как установить нужную мне частоту я так и непонял менять битность и делители можно, но толку это не дает, частоту кварца менять я не буду т.к. на это частоте слишком много чего завязано. Сижу читаю про режимы работы ШИМа на mega128 (т.к. русский) но понять что либо очень сложно.
KiCom
 
Сообщения: 345
Зарегистрирован: 22 окт 2005, 11:15
Откуда: Красноярск

Сообщение avr123.nm.ru » 03 авг 2006, 15:41

Вот что идеально пожалуй для верхних ключей силовых H-мостов

http://www.semiconductors.philips.com/p ... 0-50Y.html

http://www.semiconductors.philips.com/p ... 2-50Y.html

1) Работают напрямую от выхода CMOS логики относительно земли !
2) Имеют всякую защиту и диагностический вывод.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение phase » 26 июн 2007, 17:01

Я долго читал задачу и что то никак не пойму ход этой мысли...
Код: Выделить всёРазвернуть
 
TCCR1B = 0x00; //stop Timer

TCNT1H = 0xFC; //setup
TCNT1L = 0x01;

//  +++++++++++++++++++++++++++++++++++++
OCR1AH = 0x03; // PWM(PD5) = OCR1A / 10.23  (%)
OCR1AL = 0xFF;
//  +++++++++++++++++++++++++++++++++++++

OCR1BH = 0x03;
OCR1BL = 0xFF;

ICR1H  = 0x03;
ICR1L  = 0xFF;  

TCCR1A = 0x83;

TCCR1B = 0x09; //start Timer

в этом коде меня смущает
TCCR1B = 0x00; //stop Timer
...а потом...
TCCR1B = 0x09; //start Timer
зачем его стопать ?
в случаее TCCR1B = 0x00=0000 0000b; ну уж никак не будет fast PWM 10bit... тк. WGM13=0; WGM12=0!!!
TCCR1B = 0x09=0000 1001b; тут уже эти биты стоят как надо, типо проверили по таблице 47 режим 7.PWM 10bit.
или это "правильный" способ запуска таймера ?
WBR
phase
 
Сообщения: 2
Зарегистрирован: 26 июн 2007, 16:47
Откуда: Ukraine

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Mail.ru counter