Консультация № 194031
29.11.2018, 21:05
0.00 руб.
1 20 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Реализовать программу управления скоростью двигателя постоянного тока с реверсом направления и изменением скорости.Изменением скорости осуществить методом аппаратного ШИМ контроллера PIC16F877.Для определения угла поворота и направления использовать встроенный в двигатель энкодер.Осуществить индикацию угла поворота двигателя на трехразрядных семисегментных индикаторах с индикацией направления.Направление вращения определяется программно.Значение скорости определяется унитарным кодом на входах PORTB.0 ...PORTB.3
Направление вращения задается внешним переключателем в протеусе(также нужно задать 3 кнопки с разными скоростями и кнопки реверса).
Используемый ассемблер называется MPLAB IDE v.8.92
скачать файл MOTOR_PWM-2.dsn [97.1 кб] схема в протеусе
скачать файл MPASM.pdf [920.6 кб] руковдоство



Приложение:
Руководство
Прикрепленные файлы:
3c9395fb97045a3e07b8e8c9dd9d663be14e9268.pdf

Обсуждение

давно
Посетитель
402525
17
29.11.2018, 21:09
общий
Не смог добавить примерный код ШИМ,т.к. выдает ошибку при отправке запроса на консультацию.
давно
Посетитель
7438
7205
29.11.2018, 21:24
общий
Адресаты:
Добавьте в мини-форуме... Эх, давненько я "не держал в руках шашки", то бишь работал с PIC-ами... Наверное, лет 20...
И схемку, желательно, в виде картинки. Протеусом не пользуюсь.
Если будет время, постараюсь вспомнить и чем-то помочь.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402525
17
29.11.2018, 21:28
общий
29.11.2018, 21:31
давно
Посетитель
402525
17
29.11.2018, 21:31
общий
29.11.2018, 21:35
давно
Посетитель
402525
17
29.11.2018, 21:36
общий
#include P16f877.inc
;*********************** Константы *************************************
Timpuls equ h'30' ;tи=25 мкс
PERIOD equ h'3d' ;Период ШИМ Т=50 мкс \ T=(PR2+1)*4*Tosc*Kделит

;*********************** Флаги и разряды *******************************
#define c STATUS,0 ;флаг переноса
#define z STATUS,2 ;флаг нулевого результата
;************************* *********************************
BANK0 macro ;
bcf STATUS,RP0
bcf STATUS,RP1
endm
;..........................................................................
BANK1: macro ;
bsf STATUS,RP0
bcf STATUS,RP1
endm
;**************************************************************************
; Вектор при сбросе
;**************************************************************************
org 0x000
nop
goto START

org 0x20
START:
call SET_BASIS ;
call InitCCP ;
;***************************************************************************
;
;***************************************************************************
BEGIN:

goto BEGIN
;***************************************************************************
;
;***************************************************************************
org 0x50
;********************************** SET_BASIS ****************************
;*
;***************************************************************************
SET_BASIS:
BANK1 ;
movlw b'00000000' ;W = 0000 0000
movwf TRISC ;
BANK0 ;
bcf c ;C=0
bcf z ;Z=0
clrf PORTC ;
return
;********************************** InitCCP *******************************
;* InitCCP - П/П настройки можуля ШИМ
;****************************************************************************
InitCCP:
BANK1 ;
movlw PERIOD ;Загрузить значение длительности Периода
movwf PR2 ;
BANK0 ;
bsf CCP1CON,4 ;младшие биты длительности Импульса
bsf CCP1CON,5 ;младшие биты длительности Импульса
clrf CCPR1H ;
movlw Timpuls ;Загрузить значение длительности Импульса
movwf CCPR1L ;
bsf CCP1CON,2 ;режим ШИМ CCP1CON(3,2,1,0)=11xx
bsf CCP1CON,3 ;
movlw b'00000111' ;настройка предделителя 1:16
movwf T2CON ;
return

end
давно
Посетитель
402525
17
29.11.2018, 21:38
общий
[q=7438][/q]Благодарю
давно
Посетитель
402525
17
29.11.2018, 21:45
общий
29.11.2018, 21:45
Также если вам эта информация поможет,то Clock1 и Clock2 это то,по которым мы должны смотреть есть ли прерывание,тобишь D-триггер, если в PORTB.0 самый правый бит стал нулем то двигатель должен вращаться вправо,стал 1 вращается в обратную сторону.
Т.е. Clock1 1,
Clock2 0,вращается вправо,

Clock1 1,
Clock2 1,вращается влево

Надеюсь я вас не запутал,надеюсь хотя бы узнать с какого края начать,если у вас не дойдут в ближайшее время руки.
давно
Посетитель
402525
17
30.11.2018, 11:18
общий
Адресаты:
Всю имеющуюся инфу скинул
давно
Посетитель
7438
7205
01.12.2018, 15:21
общий
Адресаты:
Киньте еще P16f877.inc
В мое время f877 не было
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
01.12.2018, 15:40
общий
Адресаты:
Уже не надо. Нашел.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
01.12.2018, 16:05
общий
Адресаты:
Схема не соответствует действительности...
1) "встроенный в двигатель энкодер" это Clock1 и Clock2 и они заведены на PORTB.0 и PORTB.1
2) Не задано "Значение скорости определяется унитарным кодом на входах PORTB.0 ...PORTB.3", кроме того, противоречит пункту 1)
3) Не задано "также нужно задать 3 кнопки с разными скоростями и кнопки реверса"
4) Не задано "Направление вращения задается внешним переключателем в протеусе". На схеме не должно быть показано? Как контроллеру это узнать?
Мне что ли за Вас рисовать схему? К написанию программы можно приступать только когда готова схема.
Ваша схема - это всего лишь некая заготовка, недоведенная до ума.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
01.12.2018, 16:43
общий
Адресаты:
На какой частоте работает контроллер?
Константы PERIOD и Timpuls правильные?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402525
17
02.12.2018, 08:05
общий
Адресаты:
20Мгц-тактовая частота,200нс-один машинный цикл
Консанты правильные,но если их придется ради удобства поменять,то ничего плохо в этом нет.Главное,чтобы схема реверсировалась,и 3 кнопки скорости исправно работали.
давно
Посетитель
402525
17
02.12.2018, 08:13
общий
02.12.2018, 08:15
Адресаты:
1)не очень дружу с ассемблером,так что попытаюсь ответить.В общем,как нам сказал наш преподаватель, Clock1 и Clock 2 отвечают как минимум за реверс.
Т.е.если Clock1 1,
Clock2 0,вращается вправо,

Clock1 1,
Clock2 1,вращается влево
2),3)Тут моя ошибка,т.к. в протеусе нужно было таки проставить те самые переключатели,которые давали бы импульс.
"Значение скорости определяется унитарным кодом на входах PORTB.0 ...PORTB.3"-простите,но этого я сам не до конца понял,но предпологаю,что если на вход энкодера поступает сигнал 00,01,11,10-это разные скорости и реверс.
4)Сейчас добавлю к ножке контроллера кнопку реверса.
давно
Посетитель
402525
17
02.12.2018, 08:15
общий
скачать файл PIC16F87X.pdf [3.75 Mб]
давно
Посетитель
402525
17
02.12.2018, 08:34
общий
02.12.2018, 08:34
давно
Посетитель
402525
17
04.12.2018, 19:01
общий
Адресаты:
Хотел узнать,поможете ли вы мне?Мне хотя бы знать с какого края начать и какие команды,операторы использовать,потому что у меня времени мало осталось.Я полный ноль в ассемблере.
давно
Посетитель
7438
7205
04.12.2018, 19:34
общий
Адресаты:
Начать надо с изучения datasheet на контроллер и команд Ассемблера.
Как иначе Вы разберетесь?
Увы, я пока занят... Но надежды помочь не теряю...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402525
17
04.12.2018, 20:56
общий
Адресаты:
Просто крайний срок 12 декабря.Вообще список команд у меня есть,мне вот что не понятно,так это алгоритм.Я так понял,это задание можно выполнить либо с помощью таймеров TMR0 TMR1,либо с помощью сдвигов.А еще я понял,что надо отдельный код для энкодера,ШИМа,для кнопок.
давно
Посетитель
402525
17
10.12.2018, 11:58
общий
Адресаты:
Только один вопрос,я уже прошил ШИМ код в контроллер,и уже есть какая-никакая ревервсия и запуск вращения,теперь как подкорректировать код,дабы можно было управлять скоростью энкодера,не используя Д триггер протеуса,а задавая прерывания и таймеры?
Думаю,что тему закрывать надо,не буду вас мучать
Форма ответа