Список использованных источников и литературы
⇐ ПредыдущаяСтр 9 из 9 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|