Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Список использованных источников и литературы




СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ

1. ГОСТ 19. 002–80 – Единая система конструкторской документации. Правила выполнения блок-схем.

2. Автоматическое управление технологическими процессами обогатительных фабрик: А. Е. Троп, В. З. Козин, Е. В. Прокофьев. 2-е изд., переработано и доп. - М.: Недра, 1986. - 303 с.

3. Голинкевич, Т. А. Прикладная теория надежности: учебник для вузов / Т. А. Голинкевич. - М.: Высш. шк., 1977. – 158 с.

4. Исследование надежности технических: учебное пособие к курсовой работе / А. М. Воробьев [и др. ]; ПГУПС. - Санкт-Петербург: ПГУПС, 2014 - 59 с.

5. Кононов, Дмитрий Павлович. Основы теории надежности: учебное пособие для лекционных и практических занятий / Д. П. Кононов; ПГУПС. - Санкт-Петербург: ПГУПС, 2014 - 97 с.

6. Ляпушкин С. В., Гусев Н. В. Комплексная автоматизация технологического процесса дозирования сыпучих материалов // XII Международная научно-практическая конференция студентов и молодых ученых «Современная техника и технологии». – Томск: Изд-во ТПУ, 2007

7. Малафеев, Сергей Иванович. Надежность технических систем. Примеры и задачи Санкт-Петербург; Москва; Краснодар: Лань, 2015 – 313 с.

8. Наладка автоматических систем и устройств управления технологическими процессами: Справочное пособие / А. С. Клюев, А. Т. Лебедев, С. А. Клюев, 1989. - 368 с.

9. Обеспечение надежности сложных технических систем: учебник для студентов высших учебных заведений, А. Н. Дорохов [и др. ]. – Санкт Петербург; Москва; Краснодар: Лань, 2015 - 348 с.

10. Половко, Анатолий Михайлович. Основы теории надежности / А. М. Половко. - М.: Наука, 1964 - 446 с.

11. Промышленные приборы и средства автоматизации: Справочник / В. В. Черенкова 1987 – 847 с.

12. Першина С. В. Весовое дозирование зернистых материалов / С. В. Першина, А. В., Каталымов, В. Г. Однолько и др. – М.: Машиностроение, 2009. – 260 c.

13. Шубин И. Н., Свиридов М. М., Таров В. П. Технологические машины и оборудование. Сыпучие материалы и их свойства. – Тамбов: Изд-во Тамбовского государственного технического университета, 2006. – 76 с.

14. Дозирование сыпучих материалов [Электронный ресурс] / STADS. – Режим доступа: http: //stads. ru/uslugi/kompleksnye-resheniya/dozirovanie / (дата обращения 25. 05. 2021 г. )

15. Описание весового дозатора непрерывного действия с четырехшнековым питателем [Электронный ресурс] / ООО «Baltic Servise – Nord». – Режим доступа: http: //bsnord. narod. ru/dosator. html / (дата обращения 01. 06. 2021 г. )


 

ПРИЛОЖЕНИЕ 1

Создание короба


ПРИЛОЖЕНИЕ 2

Пайка компонентов


ПРИЛОЖЕНИЕ 3

Код для управления системы автоматического управления и контроля дозирования подачи сухих веществ для Arduino

 

/* Клик – режим беспрерывной подачи

Удержание - внеочередная порция. Таймер сбрасывается */

#define FEED_PERIOD 1 // период В ЧАСАХ

#define FEED_SPEED 10 // скорость вращения шнека (условные единицы)

#define MIN_SPEED 150 // мин. скорость мотора (уменьшает время разгона)

#define INVERSE_MOTOR 0 // 0/1 инвертировать мотор

#define INVERSE_BUTTON 1 // 0 - нормально разомкнутая, 1 – нормально замкнутая кнопка

#define CLEAR_TIME 400 // время заднего хода, мс (устранение затора)

#define WAIT_MODE 1  // 0 – режим энергосбережения, 1 – режим ожидания

 

// пины

#define BTN_PIN 2

#define ENC_DO 3

#define ENC_VCC 4

#define MOTOR_DIR 8

#define MOTOR_PWM 9

 

int realPeriod;

int sleedAmount;

int feedAmount = 100; // начальное значение количества дозирования

int encCounter = 0;

int curEncSpeed = 0;

volatile bool isrState = false;

int motorSpeed = MIN_SPEED;

bool motorDirection = false; // 0 - вперёд, 1 - назад направление мотора

#if (WAIT_MODE == 0)

#include «LowPower. h»

#endif

#include < EEPROM. h>

void setup() {

if (EEPROM. read(100)! = 50) { // первый запуск

#if (WAIT_MODE == 0)

realPeriod = calibrateWDT(); // калибровка, находим реальные 8 секунд

#endif

EEPROM. write(1000, 50);

EEPROM. put(0, feedAmount);

EEPROM. put(2, realPeriod);

}

 

EEPROM. get(0, feedAmount);

#if (WAIT_MODE == 0)

EEPROM. get(2, realPeriod);

sleedAmount = (float)FEED_PERIOD * 3600 / realPeriod * 1000; // нахождение времени ожидания!

#endif

pinMode(ENC_VCC, OUTPUT);

pinMode(MOTOR_DIR, OUTPUT);

pinMode(MOTOR_PWM, OUTPUT);

pinMode(BTN_PIN, INPUT_PULLUP);

digitalWrite(ENC_VCC, HIGH);

 

// Пины D9 и D10 - 7. 8 кГц для устранения шума от мотора

TCCR1A = 0b00000001; // 8bit

TCCR1B = 0b00001010; // x8 fast pwm

attachInterrupt(0, isrHandler, INVERSE_BUTTON? RISING: FALLING);

delay(300); // отключение прерывания кнопки

isrState = false;

}

void loop() {

if (isrState) {

delay(1000);                                    // ожидание отклика от кнопки в секунду

if (digitalRead(BTN_PIN) ^ INVERSE_BUTTON) {   // если кнопка отпущена (клик)

isrState = false;                             //

} else {                                       // если кнопка нажата

digitalWrite(ENC_VCC, HIGH);                  // включение энкодер

while (! digitalRead(BTN_PIN) ^ INVERSE_BUTTON) { // пока кнопка нажата

   feedRoutine();                              // начинается выдача вещества

}

runMotor(0, 0);                               // остановка мотора

feedAmount = encCounter;                      //

EEPROM. put(0, feedAmount);                    //

encCounter = 0;                               // сброс счётчика

motorSpeed = MIN_SPEED;                       // скорость минимальная

digitalWrite(ENC_VCC, LOW);                   // выключение энкодер

}

}

if (! isrState) {                 // если кликнули по кнопке

digitalWrite(ENC_VCC, HIGH);    // включаем энкодер

while (encCounter < feedAmount) { // непрерывная подача вещества

feedRoutine();

}

encCounter = 0;           // сброс счётчика

motorSpeed = MIN_SPEED;   // скорость минимальная

runMotor(0, 0);           //

digitalWrite(ENC_VCC, LOW); //

}

isrState = false;

 

#if (WAIT_MODE == 0)

// ЭНЕРГОСБЕРЕЖЕНИЕ

for (int i = 0; i < sleedAmount; i++) { // «спящий режим» по 8 секунд

LowPower. powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

if (isrState) break;    // если была нажата кнопка – переходим в рабочий режим и уходим в начало loop

}

#else // ИЛИ ОЖИДАНИЕ

uint32_t tmr = millis();

uint32_t waitPrd = (uint32_t)FEED_PERIOD * 3600 * 1000;

while (millis() - tmr < waitPrd) {

if (isrState) break;    // если была нажата кнопка – переходим в рабочий режим и уходим в начало loop

}

#endif

}

void feedRoutine() {

encTick();                                // опрос энкодера

static uint32_t tmr;

if (millis() - tmr > = 30) {              // управление мотором

tmr = millis();

 

if (curEncSpeed < FEED_SPEED) motorSpeed += 2; // увеличить скорость

if (curEncSpeed > FEED_SPEED) motorSpeed -= 2; // уменьшить скорость

motorSpeed = constrain(motorSpeed, 0, 255); // ограничить 0-255

 

static bool stuckFlag = false;

static uint32_t stuckTimeout;

if (motorSpeed == 255 & & curEncSpeed == 0) { // Если скорость мотора максимальная, но шнек не двигается

if (millis() - stuckTimeout > 1000) {    // и это продолжается больше секунды

   runMotor(1, 255);                       // Движение в обратную сторону

    uint32_t stuckTmr = millis();

   while (millis() - stuckTmr < CLEAR_TIME) { // в течение CLEAR_TIME

     encTick();                            // опрос энкодера

   }

   //delay(CLEAR_TIME);

   motorSpeed = MIN_SPEED;                   // Минимальная скорость

   stuckTimeout = millis();                // сброс таймаута

}

} else {                                   // или, если скорость и подача в норме

stuckTimeout = millis();                  // сброс таймаута

}

runMotor(0, motorSpeed);                    // продолжение работы

}

}

void encTick() {

static bool lastState;

bool curState = digitalRead(ENC_DO); // опрос энкодера

if (lastState! = curState) {       // Есть изменения на ИК датчике

lastState = curState;

if (curState) {                  //

encCounter += (motorDirection? -1: 1); // Подсчёт количества оборотов

}

}

static uint32_t tmr;

if (millis() - tmr > = 300) {       // таймер для расчёта скорости

tmr = millis();

static int lastPos = 0;

curEncSpeed = encCounter - lastPos; // скорость

lastPos = encCounter;

}

}

void runMotor(bool dir, byte speed) {

motorDirection = dir;

dir = dir ^ INVERSE_MOTOR;        // инверсия (опционально)

digitalWrite(MOTOR_DIR, dir);     // направление

analogWrite(MOTOR_PWM, (dir)? (255 - speed): (speed)); // скорость

}

void isrHandler() {

if (! isrState) isrState = true;   //

}

int calibrateWDT() {

WDTCSR |= (1 < < WDCE) | (1 < < WDE); //

WDTCSR = 0x47;                    // таймаут ~ 2 c

asm («wdr»);                      //

uint16_t startTime = millis();    // время в милисекундах

while (! (WDTCSR & (1 < < WDIF))); // окончание таймаута

uint16_t ms = millis() - startTime;

WDTCSR |= (1 < < WDCE) | (1 < < WDE); //

WDTCSR = 0;                       // выкл wdt

return ms * 4;                    // ms ~ 2000. // Находим реальные 8 секунд

}

 


 

ПРИЛОЖЕНИЕ 4

Компоненты и расходники

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...