Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > ШИМ+мотор pic


Автор: revanatar 13.4.2013, 18:02
Ищу примеры работы с ШИМ на pic-микроконтроллерах, непосредственно на ассемблере. В идеале управление мотором через ШИМ. Пытаюсь реализовать схему:
user posted image(подправил схему)

Автор: xvr 15.4.2013, 12:46
'Схемка' работать не будет. Рекомендую для начала разобраться с работой биполярного транзистора, а потом уже переходить к PIC и ШИМам  smile 

Автор: revanatar 15.4.2013, 13:37
Цитата(xvr @ 15.4.2013,  12:46)
'Схемка' работать не будет. Рекомендую для начала разобраться с работой биполярного транзистора, а потом уже переходить к PIC и ШИМам  smile

Да я как бы проверил, поочередно питание подключал к проводкам которые на ШИМы пустил, при подаче на верхний провод двигатель крутился против часовой, на нижний - по часовой.

Добавлено через 5 минут и 28 секунд
И при изменении напряжения скорость вращения меняется.

Автор: xvr 15.4.2013, 18:19
Цитата(revanatar @  15.4.2013,  13:37 Найти цитируемый пост)
Да я как бы проверил, 

У вас в транзисторах Q3 и Q4 нет резисторов в базах. Ток базы будет ограничен только тем, сколько сможет вкачать в них PIC. И ему это не понравится (и транзисторам тоже). Верхние транзисторы (Q1 и Q2) включены как эмитерные повторители - больше чем напряжение с PIC'а они не дадут (даже меньше - на падение напряжения на базовом переходе). Кроме того, для подключения с ШИМом и реверсом управление надо завести отдельно на все 4 транзистора

Автор: revanatar 15.4.2013, 18:37
Цитата(xvr @ 15.4.2013,  18:19)
Цитата(revanatar @  15.4.2013,  13:37 Найти цитируемый пост)
Да я как бы проверил, 

У вас в транзисторах Q3 и Q4 нет резисторов в базах. Ток базы будет ограничен только тем, сколько сможет вкачать в них PIC. И ему это не понравится (и транзисторам тоже). Верхние транзисторы (Q1 и Q2) включены как эмитерные повторители - больше чем напряжение с PIC'а они не дадут (даже меньше - на падение напряжения на базовом переходе). Кроме того, для подключения с ШИМом и реверсом управление надо завести отдельно на все 4 транзистора

В этом я смогу разобраться сам, ПОТОМ, схему мне дали как задание именно такую, привел только для того чтобы было понятно о чем речь. В первую очередь нужно разобраться ИМЕННО с ШИМом, потом со схемой и только потом все это буду собирать вместе, потому сейчас меня волнует в первую очередь ответ на поставленный вопрос, а далее все остальное, замечания и пожелания. Да и суть задания - это научиться управлять ШИМ. Теории по нему вагон и тележка, а примеров найти не могу.

Автор: xvr 15.4.2013, 22:52
Цитата(revanatar @  15.4.2013,  18:37 Найти цитируемый пост)
потому сейчас меня волнует в первую очередь ответ на поставленный вопрос,

На какой именно? Как запрограммировать ШИМ на PIC, или как управлять мотором в вашей схеме? Ответ на первый вопрос зависит от типа МК (просто PIC недостаточно - их много разных, и модули ШИМ у них разные). Ответ на 2й вопрос - никак. Переделывайте схему.

Цитата(revanatar @  13.4.2013,  18:02 Найти цитируемый пост)
непосредственно на ассемблере.

А уж это совсем для настоящих мазохистов - сейчас все на С пишут  smile 

Автор: revanatar 16.4.2013, 17:22
Цитата(xvr @ 15.4.2013,  22:52)
Цитата(revanatar @  15.4.2013,  18:37 Найти цитируемый пост)
потому сейчас меня волнует в первую очередь ответ на поставленный вопрос,

На какой именно? Как запрограммировать ШИМ на PIC, или как управлять мотором в вашей схеме? Ответ на первый вопрос зависит от типа МК (просто PIC недостаточно - их много разных, и модули ШИМ у них разные). Ответ на 2й вопрос - никак. Переделывайте схему.

Цитата(revanatar @  13.4.2013,  18:02 Найти цитируемый пост)
непосредственно на ассемблере.

А уж это совсем для настоящих мазохистов - сейчас все на С пишут  smile

Ну у меня препод мазохист то все знают, на С примеры видел, а вот на ассемблере только куски не комментированного кода с непонятным назначением.
Желательно pic16f877, нужны примеры кода для каких либо задач, в идеале для того же двигателя, но на то не надеюсь.

Автор: xvr 17.4.2013, 08:02
Цитата(revanatar @  16.4.2013,  17:22 Найти цитируемый пост)
Ну у меня препод мазохист то все знают,

Понятно. 
Цитата(revanatar @  16.4.2013,  17:22 Найти цитируемый пост)
на С примеры видел, а вот на ассемблере только куски не комментированного кода с непонятным назначением.

Тогда могу порекомендовать посмотреть в Application Notes на самом Microchip'е (у них там были AN с примерами кода на ассемблере)
Ну или в крайнем случае взять пример на С, прогнать его через С компилятор (в ассемблер), и отрезать от результата необходимую часть (она будет очень небольшая - вся работа с PWM заключается в нескольких записях в несколько переферийных регистров)

Цитата(revanatar @  16.4.2013,  17:22 Найти цитируемый пост)
Желательно pic16f877, нужны примеры кода для каких либо задач,

Есть для 876го дверной звонок. Он читает пожатый с помощью ADPCM звук из Atmel'овского Data Flash, разжимает и играет через PWM. Но он на С, и сама работа с PWM там занимает меньше процента от всего кода. Собственно вот она -
Код

 if (rest_snd)
  {i=*cur_snd++;
   if (--rest_snd==0) 
    {if (0x80&(Byte)cur_snd) empty_banks|=2; else empty_banks|=1;}
   CCPR2L=i>>2; CCP2CON=(i<<4)|0xC;} // <<< Это
 else
  {CCP2CON=0; PORTC&=~2;} // <<< и это


Еще инициализация -
Код

 PR2     = 64;
 T2CON  = 0x04;
 CCPR2L  = 0;
 CCP2CON = 0;


Кстати, в DS на PIC16F87x все подробно расписано (даже есть пара строк на ASMе)

Автор: revanatar 17.4.2013, 16:50
https://github.com/tomclemente/PIC16F877A/blob/master/PWM.ASM
вот что-то нашлось, но пояснений ни малейших.

Автор: revanatar 25.4.2013, 22:39
Цитата(xvr @ 15.4.2013,  18:19)
Кроме того, для подключения с ШИМом и реверсом управление надо завести отдельно на все 4 транзистора

Отдельно - это как?

Автор: xvr 26.4.2013, 10:58
Цитата(revanatar @  25.4.2013,  22:39 Найти цитируемый пост)
Отдельно - это как? 

Это 4 отдельных провода - по штуке на каждый транзистор. Хотя можно и так, как у ТС, но КПД будет не очень

Автор: revanatar 26.4.2013, 18:45
xvr, хах, не могу остановить шим
Код

bcf T2CON, TMR2ON
clrf CCP2CON

Что еще сделать чтобы остановить? И в какой последовательности? 
Не просто чтобы не крутил, а именно отключить.

А все, разобрался. Если есть смысл - могу выложить код со скрином, все рабочее в нормальной степени. (управляется шим через ацп).

Автор: revanatar 1.6.2013, 20:55
Вот проект протеуса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)