Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры

Войти
Регистрация
Восстановить пароль
 
Maxim_R
0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 2
#1

Pic18f45k20 - сборка схемы в Protheus, шаговый двигатель - Микроконтроллер

29.04.2017, 14:12. Просмотров 143. Ответов 3
Метки нет (Все метки)

Не могу нормально разобраться со сборкой схемы в Protheus
Есть сомнения как в правильности программы, хотя она нормально компилируется в MatlabX v3.60
Реализуется шаговый двигатель, управление скоростью на PIC18F45K20.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//Входы:
//       RA3:RA0 - дискретное задание скорости вращения:
//              0000 - 3.75 об/мин;
//              0001 - 7.50 об/мин;
//                  ...
//              1111 - 60 об/мин;
//       RA5 - пуск/стоп:
//              0 - стоп;
//              1 - пуск.
//Выходы:
//       RD4 - сигнал на включение обмотки A;
//       RD5 - сигнал на включение обмотки !A;
//       RD6 - сигнал на включение обмотки B;
//       RD7 - сигнал на включение обмотки !B.
 
#include <p18f45k20.h>
 
//Новые имена ножек контроллера.
#define _A PORTDbits.RD4
#define _nA PORTDbits.RD5
#define _B PORTDbits.RD6
#define _nB PORTDbits.RD7
 
void main (void);
void InterruptHandlerHigh (void);
 
unsigned char cnt=0,freq_i=0,freq_pr=16,in;
 
void main (void)
{
  INTCONbits.TMR0IE = 1;    //Разрешение прерывания по переполнению TIMER0.
  TMR0H = 0xB1;         //Сброс таймера 
  TMR0L = 0xDF;         //в начальное значение.
  T0CON = 0x88;         //Запуск таймера с отключенным предделителем. 
  INTCONbits.GIEH = 1;      //Глобальное разрешение прерываний
 
  ANSEL = 0;                //Отключение аналоговых входов
  ANSELH = 0;           //микроконтроллера.
  
  TRISA = 0x2F;         //Настройки направления данных
  TRISC = 0;                //в задействованных портах
  TRISD = 0;                //ввода/вывода.
 
  PORTD = 0;            //Начальные значения
  PORTC = 0;            //портов микроконтроллера.
 
  while (1);                //Основной бесконечный цикл.
}
 
//Вектор прерываний.
#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh 
  _endasm
}
 
//Обработчик прерываний.
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
    if (INTCONbits.TMR0IF)
    { 
        TMR0H = 0xB1;       //Сброс счётного регистра TMR0
        TMR0L = 0xDF;       //в начальное значение.
        INTCONbits.TMR0IF = 0;  //Сброс флага прерывания.
        if (PORTAbits.RA5 == 1) //Если есть сигнал «Пуск»
        {
            in=PORTA&0x0F;      //Считываем значение с тумблеров.
            freq_pr=0x10-in;        //Перерассчитываем задание частоты.
            switch(cnt)         //Выводим текущее состояние обмоток
            {               //шагового двигателя.
                case 0:
                    _A = 1;
                    _nA = 0;
                    _B = 0;
                    _nB = 0;
                    break;
                case 1:
                    _A = 0;
                    _nA = 1;
                    _B = 0;
                    _nB = 0;
                    break;
                case 2:
                    _A = 0;
                    _nA = 0;
                    _B = 1;
                    _nB = 0;
                    break;
                case 3:
                    _A = 0;
                    _nA = 0;
                    _B = 0;
                    _nB = 1;
                    break;
            }
        
            if ((++freq_i)>=freq_pr)    //Если счётчик переполнений таймера
            {               //больше либо равен уставке на частоту,
                cnt=(++cnt)&0x03;   //то инкрементируем номер выводимого
                freq_i=0;       //шага и обнуляем счётчик переполнений
            }
        }
        else            //Если сигнала «Пуск» нет, снимаем сигналы
        {           //на включение всех обмоток шагового двигателя.
            _A = 0;
            _nA = 0;
            _B = 0;
            _nB = 0;
 
        }  
 
    }
  INTCONbits.GIEH = 1;      //Глобальное разрешение прерываний.
}
В архиве файлы проекта, файл си, hex файл, файл протеуса + скриншот
0
Миниатюры
Pic18f45k20 - сборка схемы в Protheus, шаговый двигатель  
Вложения
Тип файла: zip Step.zip (31.5 Кб, 0 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2017, 14:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Pic18f45k20 - сборка схемы в Protheus, шаговый двигатель (Микроконтроллер):

PIC18F45K20 + прерывания - Микроконтроллер
Доброго времени суток. Разбираюсь с демо платкой на основе PIC18F45K20 . Шла в довесок к PIC Kit3. Столкнулся с проблемой не срабатывания...

шаговый двигатель в СAD - Электроника
В какой среде можно смоделировать шаговый двигатель?Задача простая - отследить как меняется ток от нагрузки шаговика. И меняется ли вообще....

Шаговый двигатель - Электроника
Здравствуйте у меня вопрос по шаговому двигателю, а точнее по программе программа дожна следить за напрвленным источником света ...

шаговый двигатель - Электроника
Привет. Как можно поднять обороты шагового двигателя? Напряжения питания 12В, модель шагового двигателя 17hs8401, драйвер drv8825. При...

Шаговый двигатель + PBII - Электроника
Доброго времени суток! Заимел такую штуку - ...

2-фазный шаговый двигатель - Электроника
42BYG008G. не подскажете, как должны выглядеть диаграмма сигналов на фазы? сдуру пробовал обычным мультивибратором его крутить, но потом...

3
pyzhman
729 / 425 / 59
Регистрация: 15.05.2012
Сообщений: 2,343
29.04.2017, 19:15 #2
Сперву-началу - пишет же: MCLR is low. Подтяните его к питанию.
0
Maxim_R
0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 2
30.04.2017, 12:36  [ТС] #3
Да, спасибо, этот момент заметил
Теперь не могу понять, должен ли двигатель двигаться на +-90 градусов, или же его возможно заставить вертеться
0
Миниатюры
Pic18f45k20 - сборка схемы в Protheus, шаговый двигатель  
paskal
446 / 295 / 26
Регистрация: 15.08.2011
Сообщений: 888
30.04.2017, 17:36 #4
Цитата Сообщение от Maxim_R Посмотреть сообщение
должен ли двигатель двигаться на +-90 градусов, или же его возможно заставить вертеться
Может и вертеться.
Попробуйте поменять местами текст в ветках case 1: и case 2:
0
30.04.2017, 17:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2017, 17:36
Привет! Вот еще темы с ответами:

Проседает шаговый двигатель - Электродвигатели
То есть он вертится.Но без усилия.В чем может быть причина?В обмотке?

ATMega и шаговый двигатель - Электродвигатели
есть ли какие-нибудь библиотеки для ATMega, для шаговых двигателей надо запустить три движка от одного контроллера необходимо...

Биполярный шаговый двигатель не стартует - Электродвигатели
Здравствуйте. Такая проблема: Имеется вертушка (проигрыватель винила) Hitachi HT-350 (года эдак 1980). Двигатель диска не стартует...

Где найти Шаговый Двигатель? - Электроника
Купил 2 принтера по 50р. за каждый в поисках ШД. Один разобрал EPSON Stylus Color 760 - ШД не оказалось. вытащил с него блок питания и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.