~vbursian/research-assistant/trunk

« back to all changes in this revision

Viewing changes to RAPlugins/Nelson/MSDN2044 DNStepMotor/MSDN2044.c

  • Committer: Viktor Bursian
  • Date: 2020-07-16 22:38:41 UTC
  • mfrom: (9.25.2 DIST) (9.16.21 VB)
  • Revision ID: vik@pryanik-20200716223841-0gp0sf6m5imdjtb3
Tags: version_1.5.0
releasing version 1.5.0, closing v.1.4 development

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
// Работа с шаговым двигателем. Тактовый сигнал шагов подается на пин 0 порта D
27
27
//                              Сигнал направления подается на пин 1 порта D
28
28
//                              Сигнал разрешения (L) подается на пин 2 порта D
 
29
//                              Сигналы инвертируются оптической развязкой
29
30
//=============================================================================
30
31
 
31
32
uint16_t  TicksPerStep;               // В данной реализации на полшага, так как период шагания
41
42
bool           Ramp;                  // Признак разгона-торможения
42
43
volatile bool  StepsFinished = false; // Признак окончания шагания
43
44
 
 
45
// -------- Макросы установки направления вращения --------------------------
 
46
// Устанавливают бит направления вращения
 
47
// Что соответствует какому направлению, зависит от кинематической схемы прибора
 
48
// Данные установки для ДФС-12 с шаговым двигателем
 
49
#define SETDIRFORWARD PORTD &= ~(1 << 1)
 
50
#define SETDIRBACKWARD PORTD |= (1 << 1)
 
51
// ---------------------------------------------------------------------------
 
52
 
44
53
int8_t  ExecuteCommand0 (const char  command)
45
54
{
46
55
  switch( command ){
110
119
    case 'G':
111
120
      Ramp = true;
112
121
      NumOfSteps = argument;
113
 
      PORTD |= (1 << 1);        // Выводим 1 на пин PORTD1 (вперед)
 
122
      SETDIRFORWARD;
114
123
      PORTD |= (1);                     // Выводим 1 на пин PORTD0
115
124
      PORTD |= (1 << 2);        // Выводим 1 на пин PORTD2 (Enable)
116
125
      if (NumOfSteps >= 2*StoppingZone) RealZone = StoppingZone;
126
135
    case 'R':
127
136
      Ramp = true;
128
137
      NumOfSteps = argument;
129
 
      PORTD &= ~(1 << 1);       // Выводим 0 на пин PORTD1 (назад)
 
138
      SETDIRBACKWARD;
130
139
      PORTD |= (1);                     // Выводим 1 на пин PORTD0
131
140
      PORTD |= (1 << 2);        // Выводим 1 на пин PORTD2 (Enable)
132
141
      if (NumOfSteps >= 2*StoppingZone) RealZone = StoppingZone;
142
151
    case 'F':
143
152
      Ramp = false;
144
153
      NumOfSteps = argument;
145
 
      PORTD |= (1 << 1);        // Выводим 1 на пин PORTD1 (вперед)
 
154
      SETDIRFORWARD;
146
155
      PORTD |= (1);                     // Выводим 1 на пин PORTD0
147
156
      PORTD |= (1 << 2);        // Выводим 1 на пин PORTD2 (Enable)
148
157
      OCR1AH = (uint8_t)((TicksPerStep >> 8) & 0xFF);
154
163
    case 'B':
155
164
      Ramp = false;
156
165
      NumOfSteps = argument;
157
 
      PORTD &= ~(1 << 1);       // Выводим 0 на пин PORTD1 (назад)
 
166
      SETDIRBACKWARD;
158
167
      PORTD |= (1);                     // Выводим 1 на пин PORTD0
159
168
      PORTD |= (1 << 2);        // Выводим 1 на пин PORTD2 (Enable)
160
169
      OCR1AH = (uint8_t)((TicksPerStep >> 8) & 0xFF);
173
182
 
174
183
void  BeforeLoop (void)
175
184
{
176
 
  TicksPerStep = 50;
 
185
  TicksPerStep = 20;
177
186
  AccelAddition = 4;
178
187
  RampCoef = 1031;   // (1.007 * 1024);
179
 
  StoppingZone = 800;
 
188
  StoppingZone = 200;
180
189
  NumOfSteps = 0;
181
190
  Ramp = false;
182
191
  StepsFinished = false;