Jump to content

Alexander Weide

Members
  • Content Count

    3
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Alexander Weide

  • Rank
    Новенький

Электроника

  • Стаж в электронике
    Менее года
  1. Это функция которую я применяю для увеличения или уменьшения времени задержки. То есть управление скоростью двигателя Точно не знаю правильно ли но работает. Если по пытаться включить 3 двигателя одновременно то они как то странно одинаково крутятся ( не так как по отдельности ). Даже если заданные разные временные задержки S1 S2 S3. Пока не понимаю почему. Двигатели должны работать все одновременно с разными скоростями.
  2. Да работает. Только все двигатели по отдельности. Какую первую кнопку нажмешь тот двигатель и будет работать. По сути тела основной программы нет, так это в основном как мне кажется только управление кнопок. Да и то без прерываний они работают по принципу какая кнопка первая та и заняла весь мп.
  3. Доброе время суток !!! В программировании новичок по этому и спрашиваю ... Нужно осуществить управление 3-мя двигателями. По сути 5-я, но так как 3 работают синхронно то будем считать как за один. Это будет специализированный станок. Что нужно выполнить контроллеру: Основная программа : Задаются параметры для каждого двигателя персонально (скорость и направление вращения ) Двигатель №1 - Постоянно работает Двигатель №2 - Изменяет направление движения при срабатывании концевиков Двигатель №3 - Изменяет направление движения при срабатывании концевиков Прерывания На каждый двигатель есть 4 кнопки ( вперед/назад/скорость+/скорость - ) Они нужны для подстройки скоростей двигателей и когда нужно в ускорении работы или смены направления. Было бы не плохо что бы после отключения питания все значения оставались в памяти. Использовал процессор Atmega32. Код программы который я сделал на данный момент ниже. Также прикрепил електрическую схему, и печатную плату. Всем спасибо за помощь =) #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define VD5 PORTA #define VD4 PORTB int S1=350; int S2=450; int S3=550; int main(void) { PORTA = 0b00000000; DDRA = 0b11111111; PORTB = 0b11110000; DDRB = 0b00001111; PORTC = 0b11111111; DDRC = 0b00000000; PORTD = 0b11111111; DDRD = 0b00000000; sei(); //разрешаем глобальные прерывания unsigned char butcount=0; void delay (int ms) { for (;ms;ms--) _delay_us(0.1); } void right_M1 (void) //Функция поворота ротора дигателя М1 вправо { VD4 = 0b00000011; // шаг 1 delay(S1); VD4 = 0b00000110; // шаг 2 delay(S1); VD4 = 0b00001100; // шаг 3 delay(S1); VD4 = 0b00001001; // шаг 4 delay(S1); } void left_M1 (void) //Функция поворота ротора дигателя М1 влево { VD4 = 0b00001001; // реверс шаг 1 delay(S1); VD4 = 0b00001100; // реверс шаг 2 delay(S1); VD4 = 0b00000110; // реверс шаг 3 delay(S1); VD4 = 0b00000011; // реверс шаг 4 delay(S1); } void right_M2 (void) //Функция поворота ротора дигателя М2 вправо { VD5 = 0b00000011; // шаг 1 delay(S2); VD5 = 0b00000110; // шаг 2 delay(S2); VD5 = 0b00001100; // шаг 3 delay(S2); VD5 = 0b00001001; // шаг 4 delay(S2); } void left_M2 (void) //Функция поворота ротора дигателя М2 влево { VD5 = 0b00001001; // реверс шаг 1 delay(S2); VD5 = 0b00001100; // реверс шаг 2 delay(S2); VD5 = 0b00000110; // реверс шаг 3 delay(S2); VD5 = 0b00000011; // реверс шаг 4 delay(S2); } void right_M3 (void) //Функция поворота ротора дигателя М3 вправо { VD5 = 0b00110000; // шаг 1 delay(S3); VD5 = 0b01100000; // шаг 2 delay(S3); VD5 = 0b11000000; // шаг 3 delay(S3); VD5 = 0b10010000; // шаг 4 delay(S3); } void left_M3 (void) //Функция поворота ротора дигателя М3 влево { VD5 = 0b10010000; // реверс шаг 1 delay(S3); VD5 = 0b11000000; // реверс шаг 2 delay(S3); VD5 = 0b01100000; // реверс шаг 3 delay(S3); VD5 = 0b00110000; // реверс шаг 4 delay(S3); } while (1) { // ------------------------------------------------------------------------------------------------- if (!(PINC&0b01000000)) { if(butcount < 5) { butcount++; } else { while (1) { right_M1 (); if (!(PINC&0b00100000)) { if(butcount<5) { butcount++; } else { S1=S1+1; } } if (!(PINC&0b00010000)) { if(butcount < 5) { butcount++; } else { S1=S1-1; } } } } } if (!(PINC&0b10000000)) { if(butcount < 5) { butcount++; } else { while (1) { left_M1 (); if (!(PINC&0b00100000)) { if(butcount < 5) { butcount++; } else { S1=S1+1; } } if (!(PINC&0b00010000)) { if(butcount < 5) { butcount++; } else { S1=S1-1; } } } } } // ------------------------------------------------------------------------------------------- { if (!(PINC&0b00001000)) { if(butcount < 5) { butcount++; } else { while (1) { right_M2 (); if (!(PINC&0b00000010)) { if(butcount<5) { butcount++; } else { S2=S2+1; } } if (!(PINC&0b00000001)) { if(butcount < 5) { butcount++; } else { S2=S2-1; } } } } } if (!(PINC&0b00000100)) { if(butcount < 5) { butcount++; } else { while (1) { left_M2 (); if (!(PINC&0b00000010)) { if(butcount < 5) { butcount++; } else { S2=S2+1; } } if (!(PINC&0b00000001)) { if(butcount < 5) { butcount++; } else { S2=S2-1; } } } } } // ---------------------------------------------------------------------------------------- { if (!(PIND&0b00010000)) { if(butcount < 5) { butcount++; } else { while (1) { right_M3 (); if (!(PIND&0b01000000)) { if(butcount<5) { butcount++; } else { S3=S3+1; } } if (!(PIND&0b10000000)) { if(butcount < 5) { butcount++; } else { S3=S3-1; } } } } } if (!(PIND&0b00100000)) { if(butcount < 5) { butcount++; } else { while (1) { left_M3 (); if (!(PIND&0b01000000)) { if(butcount < 5) { butcount++; } else { S3=S3+1; } } if (!(PIND&0b10000000)) { if(butcount < 5) { butcount++; } else { S3=S3-1; } } } } } // ------------------------------------------------------------------------------------------- } } } } схема.pdf
×
×
  • Create New...