| Автор | Сообщение |
stepmotor Новичок Сообщения: 6
|
Подскажите как на ATiny13 в CodeVisionAVR можно реализовать ШИМ на ножке PB0 так чтобы можно было его регулировать подстроечным резистором в периоде от 20 до 100 кГц..
Добавлено 24-08-2008 10:58
Собственно схема .. софт не получается пока реализовать.. я начинающий пока сильно не разбираюсь.. спасибо.

|
|
Vasil_ Забанен  Сообщения: 203
|
А какой смысл в применении микроконтроллера для решения этой задачи? Вполне можно обойтись одним операционником, тем более, плавной перестройки по частоте не получится.
Добавлено 24-08-2008 18:59
Прям токошо на одном из форумов по данной тематике завесили ссылку:
http://www.tfelectronics.com.au/software/PWMcalc.exe |
|
GarikBaza Новичок Сообщения: 664
|
Собственно что нужно, ШИМ или генератор? |
|
Vasil_ Забанен  Сообщения: 203
|
Судя по всему, от скважности будет зависеть яркость свечения диода. Но максимальная частота таймера в режиме PWM 15625KHz при 8MHz тактовой.Т.е. яркость(скважность) то можно будет регулировать, а частоту в требуемом диапазоне- нет, да и не понятно,- зачем?
ЗЫ, даже если это будет шаговый двигатель, то закачать в него на таких частотах рабочий ток- нереально. |
|
stepmotor Новичок Сообщения: 6
|
| Цитата: | | ЗЫ, даже если это будет шаговый двигатель, то закачать в него на таких частотах рабочий ток- нереально. |
Почему ? работают же драйверы с ШИМ частотой 20кГц и в пределах до 100кГц.. вот например описание оного из множества http://purelogic.ru/PDF/Driver/PLD007.pdf |
|
starko Гость 77.94.*.*
|
У меня по ATiny13 опыта нет, но заглянул в даташит, и ...недоумение:| Vasil_ писал: | | максимальная частота таймера в режиме PWM 15625KHz при 8MHz тактовой | Это так для двустороннего ШИМ (Phase Correct PWM Mode), а для простого ШИМ (Fast PWM Mode) частота вдвое выше, т.е. 31.25кГц.
К тому же, ничего не мешает пожертвовать один из таймерных компараторов на уменьшение длительности периода ШИМ. На PB0 работать не будет, только на PB1, вроде так, но в принципе-то можно.
Да и внутренний генератор можно накрутить до 16МГц, при нормальных условиях.
Однако, действительно, что за задача такая чуднАя? |
|
Vasil_ Забанен  Сообщения: 203
|
Ну, может и так , только все равно и напряжение до 80-90 В поднимать нужно, и обмотки впараллель, и на больших оборотах момент резко падает. ИМХО, все же драйвер нужно делать аппаратно, а что нибудь вроде L297 не подходит? или уже снята с производства?
По теме: инициализируем контроллер(настраиваем порты ,таймеры, АЦП) . Измеренное значение можно считывать, например, по прерыванию от АЦП. Если ADLAR = 0 читаем ADC, результат смещаем вправо на 2, и загружаем в OCR0A,или если ADLAR = 1 читаем ADCL и загружаем в OCR0A.
Т.о. можно получить 256 значений скважности(ШИМ), а вот частоту придется менять переключением прескалеров. Хоть какй то кусок кода уже написан? |
|
starko Гость 77.94.*.*
|
если ADLAR = 1 читаем ADCH
частоту прескалером можно только уменьшить( в 8, 64, 256 или 1024 раз).
Если не синхронизировать работу ADC с PWM, там такая свистопляска будет... поболее, чем обрасываемые 2 младших разряда, я так думаю. |
|
stepmotor Новичок Сообщения: 6
|
| Vasil_ писал: |
а что нибудь вроде L297 не подходит? или уже снята с производства?
|
Нет, просто у нее параметры низкие.. хотелось бы сделать на выходе ir2101и IRFZ44N |
|
Vasil_ Забанен  Сообщения: 203
|
starko, ты прав, ADCH. Синхронизировать- зачем? Там наоборот бы надо ввести "антидребезг" /задержку, но думаю , даже такой код заработает(только в CV имя прерывания может быть другим)
| Код: |
volatile unsigned char wait = 0;
volatile unsigned char data_for_pwm;
void main(void)
{
// произвести инициализации;
ADCSR|=0x40; //start conversion
for(;;)
{
while(wait); // ждем прерыване от таймера эквивал. while(wait!=0);
// "пока wait не ноль"
OCR0A=data_for_pwm;
wait=1; // очищаем флаг
}
}
#pragma vector=ADC_vect
__interrupt void adcon(void)
{
data_for_pwm=ADCH;
ADCSR|=0x40; //start conversion
}
#pragma vector=TIMER0_OVF_vect
__interrupt void TIMER0_OVF0_out_now(void)
{
wait = 0; // прерывание произошло
}
|
stepmotor, ты как в мою коробку глядел , лежат заготовленные IR2104 и IRFZ34N . Потом, чтоб не возиться, были закуплены два М840 / 880:
http://www.giden.ru/sm_driver.html
и два FL110, да так года два уже и валяются на складе, начальство сказало -до лучших времен |
|
stepmotor Новичок Сообщения: 6
|
| Цитата: | stepmotor, ты как в мою коробку глядел , лежат заготовленные IR2104 и IRFZ34N . Потом, чтоб не возиться, были закуплены два М840 / 880:
http://www.giden.ru/sm_driver.html
и два FL110, да так года два уже и валяются на складе, начальство сказало -до лучших времен |
да я тоже закупаю себе в purelogic.ru и в protos.de ..
а так хотел сам попробовать что нибудь хорошее для души сваять..  |
|
starko Гость 77.94.*.*
|
| Vasil_ писал: | | Синхронизировать- зачем? | Измерения должны идти непрерывно, так? ШИМ тоже?
Если установить время преобразования меньше периода таймера, то по прерыванию от таймера запускать ADC.
Если больше - то еще и запрещать его (прерывание). А по прерыванию от ADC - разрешать.
И про ADC Noise Reduction не забываем.
И лучше не сразу в OCR0A закладывать, а после усреднения.
Да, а как это устройство с шаговиком-то увязывается? Как происходит управлении, что куда идет? |
|
Vasil_ Забанен  Сообщения: 203
|
starko, ты снова прав , изменил там код хоть и не люблю оператор "пока" (одни прерывания- ) . Думаю, data_for_pwm "шуметь" не будет, так что можно пробовать без усреднения, но пора вдыхать в железо, да смотреть. Допиши инициализацию, пусть уже человек стартонет  |
|
starko Гость 77.94.*.*
|
Можно, конечно и дописать, но на это надо какое-то время - заготовки у меня нет, функции C под AVR я подзабыл... но попробую, чуть попозже.
Что хочу сразу сказать, если усреднения не надо, то нечего и while крутить. Надо примерно примерно так:
while(1){ Sleep();} //или как оно пишется
перед этим установить SleepMode=Idle.
В прерываниях сделать запреты и разрешения, как писал выше. |
|
Vasil_ Забанен  Сообщения: 203
|
Ясно. Вобщем, воспользовался CV визардом, он мне такого нагенерил, что половину зарэмить пришлось, зато листинг большой Все эти визарды,- разврат для начинающих, пока даташит не почитаешь, да ручками регистры не пропишешь, толку от такого "изучения " -не будет.
Подправил имена регистров и прерываний- откомпилился без ошибок и ворнингов, пробуй, у меня проверить в железе неначем. Весь проект, вместе с .hex, в архиве.
PWM.rar 22,96 КБ Скачано: 781 раз(а)
|
|
stepmotor Новичок Сообщения: 6
|
|
starko Гость 77.94.*.*
|
Vasil_, ну и что оно получилось? АЦП сам себя запускает, без привязки к таймеру. Не вижу, где он в первый раз стартует.
Для чего while с флагом, если OCR0A=data_for_pwm можно просто перенести в прерывание, и главное, а что оно дает?
По инициализации все вроде бы правильно...
А что, использовать спячку релирия не позволяет? |
|
|
Текущий раздел»
Программное обеспечение»
Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)
|
|
|