Микропроцессорное устройство управления скоростью и нагружением обкаточного испытательного стенда
Ускоренные испытания пневматических шин. Микропроцессорное управление устройствами силовой электроники. Применение микроконтроллеров и DSP-процессоров для управления устройствами силовой электроники. Асинхронная машина с короткозамкнутым ротором.
Рубрика | Физика и энергетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 11.01.2016 |
Размер файла | 3,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Рисунок 4.6 - Экранные формы сообщений об ошибках во время испытаний
Для работы с COM портом были использованы исходные коды библиотеки SerialPort.dll. SerialPort.dll - динамическая библиотека для работы с COM портами на языке С++. Упрощает программирование последовательных портов за счет использования классов. Имеет возможность определять все установленные в системе COM порты. Корректно работает как с реальными так и виртуальными COM портами. В основе библиотеки лежит класс SerialPort. Используя его методы можно выполнять наиболее часто востребованные действия с COM портом: прием - передача данных, управление линиями взаимодействия, определение доступных портов в системе и т.д. Библиотека содержит все необходимые функции работы и распространяется бесплатно.
Листинг программы приведен в ПРИЛОЖЕНИИ В.
4.2 Программное обеспечение микроконтроллера, управляющего скоростью
Алгоритмы программного обеспечения микроконтроллера управляющего скоростью вращения АД1 и АД2 идентичны, различие составляют лишь параметры двигателя загруженные в программу, как константы и коэффициенты ПИД регуляторов. Алгоритм работы программного обеспечения в режиме ожидания изображен на рисунке 4.7.
Для достижения высокой эффективности контроля скорости алгоритм векторного управления должен выполняться после каждого интервала ШИМ. Для этого в программе используется синхронизация АЦП с модулем MCPWM, начало преобразования АЦП выставляется сразу же после каждого интервала ШИМ. Алгоритм работы программы в прерывании от UART, INT0 и АЦП показаны на рисунке 4.8, 4.9, 4.10.
В режиме ожидания программа осуществляет инициализацию микроконтроллера, разрешаются прерывания от асинхронного приемо-передатчика и от внешнего сигнала по входу INT0.
Рисунок 4.7 - Алгоритм работы микроконтроллера управляющего скоростью
Значение о требуемой частоте вращения поступают через COM порт, после успешной инициализации устройства выставляется флаг начала испытаний. В подпрограмме обработки прерывания от АЦП происходит измерение трехфазных статорных токов и частоты вращения ротора. Затем трехфазные токи Ia, Ib, Ic преобразуются к неподвижной системе координат связанной со статором Iб, Iв. (преобразование Кларка). Неподвижная система координат поворачивается на тот же угол вместе с потокосцеплением ротора, используя угол вычисленный в предыдущем исполняемом цикле, находятся токи Id, Iq из Iб, Iв (преобразование Парка). Id, Iq - составляющие токов преобразованные к вращающейся системе координат. Для установившегося режима эти токи являются константами. Сигналы ошибки перерегулирования формируются используя Id, Iq. Составляющая тока Id управляет магнитным потоком ротора. Iq - вращающим моментом двигателя. Значения ошибки регулирования являются входными сигналами ПИ регуляторов. Выходной величиной контроллеров являются Ud и Uq - вектора напряжений, которые поступают на двигатель. Далее происходит вычисление нового угла поворота. Скорость ротора, электрическая постоянная времени, Id, Iq являются входными величинами к этому преобразованию. Новый вычисленный угол указывает алгоритму, где поместить следующий вектор напряжения, чтобы получить величину скольжения для текущего режима работы. Ud и Uq, выходные величины ПИ регуляторов, преобразуются к неподвижной системе координат статора, используя новый угол. Значения напряжений Uб, Uв преобразуются обратно к трехфазным значениям Ua, Ub, Uc. Трехфазные значения напряжений используются для вычисления нового рабочего интервала ШИМ, чтобы сгенерировать требуемый вектор напряжения.
Коэффициенты для ПИ регуляторов получены в математической модели в пакете SIMULINK. Программный код для контроллеров получен полуавтоматическим путем из системы компьютерной математики MATLAB, c использованием библиотек пакета SIMULINK.
Рисунок 4.8 - Алгоритм работы подпрограммы обработки прерывания от UART
Рисунок 4.9 - Алгоритм работы подпрограммы обработки прерывания от UART
По внешнему сигналу прерывания INT0 происходит установка частоты вращения в 0 и происходит сброс флага испытаний.
Рисунок 4.10 - Алгоритм работы подпрограммы обработки прерывания от АЦП
4.3 Программное обеспечение микроконтроллера, управляющего нагружением
Для управления системой нагружения, необходимо управлять шаговым двигателем. Алгоритм работы программного обеспечения в режиме ожидания изображен на рисунке 4.11. Алгоритм обработки прерываний изображен на рисунке 4.12.
После инициализации микроконтроллер определяет текущее положение шагового двигателя, и если он не находится в начальном положении, то выполняется его установка.
Информация о необходимом количестве шагов и перемещении поступает через COM порт. Микроконтроллер выполняет заданное перемещение и сравнивает сигнал датчика с полученным параметром, если разница составляет более 2 мм система отправляет код сообщения об ошибке на ПК, и выдает сигнал прерывания на МК1(МК2). После этих действий микроконтроллер возвращает шаговый двигатель в начальное положение.
Микроконтроллер, управляющий системой нагружения, также выполняет функции слежения за ходом испытания. При разрушении испытываемого образца происходит изменение крутящего момента АД1. По полученной методике разработки системы управления стендом, крутящий момент не должен изменяться на каждом из этапов испытания более чем на 20%. Если во время испытаний ошибки перемещения не произошло, то включается таймер проверки крутящего момента. Проверка момента осуществляется после десяти переполнений таймера, что соответствует 5 секундам.
Рисунок 4.11 - Основной алгоритм работы микроконтроллера управляющего нагружением
Разработка программного обеспечения производилась в CCS PCWHD v4.088 (PIC C Compiler) - компилятор языка С высокого уровня. Современная интегрированная (визуальная) среда разработки программного обеспечения Windows IDE, включает в себя текстовый редактор, компилятор и интерпретатор, средства автоматизации сборки и отладчик. Возможность работы, как автономно так и в интеграции с MPLAB IDE (интегрированная среда разработки фирмы MICROCHIP) делают его незаменимым при разработке программ для PIC микроконтроллеров. Поддерживает микроконтроллеры фирмы MICROCHIP PIC10/12/16/18.
Рисунок 4.12 - Алгоритм обработки прерываний микроконтроллера управляющего нагружением
Листинг программы приведен в ПРИЛОЖЕНИИ Д.
4.4 Выводы по главе
В данной главе дипломного проекта разработано программное обеспечение микроконтроллеров и программное приложение ЭВМ. Произведен выбор среды разработки, приведены алгоритмы программ микроконтроллеров и приложения для ЭВМ. Сделано подробное описание работы каждого алгоритма и системы в целом.
Разработанное приложение для ЭВМ имеет следующие требования для ПК:
- наличие как минимум трех COM портов;
- операционная система Windows.
Экранные формы разработанного приложения на ЭВМ включены в описание.
5. ОЦЕНКА СТОИМОСТИ РАЗРАБОТКИ СИСТЕМ УПРАВЛЕНИЯ ИСПЫТАТЕЛЬНЫМ СТЕНДОМ
Стоимость разработки систем управления скоростью и нагружением испытательного стенда складывается из стоимости разработки программного обеспечения, стоимости разработки и изготовления электронных блоков системы, и стоимости дополнительного оборудования.
Для расчета конечной отпускной цены разработанного опытного образца необходимо определить количество часов, затраченных непосредственно на выполнение разработки.
Таблица 5.1 - График выполнения работ
Тип исполняемой работы: |
Затраченное время, дни: |
|
1 Разработка схем: |
||
Разработка системы управления скоростью |
10 |
|
Разработка системы управления нагружением |
10 |
|
Итого: |
20 |
|
2 Разработка ПО: |
||
Разработка программного управления на ПК в Borland С++ Builder 6 |
7 |
|
Разработка алгоритма работы системы управления скоростью |
4 |
|
Разработка управляющей программы в MPLAB 8.6 |
10 |
|
Разработка алгоритма работы системы управления нагружением |
3 |
|
Разработка управляющей программы в CCS PIC C 4.033 |
6 |
|
Итого: |
30 |
Количество дней, затраченных на разработку схем равно:
Количество дней, затраченных на разработку ПО равно:
В среднем количество часов, затраченных на разработку всей системы, составило:
разработка программного обеспечения (ПО) - ЧПО = 4 часа в день:
разработка схем ЧСХ = 4 часа в день.
Тогда, общее количество часов, затраченных на разработку:
(5.1)
Определим фонд оплаты труда (ФОТ) и отчисления на социальное страхование за разработку схемы и ПО.
Оклад инженера разработчика (студента - дипломника) составляет в соответствии с тарифным коэффициентом 2.86 и 30% премией:
в месяц.
Количество рабочих часов в месяц для 8-ми часового рабочего для и 5-ти дневной рабочей недели:
КРЧ= 168 ч.
Следовательно, величина фонда основной заработной платы по разработке схем и ПО составляет:
(5.2)
(5.3)
(5.4)
К фонду оплаты труда необходимо добавить следующие налоги и отчислении:
социальное страхование (СоцСтр) - 34 % ФОТ;
(5.5)
Тогда зарплата труда с отчислениями составит:
(5.6)
Материальные затраты на разработку ПО состоят из стоимости электроэнергии. Для разработки ПО использовался один персональный компьютер, стоимость которого составляет порядка 400 у.е. Максимальный срок эксплуатации компьютера равен пяти годам, за этот промежуток времени его комплектующие полностью устареют, и будет необходимо приобрести новые.
Расходы на электроэнергию при цене 0,104 у.е. за один кВт и потребляемой компьютером мощности в размере 120 Вт в час составят:
(5.7)
(5.8)
Амортизационные отчисления за один день использования компьютера составят.
(5.9)
где 253 - среднее количество рабочих дней в году
Величина амортизационных отчислений за весь период разработки ПО будет определяться как произведение отчислений за один день на количество полных рабочих дней, в течении которых использовался компьютер:
(5.10)
Определим стоимость материалов использованных при изготовлении схемы по формуле:
(5.11)
где ni,- количество однотипных элементов i, Элi - стоимость одного элемента i.
Стоимость материалов и радиоэлементов, использованных на изготовление схемы, приведена в таблице 5.2.
Таблица 5.2 - Стоимость комплектующих системы управления скоростью
Элементы |
ni |
Элi, у.е. |
Мi, у.e. |
|
1. Резисторы |
9 |
0.02 |
0.18 |
|
2. Конденсаторы |
19 |
0.18 |
3.42 |
|
3. Кварцевые резонаторы |
3 |
1.74 |
5.22 |
|
4. Диоды |
12 |
46 |
552 |
|
5 Транзисторы |
12 |
7.1 |
85.2 |
|
6. Оптроны |
12 |
0.32 |
3.84 |
|
7. Микросхемы |
||||
МАХ232 |
3 |
0.64 |
1.92 |
|
dsPIC30F2010 |
2 |
6.74 |
13.48 |
|
PICI6F84 |
1 |
3,00 |
3.00 |
|
8. Датчики |
||||
E3 |
2 |
56,5 |
56.5 |
|
CSNZ-922 |
4 |
113,33 |
453.32 |
|
8652-Z004 |
1 |
45 |
45 |
|
HOA0963-T51 |
1 |
5,48 |
5.48 |
|
ISD7050 |
1 |
150 |
150 |
|
FL110STH201-8004A |
1 |
450 |
450 |
Итого получаем:
(5.12)
Стоимость контрольно-измерительной аппаратуры и дополнительного оборудования приведена в таблице 5.3.
Таблица 5.3 - Используемая контрольно-измерительная аппаратура и дополнительное оборудование
Наименование |
Цена. у.е. |
Потребляемая мощность. Вт |
|
Блок питания Б5-47 |
74 |
152 |
|
Персональная ЭВМ |
200 |
120 |
|
Итого: |
274 |
252 |
Общая стоимость контрольно измерительной аппаратуры и дополнительного оборудования = 274 у.е.
Амортизационные отчисления рассчитываются исходя из срока эксплуатации системы равного 10 годам. Величина амортизационных отчислении за время разработки блоков составит:
(5.13)
Суммарная потребляемая мощность контрольно измерительной аппаратуры и дополнительного оборудования - 274 Вт.
Расходы на электроэнергию составят:
(5.14)
Материальные затраты на разработку блоков
(5.15)
Себестоимость продукции определяется суммой фонда оплаты труда и
материальных затрат на производство блоков системы управления стендом динамических испытаний:
Рассчитаем величину прибыли в размере 15% для поглощения непредвиденных затрат и дополнительного премирования сотрудников, которое должно ускорить производство и увеличить производительность труда:
(5.16)
Произведем расчет налога на добавленную стоимость по ставке 18%:
(5.17)
Следовательно, общая стоимость разработки и производства опытного образца составит:
(5.18)
6. АНАЛИЗ УСЛОВИЙ ТРУДА ПРИ РАБОТЕ НА ИСПЫТАТЕЛЬНОМ СТЕНДЕ
Для обеспечения безопасности проведения динамических испытаний автомобильных пневматических шин, а так же для защиты обслуживающего персонала, было рассмотрено классификация опасных и вредных производственных факторов и пути по снижению их воздействия.
6.1 Классификация опасных и вредных производственных факторов
На человека в процессе его трудовой деятельности могут воздействовать опасные (вызывающие травмы) и вредные (вызывающие заболевания) производственные факторы. Опасные и вредные производственные факторы (ГОСТ 12.0.003-74) подразделяются на четыре группы:
· физические;
· химические;
· биологические;
· психофизиологические.
К опасным физическим факторам относятся: движущиеся машины и механизмы; различные подъемно-транспортные устройства и перемещаемые грузы; незащищенные подвижные элементы производственного оборудования (приводные и передаточные механизмы, режущие инструменты, вращающиеся и перемещающиеся приспособления и др.); отлетающие частицы обрабатываемого материала и инструмента, электрический ток, повышенная температура поверхностей оборудования и обрабатываемых материалов и т.д.
Вредными для здоровья физическими факторами являются: повышенная или пониженная температура воздуха рабочей зоны; высокие влажность и скорость движения воздуха; повышенные уровни шума, вибрации, ультразвука и различных излучений - тепловых, ионизирующих, электромагнитных, инфракрасных и др. К вредным физическим факторам относятся также запыленность и загазованность воздуха рабочей зоны; недостаточная освещенность рабочих мест, проходов и проездов; повышенная яркость света и пульсация светового потока.
Химические опасные и вредные производственные факторы по характеру действия на организм человека подразделяются на следующие подгруппы: общетоксические, раздражающие, сенсибилизирующие (вызывающие аллергические заболевания), канцерогенные (вызывающие развитие опухолей), мутогенные (действующие на половые клетки организма). В эту группу входят многочисленные пары и газы: пары бензола и толуола, окись углерода, сернистый ангидрид, окислы азота, аэрозоли свинца и др., токсичные пыли, образующиеся, например, при обработке резанием бериллия, свинцовистых бронз и латуней и некоторых пластмасс с вредными наполнителями. К этой группе относятся агрессивные жидкости (кислоты, щелочи), которые могут причинить химические ожоги кожного покрова при соприкосновении с ними.
К биологическим опасным и вредным производственным факторам относятся микроорганизмы (бактерии, вирусы и др.) и макроорганизмы (растения и животные), воздействие которых на работающих вызывает травмы или заболевания.
К психофизиологическим опасным и вредным производственным факторам относятся физические перегрузки (статические и динамические) и нервно-психические перегрузки (умственное перенапряжение, перенапряжение анализаторов слуха, зрения и др.).
Между вредными и опасными производственными факторами наблюдается определенная взаимосвязь. Во многих случаях наличие вредных факторов способствует проявлению травмоопасных факторов. Например, чрезмерная влажность в производственном помещении и наличие токопроводящей пыли (вредные факторы) повышают опасность поражения человека электрическим током(опасный фактор).
Уровни воздействия на работающих вредных производственных факторов нормированы предельно-допустимыми уровнями, значения которых указаны в соответствующих стандартах системы стандартов безопасности труда и санитарно-гигиенических правилах.
Предельно допустимое значение вредного производственного фактора (по ГОСТ 12.0.002-80) - это предельное значение величины вредного производственного фактора, воздействие которого при ежедневной регламентированной продолжительности в течение всего трудового стажа не приводит к снижению работоспособности и заболеванию как в период трудовой деятельности, так и к заболеванию в последующий период жизни, а также не оказывает неблагоприятного влияния на здоровье потомства.
6.2 Опасные и вредные производственные факторы возникающие при работе на испытательном стенде
В процессе проведения динамических испытаний автомобильных пневматических шин персонал может подвергаться следующим опасным и вредным производственным факторам. К ним относятся:
1. Движущееся оборудование, подвижные части испытательного стенда
2. Запыленность воздуха рабочей зоны.
3. Загазованность воздуха рабочей зоны.
4. Повышенный уровень шума
5. Опасность поражения электрическим током
В процессе рабочих испытаний движущиеся части стенда могут воздействовать на персонал, поэтому стенд должен быть оборудован защитными кожухами, препятствующими созданию опасной аварийной ситуации (разрыв шины, поломка механической части стенда), и защищать персонал от воздействия этих факторов.
Во время проведения испытаний при силовом воздействии на шину возникает возможность образования запыленности от трения шины и барабана нагружения. Так же возможно образование вредных газов. Для устранения данных вредных факторов помещения, где проводятся испытания должны быть оборудованы приточно-вытяжной вентиляцией.
При работе приводных механизмов стенда, при испытании шин, присутствуют шумовые воздействия на персонал.
Снижение шума в может быть достигнуто путем совершенствования конструкции или схемы той части оборудования, которая производит шум, использования в конструкции материалов с пониженными акустическими свойствами, оборудования на источнике шума дополнительного звукоизолирующего устройства или ограждения, расположенного по возможности ближе к источнику.
Таким образом, защитный кожух стенда должен быть звукоизолирующим. Значительный эффект снижения шума от оборудования дает применение акустических экранов, отгораживающих шумный механизм от рабочего места или зоны обслуживания машины.
Применение звукопоглощающих облицовок для отделки потолка и стен шумных помещений приводит к изменению спектра шума, в сторону более низких частот, что даже при относительно небольшом снижении уровня существенно улучшает условия труда.
Учитывая, что с помощью технических средств в настоящее время не всегда удается решить проблему снижения уровня шума большое внимание должно уделяться применению средств индивидуальной защиты (антифоны, заглушки и др.).
Электрооборудование испытательного стенда, в обязательном порядке, должно быть заземлено. Все работы по установке, демонтажу и монтажу испытываемых изделий должны проводится при отключенной сети, питающей систему управления стендом. Кроме того, электрооборудование должно быть обеспечено защитными устройствами, позволяющими произвести немедленное отключение системы управления при возникновении аварийных ситуаций в системе электроснабжения и управления стендом. В соответствии с правилами электробезопасности в испытательной лаборатории должен осуществляться постоянный контроль состояния электропроводки, предохранительных щитов, шнуров с помощью которых включается в сеть электрооборудование.
ЗАКЛЮЧЕНИЕ
В данном дипломном проекте была разработана система управления скоростью и нагружением обкаточного испытательного стенда. Микропроцессорная система управления состоит из трех подсистем: управления скоростью, управления скоростной ударной нагрузкой и силовой нагрузкой. Основные результаты работы сводятся к следующему.
Проведен анализ существующих методов управления силовой электроникой. Сделан обзор методов частотного управления электроприводами. Был выбран метод векторного управления. Выбранный метод управления был исследован на модели в пакете SIMULINK, для требуемого типа двигателя.
Разработаны структурные и принципиальные схемы систем управления скоростью и нагружением. Для каждой из систем был сделан обзор и выбор датчиков обратных связей. Представлены подробные описания функционирования устройств.
Кроме этого, в дипломном проекте были разработаны алгоритмы работы и программное обеспечение управляющих микроконтроллеров. Разработано программное управление системами.
Произведен расчет затрат на проектирование и разработку как аппаратной, так и программной части устройств.
В разделе охраны труда произведен анализ опасных и вредных производственных факторов при работе на испытательном стенде, разработаны меры по снижению их воздействия на оператора.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1 Аранчий, Г.В. и др. Тиристорные преобразователи частоты для регулируемых электроприводов. М., «Энергия», 1968. - 128 с.: ил.
2 Арустамов, Э.А. Охрана труда: Справочник. - Дашков и К°, 2008. - 588 с.
3 Архангельский, А.Я. Приемы программирования в C++ Builder. Механизмы Windows. Сети./А. Я. Архангельский, М. А. Тагин.- М.: БИНОМ, 2004 г. - 656 с.
4 Бочков, К.А., Серенков, А.Г., Кондрачук, В.Ф., Харлап, С. Н. Автоматика, телемеханика и связь на транспорте: Пособие по оформлению дипломных проектов по специальности «АТиС на транспорте» БелГУТ- Гомель:2001.- 74 с.
5 Герман-Галкин, С.Г. MATLAB & SIMULINK. Проектирование мехатронных систем на ПК. - Спб.: КОРОНА-Век., 2008. - 368 с.
6 Гульков, Г.И. и др. Системы автоматизированного управления электроприводами: учеб. пособие. 2-е изд., испр. и доп.- Минск: Новое знание, 2007. - 394с.: ил.
7 Драйвер шагового двигателя «ISD7050». Руководство по эксплуатации. [Электронный ресурс] - Режим доступа: http://www.imc.by/templates /imc/public/pdf/isd7050_um_ru.pdf
8 Емельянова, И.А. Технико-экономическое обоснование дипломных проектов: Пособие для студентов электротехнического факультета. - Гомель: УО «БелГУТ», 2005.- 50с.
9 Ляшко, М.Н., Маркевич, К.М. Основы радиоэлектроники: Учеб. пособие. - 2-е изд. перераб. - Мн.: Нар. асвета, 1991. - 175 с.: ил.
10 Рудаков, В.В. и др. Асинхронные электроприводы с векторным управлением. - Л.: Энергоатомидат, Ленингр. отд-ние, 1987. - 136с.: ил.
11 Соколовский, Г.Г. Электроприводы переменного тока с частотным регулированием: Учебное пособие. - Москва: ACADEMA, 2006. - 265c.: ил.
12 Справочник по среднему семейству микроконтроллеров PICmicro. [Электронный ресурс] - Режим доступа: http://ww1.microchip.com/downloads /rus/DeviceDoc/33023a.pdf
13 Усольцев, А.А. Частотное управление асинхронными двигателями/Учебное пособие. Спб: СПбГУ ИТМО, 2006. - 94 с.
14 Черных, И.В. Моделирование электротехнических устройств в MATLAB, SimPowerSystems и Simulink. - М.: ДМК Пресс; СПб.: Питер, 2008. - 288 с.: ил.
15 An Introduction to AC Induction Motor Control Using the dsPIC30F [Электронный ресурс] - Режим доступа: http://ww1.microchip.com/downloads/en/AppNotes
/AC%20Induction%20Motor%2000984a.pdf
16 Control of Stepping Motors. [Электронный ресурс] - Режим доступа: http://www.cs.uiowa.edu/~jones/step/
17 dsPIC30F2010 Data Sheet. [Электронный ресурс] - Режим доступа: http://eicom.ru/pdf/datasheet/Microchip_PDFs/DSPIC30F2010_rev_E/DSPIC30F2010_rev_E.html.
18 dsPIC30F Family Reference Manual. [Электронный ресурс] - Режим доступа:
http://ww1.microchip.com/downloads/en/DeviceDoc/70046E.pdf
19 Measuring Speed and Position with the QEI Module. [Электронный ресурс] Режим доступа: http://ww1.microchip.com/downloads/en/DeviceDoc/93002A.pdf
20 Using the dsPIC30F for Vector Control of an ACIM. [Электронный ресурс] - Режим доступа: http://ww1.microchip.com/downloads/en/AppNotes/00908B.pdf
ПРИЛОЖЕНИЕ А
(обязательное)
ЛИСТИНГ ПРОГРАММЫ УПРАВЛЕНИЯ ИСПЫТАНИЯМИ
PU.cpp
#include <vcl.h>
#pragma hdrstop
#include "PU.h"
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
int hour, min, sec, step_time, porti, read1, read2, read3 = 0;
AnsiString V;
bool send_data = false;
SerialGate com1, com2, com3;
PortInfo pi;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
com_search();
B_Start->Enabled = false;
B_Stop->Enabled = false;
B_Clear->Enabled = false;
_strtime(current_time);
label_current_time->Caption = current_time;
StringGrid1->Cells[0][0] = "шаг №";
StringGrid1->Cells[1][0] = "время, мин";
StringGrid1->Cells[2][0] = "скорость, об/мин";
StringGrid1->Cells[3][0] = "ударная скорость, об/мин";
StringGrid1->Cells[4][0] = "перемещение, мм";
StringGrid1->Cells[5][0] = "прогресс выполнения";
}
void __fastcall TForm1::B_enterClick(TObject *Sender)
{
StringGrid1->Cells[0][StringGrid1->RowCount - 1] = StringGrid1->RowCount - 1;
StringGrid1->Cells[1][StringGrid1->RowCount - 1] = StrToInt(edit_h->Text)*60 + StrToInt(edit_m->Text);
StringGrid1->Cells[2][StringGrid1->RowCount - 1] = edit_speed->Text;
StringGrid1->Cells[3][StringGrid1->RowCount - 1] = edit_speed2->Text;
StringGrid1->Cells[4][StringGrid1->RowCount - 1] = edit_angle->Text;
StringGrid1->Cells[6][StringGrid1->RowCount - 1] = StrToInt(edit_h->Text)*60 + StrToInt(edit_m->Text);
StringGrid1->RowCount = StringGrid1->RowCount + 1;
B_Clear->Enabled = true;
B_Start->Enabled = true;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char buf1, buf2, buf3;
_strtime(current_time);
label_current_time->Caption = current_time;
if(start)
{
if (step_time == 0)
{
StringGrid1->Cells[5][Step] = "ВЫПОЛНЕНО";
if(Step == StringGrid1->RowCount)
{
B_Stop->Click();
return;
}
else Step++;
step_time = StrToInt(StringGrid1->Cells[6][Step])*60;
StringGrid1->Cells[5][Step] = "Выполняется";
com1.Send((char *)StringGrid1->Cells[2][Step].c_str(),2);
com2.Send((char *)StringGrid1->Cells[3][Step].c_str(),2);
com3.Send((char *)StringGrid1->Cells[4][Step].c_str(),1);
}
step_time--;
sec++;
if (min < 60 && sec == 60)
{
min++; sec = 0;
label_go_time->Caption = IntToStr(hour)+" час "+IntToStr(min)+ " мин";
label_change_time->Caption = "через "+ IntToStr(step_time) + " мин";
}
if (min == 60)
{
hour++;
min = 0;
label_go_time->Caption = IntToStr(hour)+" час "+IntToStr(min)+ " мин";
label_change_time->Caption = "через "+IntToStr(step_time)+" мин";
}
int readCount3 = com3.Recv(&buf3, 1); // 1 byte for read
if(readCount3 == 10)
{
B_Stop->Click();
Application->MessageBoxA("ИСПЫТАНИЯ НЕВОЗМОЖНЫ: линейное перемещение не соответствует заданному", "Ошибка во время испытаний", MB_ICONERROR);
return;
}
if(readCount3 == 20)
{
B_Stop->Click();
Application->MessageBoxA("ИСПЫТАНИЯ НЕВОЗМОЖНЫ: испытываемый образец разрушен", "Ошибка во время испытаний", MB_ICONERROR);
return;
}
}
}
void __fastcall TForm1::B_StartClick(TObject *Sender)
{
if(!com_open())
{
return;
}
com1.Send((char*)0xFFFF, 2);
com2.Send((char*)0xFFFF, 2);
com3.Send((char*)0xFF, 1);
Timer2->Enabled = true;
ComboBox1->Enabled = false;
ComboBox2->Enabled = false;
ComboBox3->Enabled = false;
_strtime(start_time);
label_start_time->Caption = start_time;
sec = 0; min =0; hour = 0;
Step = 1;
step_time = StrToInt(StringGrid1->Cells[6][Step]) * 60;
label_change_time->Caption = "через "+StringGrid1->Cells[6][Step]+" мин";
StringGrid1->Cells[5][Step] = "Выполняется";
B_Start->Enabled = false;
B_Stop->Enabled = true;
label_go_time->Caption = "<1 мин";
}
void __fastcall TForm1::B_StopClick(TObject *Sender)
{
start = false;
_strtime(start_time);
label_stop_time->Caption = start_time;
B_Start->Enabled = true;
B_Stop->Enabled = false;
for (int c=1; c < StringGrid1->ColCount; c++)
for (int z=1; z < StringGrid1->RowCount; z++)
StringGrid1->Cells [c] [z] = ' ';
StringGrid1->RowCount = 2;
com1.Send((char *)0,2);
com2.Send((char *)0,2);
com3.Send((char *)0,1);
}
void __fastcall TForm1::B_ExitClick(TObject *Sender)
{
exit(0);
}
void __fastcall TForm1::B_ClearClick(TObject *Sender)
{
if(StringGrid1->RowCount>2)
StringGrid1->RowCount--;
}
void TForm1::com_search()
{
com1.GetPortsInfo(&pi);
for(int i = 0; i < pi.koll; i++)
{
if(pi.p[i].Availbl == true)
{
ComboBox1->Items->Add(AnsiString(pi.p[i].Id));
ComboBox2->Items->Add(AnsiString(pi.p[i].Id));
ComboBox3->Items->Add(AnsiString(pi.p[i].Id));
}
}
}
bool TForm1::com_open()
{
bool b1,b2,b3;
try
{
b1 = com1.Open(StrToInt(ComboBox1->Text),9600);
b2 = com2.Open(StrToInt(ComboBox2->Text),9600);
b3 = com3.Open(StrToInt(ComboBox2->Text),9600);
}
catch (EConvertError&)
{
Application->MessageBoxA("ИСПЫТАНИЯ НЕВОЗМОЖНЫ: не удалось открыть порт. Проверьте назначенные порты", "Ошибка", MB_ICONERROR);
return false;
}
if(b1 == false || b2 == false || b3 == false)
{
Application->MessageBoxA("ИСПЫТАНИЯ НЕВОЗМОЖНЫ: не удалось открыть порт. Проверьте назначенные порты", "Ошибка", MB_ICONERROR);
return false;
}
else return true;
}
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
Timer2->Enabled = false;
byte buf1, buf2, buf3;
int readCount1 = com1.Recv(&buf1, 1);
int readCount2 = com1.Recv(&buf2, 1);
int readCount3 = com1.Recv(&buf3, 1);
if(readCount1 > 0)
read1 = (unsigned char)buf1;
if(readCount2 > 0)
read2 = (unsigned char)buf2;
if(readCount3 > 0)
read3 = (unsigned char)buf3;
if(read1 == 255 && read2 == 255 && read3 == 255)
{
start = true;
com1.Send(( char* )StringGrid1->Cells[2][1].c_str(), 2);
com2.Send(( char* )StringGrid1->Cells[3][1].c_str(), 2);
com3.Send(( char* )StringGrid1->Cells[4][1].c_str(), 2);
}
if (read1 != 255)
{
Application->MessageBoxA("Устройство управления скоростью не работает", "Ошибка инициализации устройств", MB_ICONERROR);
B_Stop->Click();
}
if (read2 != 255)
{
Application->MessageBoxA("Устройство управления ударной нагрузкой не работает", "Ошибка инициализации устройств", MB_ICONERROR);
B_Stop->Click();
}
if (read3 != 255)
{
Application->MessageBoxA("Устройство управления силовой нагрузкой не работает", "Ошибка инициализации устройств", MB_ICONERROR);
B_Stop->Click();
}
read3 = 0;
}
PU.h
#ifndef PUH
#define PUH
#define MAX_WIN_PORT 255
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
#include <Time.h>
#include <ExtCtrls.hpp>
#include "SerialGate.h"
class TForm1 : public TForm
{
__published: // IDE-managed Components
TGroupBox *GroupBox1;
TStringGrid *StringGrid1;
TGroupBox *GroupBox2;
TTimer *Timer1;
TCSpinEdit *edit_angle;
TCSpinEdit *edit_speed;
TCSpinEdit *edit_speed2;
TGroupBox *GroupBox3;
TLabel *Label1;
TLabel *label_current_time;
TLabel *Label2;
TLabel *Label4;
TLabel *Label3;
TLabel *label_start_time;
TLabel *label_change_time;
TLabel *label_stop_time;
TButton *B_enter;
TLabel *label_go_time;
TLabel *Label6;
TCSpinEdit *edit_m;
TCSpinEdit *edit_h;
TLabel *Label5;
TLabel *Label7;
TLabel *Label8;
TLabel *Label9;
TLabel *Label10;
TLabel *Label11;
TLabel *Label12;
TLabel *Label13;
TGroupBox *GroupBox4;
TButton *B_Start;
TButton *B_Stop;
TComboBox *ComboBox1;
TLabel *Label14;
TLabel *Label15;
TComboBox *ComboBox2;
TLabel *Label16;
TComboBox *ComboBox3;
TButton *B_Exit;
TButton *B_Clear;
TTimer *Timer2;
void __fastcall B_enterClick(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall B_StartClick(TObject *Sender);
void __fastcall B_StopClick(TObject *Sender);
void __fastcall B_ExitClick(TObject *Sender);
void __fastcall B_ClearClick(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall Timer2Timer(TObject *Sender);
void __fastcall StringGrid1Enter(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void com_search();
bool com_open();
void init_units();
int x, y, i, Step;
char current_time[9], start_time[9];
bool start, stop;
HANDLE hFile1, hFile2, hFile3;
};
extern PACKAGE TForm1 *Form1;
#endif
ПРИЛОЖЕНИЕ Б
(обязательное)
ЛИСТИНГ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ УПРАВЛЕНИЯ СКОРОСТЬЮ
MAIN.C
#define INITIALIZE
#include <dsp.h>
#include "UserParms.h"
#include "general.h"
#include "Motor.h"
#include "Parms.h"
#include "Encoder.h"
#include "SVGen.h"
#include "ReadADC.h"
#include "MeasCurr.h"
#include "CurModel.h"
#include "FdWeak.h"
#include "Control.h"
#include "PI.h"
#include "Park.h"
#include "UserParms.h"
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN);
union {
long Long;
WORD Word[2];
short Short[2];
BYTE Byte[4];
} DataUnion;
tPIParm PIParmQ;
tPIParm PIParmQref;
tPIParm PIParmD;
tReadADCParm ReadADCParm;
int iRPM,iRPM_old;
WORD iMaxLoopCnt;
WORD iLoopCnt;
WORD iDispLoopCnt;
void InitUserParms(void);
bool SetupPeripherals();
int RcvVel;
bool RunMotor, StopMotor;
void main(void)
{
InitUserParms();
RunMotor = 0;
SetupPeripherals();
PIParmD.qdSum = 0;
PIParmQ.qdSum = 0;
PIParmQref.qdSum = 0;
iMaxLoopCnt = 0;
IFS0bits.ADIF = 0;
IEC0bits.ADIE = 1;
while(1)
{
}
}
bool SetupPeripherals()
{
TRISB = 0x003B;
TRISC = 0x4000;
TRISE = 0x0080;
TRISD = 0x0000;
TRISF = 0x0004;
// ============= Interrupts ===========
IPC2bits.ADIP = 7;
IPC2bits.U1RXIP = 5;
IPC0bits.INT0IP = 6;
IEC0bits.INT0IE = 1;
// ============= UART =================
U1MODE = 0;
U1MODEbits.WAKE = 1;
U1MODEbits.WAKE = 1;
U1STA = 0;
U1STAbits.UTXEN = 1;
U1STAbits.URXISEL = 1;
U1BRG = 47;
IEC0bits.U1RXIE = 1;
U1MODEbits.UARTEN = 1;
// ============= Encoder ===============
if( InitEncoderScaling() )
// Error
return True;
// ============= Current Model ===============
if(InitCurModelScaling())
// Error
return True;
// ============= SVGen ===============
SVGenParm.iPWMPeriod = dLoopInTcy;
// ============= TIMER #1 ======================
PR1 = 0xFFFF;
T1CONbits.TON = 1;
T1CONbits.TCKPS = 1;
// ============= Motor PWM ======================
PDC1 = 0;
PDC2 = 0;
PDC3 = 0;
// Center aligned PWM.
PTPER = dLoopInTcy/2; // Setup PWM period to Loop Time defined in parms.h
PWMCON1 = 0x0077; // Enable PWM 1,2,3 pairs for complementary mode
DTCON1 = dDeadTime; // Dead time
FLTACON = 0;
PTCON = 0x8002; // Enable PWM for center aligned operation
SEVTCMP = 2;
SEVTCMPbits.SEVTDIR = 0;
// ============= Encoder ===============
MAXCNT = MotorParm.iCntsPerRev;
POSCNT = 0;
QEICON = 0;
QEICONbits.QEIM = 7;
QEICONbits.POSRES = 0;
QEICONbits.SWPAB = 1;
DFLTCON = 0;
// ============= ADC - Measure Current ======================
ADCON1 = 0;
ADCON1bits.FORM = 3;
ADCON1bits.SSRC = 3;
ADCON1bits.SIMSAM = 1;
ADCON1bits.ASAM = 1;
ADCON2 = 0;
ADCON2bits.CHPS = 1;
ADCON3 = 0;
ADCON3bits.ADCS = 15;
ADCHS = 0;
ADCHSbits.CH0SA = 1;
ADCHSbits.CH123SA = 0;
ADPCFG = 0xFFFF;
ADPCFGbits.PCFG0 = 0; // AN0 analog
ADPCFGbits.PCFG1 = 0; // AN1 analog
ADCSSL = 0;
ADCON1bits.ADON = 1;
return False;
}
void InitUserParms(void)
{
CORCONbits.SATA = 0;
MotorParm.iScaleMechRPM = diNomRPM;
MotorParm.iPoles = diPoles ;
MotorParm.iCntsPerRev = diCntsPerRev;
MotorParm.fRotorTmConst = dfRotorTmConst;
MotorParm.fLoopPeriod = dLoopInTcy * dTcy;
MotorParm.fVelIrpPeriod = MotorParm.fLoopPeriod;
MotorParm.iIrpPerCalc = diIrpPerCalc;
MotorParm.fScaleMechRPS = MotorParm.iScaleMechRPM/60.0;
MotorParm.fScaleFluxRPS = MotorParm.iPoles*MotorParm.fScaleMechRPS;
MotorParm.fScaleFluxPeriod = 1.0/MotorParm.fScaleFluxRPS;
MotorParm.fScaleFracRevPerLoop = MotorParm.fLoopPeriod * MotorParm.fScaleFluxRPS;
MotorParm.fScaleFluxSpeed = 6.283 * MotorParm.fScaleFluxRPS;
MotorParm.lScaleCntRate = MotorParm.iCntsPerRev * (MotorParm.iScaleMechRPM/60.0);
FdWeakParm.qK1 = dqK1;
// ============= PI D Term ===============
PIParmD.qKp = dDqKp;
PIParmD.qKi = dDqKi;
PIParmD.qKc = dDqKc;
PIParmD.qOutMax = dDqOutMax;
PIParmD.qOutMin = -PIParmD.qOutMax;
InitPI(&PIParmD);
// ============= PI Q Term ===============
PIParmQ.qKp = dQqKp;
PIParmQ.qKi = dQqKi;
PIParmQ.qKc = dQqKc;
PIParmQ.qOutMax = dQqOutMax;
PIParmQ.qOutMin = -PIParmQ.qOutMax;
InitPI(&PIParmQ);
// ============= PI Qref Term ===============
PIParmQref.qKp = dQrefqKp;
PIParmQref.qKi = dQrefqKi;
PIParmQref.qKc = dQrefqKc;
PIParmQref.qOutMax = dQrefqOutMax;
PIParmQref.qOutMin = -PIParmQref.qOutMax;
InitPI(&PIParmQref);
// ============= ADC - Measure Current ======================
ReadADCParm.qK = dqK;
MeasCurrParm.qKa = dqKa;
MeasCurrParm.qKb = dqKb;
InitMeasCompCurr( 450, 730 );
}
void DoControl( void )
{
short i;
CtrlParm.qVelRef = RcvVel;
CurModelParm.qdImag = ParkParm.qId;
CurModelParm.qVelMech = EncoderParm.qVelMech;
CurModel();
ParkParm.qAngle = CurModelParm.qAngFlux;
FdWeakening();
if(EncoderParm.iVelCntDwn == EncoderParm.iIrpPerCalc)
{
CalcVel();
PIParmQref.qInMeas = EncoderParm.qVelMech;
PIParmQref.qInRef = CtrlParm.qVelRef;
CalcPI(&PIParmQref);
CtrlParm.qVqRef = PIParmQref.qOut;
}
// PI control for Q
PIParmQ.qInMeas = ParkParm.qIq;
PIParmQ.qInRef = CtrlParm.qVqRef;
CalcPI(&PIParmQ);
ParkParm.qVq = PIParmQ.qOut;
// PI control for D
PIParmD.qInMeas = ParkParm.qId;
PIParmD.qInRef = CtrlParm.qVdRef;
CalcPI(&PIParmD);
ParkParm.qVd = PIParmD.qOut;
}
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
IFS0bits.ADIF = 0;
CalcVelIrp();
if( !StopMotor )
{
// Calculate qIa,qIb
MeasCompCurr();
// Calculate qId,qIq from qSin,qCos,qIa,qIb
ClarkePark();
// Calculate control values
DoControl();
// Calculate qSin,qCos from qAngle
SinCos();
// Calculate qValpha, qVbeta from qSin,qCos,qVd,qVq
InvPark();
// Calculate Vr1,Vr2,Vr3 from qValpha, qVbeta
CalcRefVec();
// Calculate and set PWM duty cycles from Vr1,Vr2,Vr3
CalcSVGen();
if( !RunMotor )
{
StopMotor = 1;
}
}
else
{
IEC0bits.ADIE = 0;
PWMCON1 = 0;
}
}
void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{
BYTE RcvVelLsb;
BYTE RcvVelMsb;
WORD RcvVel1;
IFS0bits.U1RXIF = 0;
RcvVelLsb = U1RXREG;
RcvVelMsb = U1RXREG;
if( RcvVelLsb == 0xFF && RcvVelMsb == 0xFF )
U1TXREG = 0xFF;
else
{
RcvVel1 = RcvVelMsb << 8;
RcvVel1 += RcvVelLsb;
RcvVel = RcvVel1;
RunMotor = 1;
}
}
void __attribute__((__interrupt__)) _INT0Interrupt(void)
{
RcvVel = 0;
RunMotor = 0;
}
UserParms.h
#ifndef UserParms_H
#define UserParms_H
#define dFoscExt 7372800
#define dPLL 8
#define dLoopTimeInSec 0.00005 // PWM Period - 50 uSec, 20Khz PWM
#define dDeadTimeSec 0.000002 // Deadtime in seconds
#define dFosc (dFoscExt*dPLL) // Clock frequency (Hz)
#define dFcy (dFosc/4)
#define dTcy (1.0/dFcy) // Instruction cycle period (sec)
#define dDeadTime (int)(dDeadTimeSec*dFcy)
#define dLoopInTcy (dLoopTimeInSec/dTcy)
//************** Motor Parameters **************
#define diPoles 1
#define diCntsPerRev 2000
#define diNomRPM 3450
#define dfRotorTmConst 0.078
#define diIrpPerCalc 40
//************** PI **************
#define dDqKp Q15(0.3125);
#define dDqKi Q15(0.0625);
#define dDqKc Q15(0.0625);
#define dDqOutMax Q15(0.7071);
#define dQqKp Q15(0.3125);
#define dQqKi Q15(0.0625);
#define dQqKc Q15(0.0625);
#define dQqOutMax Q15(0.7071);
#define dQrefqKp Q15(0.375);
#define dQrefqKi Q15(0.0625);
#define dQrefqKc Q15(0.0625);
#define dQrefqOutMax Q15(0.5);
//************** ADC Scaling **************
#define dqK Q15(0.5);
#define dqKa Q15(0.5);
#define dqKb Q15(0.5);
//************** Field Weakening **************
#define dqK1 Q15(0.114); // Flux reference value
#endif
ПРИЛОЖЕНИЕ В
(обязательное)
ЛИСТИНГ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ УПРАВЛЕНИЯ НАГРУЖЕНИЕМ
MY.C
#include <16F76.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //External resonator on OSC1-OSC2
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, stream=PC)
#byte T1CON = 0x10
#byte INTCON = 0x0B
void init_state();
int set_state( int8 step );
int8 tmr_overflow;
int8 global_step;
#INT_TIMER1
void tmr1_isr()
{
int16 adc_value_moment;
int16 adc_value_current_moment;
float temp;
tmr_overflow++;
if( tmr_overflow == 10 )
{
delay_us(20);
set_adc_channel(0);
adc_value_current_moment = read_adc();
temp = abs(adc_value_current_moment - adc_value_moment);
if ( temp < (adc_value_moment * 0.2))
{
tmr_overflow = 0;
return;
}
else
{
fputc( 97, PC); //код ошибки - уничтожение образца превышение момента на 20%
output_high(PIN_C3);
output_high(PIN_C4);
init_state();
return;
}
}
delay_us(20);
set_adc_channel(0);
adc_value_moment = read_adc();
}
#INT_RDA
void usart_isr()
{
int8 in_byte1;
int16 in_byte2;
int16 adc_value_shift;
int16 shift_difference;
int temp;
char error_code;
in_byte1 = fgetc( PC );
in_byte2 = fgetc( PC );
if( in_byte1 == 0xFF )
{
fputc( 0xFF, PC );
return;
}
else
{
temp = set_state(in_byte1);
if ( temp == 1 )
{
delay_us(20);
set_adc_channel(1);
adc_value_shift = read_adc();
shift_difference = adc_value_shift - in_byte2;
if( abs(shift_difference) < 2 )
{
set_timer1( 65536 );
tmr_overflow = 0;
enable_interrupts(INT_TIMER1);
T1CON |= 0x08;
return;
}
else { init_state(); error_code = 98; }
}
else error_code = 99;
fputc( error_code, PC); //код ошибки ШД или драйвера ISD
output_high(PIN_C3);
output_high(PIN_C4);
}
}
void main()
{
output_low(PIN_C3);
output_low(PIN_C4);
disable_interrupts(GLOBAL);
setup_spi(FALSE);
setup_timer_0( RTCC_INTERNAL | RTCC_DIV_1 );
setup_timer_1( T1_INTERNAL | T1_DIV_BY_8 );
T1CON |= 0x08;
set_timer1( 65536 );
setup_timer_2( T2_DISABLED,0,1 );
setup_ccp1( CCP_OFF );
set_tris_a( 0xFF );
set_tris_c( 0x83 );
set_tris_b( 0x07 );
setup_adc(ADC_CLOCK_DIV_8 );
setup_adc_ports( RA0_RA1_RA3_ANALOG );
delay_ms( 1000 );
disable_interrupts( INT_EXT );
disable_interrupts( INT_TIMER0 );
disable_interrupts( INT_SSP );
disable_interrupts( INT_AD );
disable_interrupts( INT_RDA );
init_state();
enable_interrupts( INT_RDA );
read_adc(ADC_START_ONLY);
while( 1 ) ;
}
void init_state()
{
while( input_state(PIN_A4) != 1 || input_state(PIN_B2) != 1)
{
output_low( PIN_B6 );
output_high( PIN_B7 );
delay_us(0.5);
output_low( PIN_B7 );
delay_us(0.5);
}
if ( input_state(PIN_B2) ==1 )
{
disable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);
fputc( 99, PC);
output_high(PIN_C3);
output_high(PIN_C4);
enable_interrupts(GLOBAL);
}
return;
}
int set_state( int8 step )
{
int8 step1;
int1 dir;
if( global_step < step )
{
step1 = step - global_step;
global_step = step;
dir = 1;
}
if( global_step > step)
{
step1 = global_step - step;
global_step = step;
dir = 0;
}
if ( global_step == 0 )
{
step1 = step;
global_step = step;
}
while( input_state(PIN_B2) != 1 || step1 != 0 )
{
if( dir > 0)
output_high( PIN_B6 );
else output_low( PIN_B6 );
output_high( PIN_B7 );
delay_us(0.5);
output_low( PIN_B7 );
delay_us(0.5);
step1--;
}
if( input_state(PIN_B2) == 1)
return 0;
return 1;
}
Размещено на Allbest.ru
Подобные документы
Однофазные цепи синусоидального тока. Двигатели постоянного тока параллельного возбуждения. Расчет линейной цепи постоянного тока методом двух законов Кирхгофа. Расчет характеристик асинхронного трехфазного двигателя с короткозамкнутым ротором.
методичка [1,4 M], добавлен 03.10.2012Анализ вариантов технических решений по силовой части преобразователя. Разработка схемы электрической функциональной системы управления. Способы коммутации тиристоров. Математическое моделирование силовой части. Расчет электромагнитных процессов.
курсовая работа [1,2 M], добавлен 05.06.2013Электрический аккумулятор как химический источник тока многоразового действия (в отличие от гальванического элемента), требования к нему. Механизм выбора и обоснование силовой части, методика и основные этапы расчета главных элементов данной системы.
курсовая работа [758,8 K], добавлен 23.02.2014Режим электромагнитного тормоза асинхронного двигателя с короткозамкнутым ротором (противовключение): механические характеристики режима динамического торможения, принципа действия схемы торможения АД : порядок ее работы и назначение органов управления.
лабораторная работа [200,4 K], добавлен 01.12.2011Выбор силовой схемы РТП. Расчеты и выбор элементов силовой схемы: трансформатора, тиристоров, уравнительных реакторов, сглаживающих дросселей, силовой коммутационно-защитной аппаратуры. Структура и основные узлы системы импульсно-фазового управления.
курсовая работа [975,9 K], добавлен 21.04.2011Расчет мощности и нагрузочные диаграммы двигателя с короткозамкнутым ротором типа 4MTKF(H)112L6. Определение передаточного числа и выбор редуктора. Расчет статистических моментов системы электропривод - рабочая машина. Схема подключения преобразователя.
курсовая работа [3,0 M], добавлен 14.12.2013Устройство простейшего коллекторного двигателя постоянного тока с двухполюсным статором и ротором. Выбор элементов, расчет параметров силовой части. Синтез регуляторов методом модального оптимума. Моделирование процесса в пакете MatLab Simulink.
курсовая работа [2,9 M], добавлен 13.12.2012Стендовое испытание асинхронной машины с фазным ротором в двигательном и генераторном режимах, в режимах холостого хода и короткого замыкания. Ознакомление со способом пуска машины в ход. Обучение построению круговой диаграммы и ее использованию.
лабораторная работа [165,0 K], добавлен 27.01.2011Характеристика потребителей электроэнергии. Выбор электродвигателей асинхронного двигателя с короткозамкнутым ротором и кран-балки, пусковых и защитных аппаратов. Расчет силовой сети и выбор силового, электрооборудования. Принципы энергосбережения.
курсовая работа [334,1 K], добавлен 28.07.2014Описание промышленных объектов электроснабжения. Выбор электродвигателей асинхронного двигателя с короткозамкнутым ротором и кран-балки, пусковых аппаратов и защиты. Выбор сечения проводников. Расчет силовой электрической сети и выбор электрооборудования.
курсовая работа [447,3 K], добавлен 17.07.2014