Автор работы: Пользователь скрыл имя, 04 Ноября 2012 в 15:50, курсовая работа
Дополнительные требования к МПС: 1) управление Приводом Y должно осуществляться в симметричном режиме; 2) при температуре радиатора силового модуля более чем 65 ºС необходимо отключить установку и оповестить обслуживающий персонал о неисправности.
Техническое задание…………………………………………………………3
Введение…………………………………………………………………..3
Основание для разработки……………………………………………….3
Назначение разработки…………………………………………………..4
Требования к программе или программному изделию ..……………....4
Требования к функциональным характеристикам……………..4
Требования к условиям эксплуатации…………………………..5
Требования к составу и параметрам технических средств….....5
1.5. Требования к ОМК………………………………………………………5
Структурная схема…………………………………………………………...8
Принципиальные электрические схемы...............................................11
Принципиальная электрическая схема привода X …………………..11
Принципиальная электрическая схема привода Y ………………..…13
Принципиальная электрическая схема привода Z ………………...….15
Список литературы……………………………………………………….…17
Приложение1. Текст программы…………………………………………....18
На входах драйверов (см. рис. 9) расположены резисторы R31= R33 = R35 = R37 = 510Ом (ряд Е24, точность 5%) на выходах драйверов - R32= R34 = R36 = R38 = 10Ом (ряд Е24, точность 5%).
В соответствии с параметрами асинхронного двигателя для привода Z, выбираем преобразователь частоты ATV31HU30N4, расчитанный на максимальный ток I=10.9A, мощность указанная на заводской табличке 3кВт, полная мощность 7.1кВА. Схема преобразователя изображена на (рис.10) где M4 – Привод Z; выводы L1, L2, L3 – выводы питания; Li1, Li2 - выводы ключей управления направлением вращения двигателя (рис 11) . Параметры настройки ПЧ приведены в таблице.
Рис.10 Схема подключение привода Z к преобразователю частоты ATV31HU30N4
Рис.11 Ключи управления
Сигналы от ОМК (UP – движение вверх, DOWN – движение вниз) подаются на ПЧ через реле: BS-102B-5 VDC. Напряжение управления 5В, сопротивление обмотки управления Rобм = 125Ом.
Ток коллектора:
Iк = =40 мА
Выбираем транзисторы VT5 и VT6 КТ396А-2, с коэффициентом усиления по току β = 40, напряжение насыщения Uб-э,нас. = 0,6В.
Iб = = = 1мА – ток базы.
Определяем значение сопротивлений R41, R42.
R41= R42= = = 4400 Ом.
Выбираем R41 = R42 = 4,3 кОм (ряд Е24, точность 5%)
Выбираем диоды VD1, VD2 марки Д223, обратное напряжение до 50В, ток до 50 мА.
4. Список литературы
Текст программы
;================ Начало Main_LCD.ASM ================
;Файл: Main_LCD.ASM
; RB0 - цифровой вход, Stop Button
; RB1 - цифровой вход, Run Button
; RB4 - цифровой вход, InitX Button
; RB5 - цифровой вход, InitY Button
; RB6 - цифровой вход, InitZ Button
; RC0 - цифровой выход, привод X вперед
; RC1 - цифровой выход, привод Х назад
; RC3 -
; RC4 - датчик температуры
; RC2 - ШИМ, модуль CCP1
; RC5 - Пуск(1)/Стоп(0) привода Y
list p=16f877a, r=dec
include "p16f877a.inc"
__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC
ERRORLEVEL -302, -305
;************ Блок описания переменных******
cblock 0x20
CntStep ; Счетчик периодов TMR2
WTemp ; Сохранение W
StaTemp ; Сохранение STATUS
CntPrim ; Счетчик
CntSec ; Счетчик
Cnt ; Счетчик общего назначения
FLAGS ; Флаги:
;FLAGS,0 - состояние кнопки RunBTN (1(0) - вкл(откл))
;FLAGS,1 - XDrv_F (1(0) - вкл(откл))
;FLAGS,2 - XDrv_B (1(0) - вкл(откл))
;FLAGS,3 - YDrv_L (1(0) - вкл(откл))
;FLAGS,4 - YDrv_R (1(0) - вкл(откл))
;FLAGS,5 - ZDrv_Up (1(0) - вкл(откл))
;FLAGS,6 - ZDrv_Dwn (1(0) - вкл(откл))
;FLAGS,7 - Raising/Falling
Cnt1 ;
Cnt2 ;
Cnt3 ;
Cnt4 ; Счетчики
Count ; Счетчик общего назначения
COUNTER
delay
temp_wr
temp_rd
ptr_pos
ptr_count
temp_1
temp_2
temp_3
cmd_byte
temperature
endc
;************ Блок описания констант********
NmbrStep EQU 98 ; Количество шагов изменения скважности
XTime EQU 90 ; Время включенного состояния привода X
YTime EQU 35-10 ; Время включенного состояния привода Y
; (учитывается время на разгон и торможение)
ZTime EQU 75 ; Время включенного состояния привода Z
Pause EQU 10 ; Пауза между спуском и подъемом захвата
;************ Блок преопределений***********
#define Stp PORTB,0 ; Стоп
#define Run PORTB,1 ; Пуск
#define InitX PORTB,4 ; Датчик начального положения привода Х
#define InitY PORTB,5 ; Датчик начального положения привода Y
#define InitZ PORTB,6 ; Датчик начального положения привода Z
#define RunX_F PORTC,0 ; Привод X - вперед
#define RunX_B PORTC,1 ; Привод X - назад
#define PWM PORTC,2 ; ШИМ
#define StpY PORTC,5 ; Пуск/Стоп Y
#define RunZ_Up PORTC,6 ; Привод Z - вверх
#define RunZ_Down PORTC,7 ; Привод Z - вниз
#define LCD_D4 PORTD, 0 ; LCD data bits
#define LCD_D5 PORTD, 1
#define LCD_D6 PORTD, 2
#define LCD_D7 PORTD, 3
#define LCD_D4_DIR TRISD, 0 ; LCD data bits
#define LCD_D5_DIR TRISD, 1
#define LCD_D6_DIR TRISD, 2
#define LCD_D7_DIR TRISD, 3
#define LCD_ON PORTD, 7 ; LCD ON
#define LCD_E PORTD, 6 ; LCD E clock
#define LCD_RW PORTD, 5 ; LCD read/write line
#define LCD_RS PORTD, 4 ; LCD register select line
#define LCD_ON_DIR TRISD, 7
#define LCD_E_DIR TRISD, 6
#define LCD_RW_DIR TRISD, 5
#define LCD_RS_DIR TRISD, 4
#define LCD_INS 0
#define LCD_DATA 1
;*********** Маленькие, но удобные макросы**************
Bank0 MACRO
bcf STATUS,RP0
ENDM
Bank1 MACRO
bsf STATUS,RP0
ENDM
rlcd MACRO MYREGISTER
IF MYREGISTER == 1
bsf STATUS, C
call LCDRead
ELSE
bcf STATUS, C
call LCDRead
ENDIF
ENDM
PUSH MACRO
movwf WTemp
swapf STATUS, 0
movf StaTemp
ENDM
POP MACRO
swapf StaTemp, 0
movwf STATUS
swapf WTemp, 1
swapf WTemp, 0
ENDM
;********* Конец блока макросов*************
org 0x0000
nop
clrf INTCON ; Все прерывания запрещаются
clrf PCLATH
goto START
;********** Начало обработчика прерываний **********
org 0x0004
PUSH
btfsc INTCON, INTF ; Прерывание от RB0?
goto IntB0
btfsc PIR1, TMR2IF ; Прерывание от TMR2?
goto IntTMR2
goto IntEnd ; В случае неопознанного прерывания
IntTMR2
bcf PIR1,TMR2IF ; Сбрасываем флаг прерывания
btfss CntStep,1
goto JMP1
movlw 0x01
btfss FLAGS, 7
goto $+6
btfsc FLAGS,4
addwf CCPR1L,1 ; Увеличивем скважность, если Raising YDrv_R
; 50%->100%
btfsc FLAGS,3
subwf CCPR1L,1 ; Увеличивем скважность, если Raising YDrv_L
; 50%-->0%
goto JMP1
btfsc FLAGS,4
subwf CCPR1L,1 ; Уменьшаем скважность, если Folling YDrv_R
; 100%-->50%
btfsc FLAGS,3
addwf CCPR1L,1 ; Уменьшаем скважность, если Folling YDrv_L
; 0%-->50%
JMP1
incf CntStep,1
movlw NmbrStep
subwf CntStep,0
btfss STATUS, Z ; Проверяем счетчик
goto IntEnd
Bank1
bcf PIE1,TMR2IE ; Запрещаем прерывание от TMR2
Bank0
clrf CCP1CON ; Отключаем CCP1
bcf T2CON,TMR2ON ; Отключаем TMR2
btfss FLAGS, 7
goto $+6
btfsc FLAGS,4
bsf PWM ; Открываем vs1 vs3, если Raising YDrv_R
btfsc FLAGS,3
bсf PWM ; Открываем vs2 vs4, если Raising YDrv_L
goto IntEnd
movlw b'00000000' ;Закрываем vs1-vs4, если Falling
movwf PORTC
goto IntEnd
IntB0
bcf INTCON, GIE ; Запрещаем все прерывания
bcf INTCON, INTF
call LCD_Write_Stop
clrf PORTC
goto $-1
goto IntEnd
IntEnd
POP
retfie
;********** Конец обработчика прерываний************
;***************** Блок подпрограмм ****************
LCD_Init
Bank1
bcf LCD_ON_DIR
Bank0
bsf LCD_ON ; Подключаем питание
call Delay30ms
clrf PORTA
Bank1 ;configure control lines
bcf LCD_E_DIR
bcf LCD_RW_DIR
bcf LCD_RS_DIR
Bank0
movlw 0xff ; Wait ~15ms @ 20 MHz
movwf COUNTER
movlw 0xFF
movwf delay
call DelayXCycles
decfsz COUNTER, F
goto $-3
; movlw b'00110000' ;#1 Send control sequence
movlw b'00100000' ;#1 Send control sequence
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
movlw 0xff ;Wait ~4ms @ 20 MHz
movwf COUNTER
movlw 0xFF
movwf delay
call DelayXCycles
decfsz COUNTER, F
goto $-3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;28---2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; movlw b'00110000' ;#2 Send control sequence
movlw b'00100000' ;#2 Send control sequence
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
movlw 0xFF ;Wait ~100us @ 20 MHz
movwf delay
call DelayXCycles
;28--08
; movlw b'0011000' ;#3 Send control sequence
movlw b'10000000'
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
;test delay
movlw 0xFF ;Wait ~100us @ 20 MHz
movwf delay
call DelayXCycles
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;0C--0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; movlw b'00100000' ;#4 set 4-bit
movlw b'00000000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
;0x0C
movlw b'11000000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
call Delay1ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;0x01
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; movlw b'00100000' ;#4 set 4-bit
movlw b'00000000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
;0x01
movlw b'00010000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call LongDelay ;10ms
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;0x02
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b'00000000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
;0x02
movlw b'00100000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; rcall LCDBusy ;Busy?
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
call LongDelay ;2ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call LCDBusy ;Busy?
movlw b'00101000' ;#5 Function set
movwf temp_wr
call i_write
movlw b'00001101' ;#6 Display = ON
movwf temp_wr
call i_write
movlw b'00000001' ;#7 Display Clear
movwf temp_wr
call i_write
movlw b'00000110' ;#8 Entry Mode
movwf temp_wr
call i_write
movlw b'10000000' ;DDRAM addresss 0000
movwf temp_wr
call i_write
movlw b'00000010' ;return home
movwf temp_wr
call i_write
return
;*****************************
Delay1ms ;Approxiamtely at 4Mhz
banksel delay
clrf delay
Delay_1
nop
decfsz delay
goto Delay_1
return
Delay30ms ;more than 30 at 4 Mhz
movlw 0x28
movwf delay
Delay_2
nop
decfsz delay
goto Delay_2
return
LongDelay
movlw 0x09
movwf delay
Delay_3
nop
decfsz delay
goto Delay_3
return
DelayXCycles
decfsz delay, F
goto DelayXCycles
return
;*****************************
LCDWriteNibble
btfss STATUS, C ; Set the register select
bcf LCD_RS
btfsc STATUS, C
bsf LCD_RS
bcf LCD_RW ; Set write mode
Bank1
bcf LCD_D4_DIR ; Set data bits to outputs
bcf LCD_D5_DIR
bcf LCD_D6_DIR
bcf LCD_D7_DIR
Bank0
NOP ; Small delay
NOP
bsf LCD_E ; Setup to clock data
btfss temp_wr, 7 ; Set high nibble
bcf LCD_D7
btfsc temp_wr, 7
bsf LCD_D7
btfss temp_wr, 6
bcf LCD_D6
btfsc temp_wr, 6
bsf LCD_D6
btfss temp_wr, 5
bcf LCD_D5
btfsc temp_wr, 5
bsf LCD_D5
btfss temp_wr, 4
bcf LCD_D4
btfsc temp_wr, 4
bsf LCD_D4
NOP
NOP
bcf LCD_E ; Send the data
return
LCDWrite
call LCDWriteNibble
Bank0
swapf temp_wr, f
call LCDWriteNibble
Bank0
swapf temp_wr,f
return
LCDBusy
; Check BF
rlcd LCD_INS
btfsc temp_rd, 7
goto LCDBusy
return
LCDRead
Bank1
bsf LCD_D4_DIR ; Set data bits to inputs
bsf LCD_D5_DIR
bsf LCD_D6_DIR
bsf LCD_D7_DIR
Bank0
btfss STATUS, C ; Set the register select
bcf LCD_RS
btfsc STATUS, C
bsf LCD_RS
bsf LCD_RW ;Read = 1
NOP
NOP
bsf LCD_E ; Setup to clock data
NOP
NOP
NOP
NOP
btfss LCD_D7 ; Get high nibble
bcf temp_rd, 7
btfsc LCD_D7
bsf temp_rd, 7
btfss LCD_D6
bcf temp_rd, 6
btfsc LCD_D6
bsf temp_rd, 6
btfss LCD_D5
bcf temp_rd, 5
btfsc LCD_D5
bsf temp_rd, 5
btfss LCD_D4
bcf temp_rd, 4
btfsc LCD_D4
bsf temp_rd, 4
bcf LCD_E ; Finished reading the data
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
bsf LCD_E ; Setup to clock data
NOP
NOP
btfss LCD_D7 ; Get low nibble
bcf temp_rd, 3
btfsc LCD_D7
bsf temp_rd, 3
btfss LCD_D6
bcf temp_rd, 2
btfsc LCD_D6
bsf temp_rd, 2
btfss LCD_D5
bcf temp_rd, 1
btfsc LCD_D5
bsf temp_rd, 1
btfss LCD_D4
bcf temp_rd, 0
btfsc LCD_D4
bsf temp_rd, 0
bcf LCD_E ; Finished reading the data
FinRd
return
i_write ;write instruction
call LCDBusy
bcf STATUS, C
call LCDWrite
return
LCD_DO ;выполнить
movwf temp_wr ;передача данных
call LCDBusy
bsf STATUS, C
call LCDWrite
call Delay1ms
return
LCD_Write_Init ; выводит Init...
movlw b'10000000' ; переход в начало
movwf temp_wr ; первой строки
call i_write
movlw 0x49
call LCD_DO
movlw 0x6E
call LCD_DO
movlw 0x69
call LCD_DO
movlw 0x74
call LCD_DO
movlw 0x2E
call LCD_DO
movlw 0x2E
call LCD_DO
movlw 0x2E
call LCD_DO
return
LCD_Write_Init_finish ; выводит Init finish
movlw b'10000000' ; переход в начало
movwf temp_wr ; первой строки
call i_write
movlw 0x49
call LCD_DO
movlw 0x6E
call LCD_DO
movlw 0x69
call LCD_DO
movlw 0x74
call LCD_DO
movlw 0x20
call LCD_DO
movlw 0x66
call LCD_DO
movlw 0x69
call LCD_DO
movlw 0x6E
call LCD_DO
movlw 0x69
call LCD_DO
movlw 0x73
call LCD_DO
movlw 0x68
call LCD_DO
return
LCD_Write_finish ; выводит Finish!!!
movlw b'10000000' ; переход в начало
movwf temp_wr ; первой строки
call i_write
movlw 0x46
call LCD_DO
movlw 0x69
call LCD_DO
movlw 0x6E
call LCD_DO
movlw 0x69
call LCD_DO
movlw 0x73
call LCD_DO
movlw 0x68
call LCD_DO
movlw 0x21
call LCD_DO
movlw 0x21
call LCD_DO
movlw 0x21
call LCD_DO
return
LCD_Write_Run ; выводит Run
movlw b'10000000' ; переход в начало
movwf temp_wr ; первой строки
call i_write
movlw 0x52
call LCD_DO
movlw 0x75
call LCD_DO
movlw 0x6E
call LCD_DO
return
LCD_Write_Stop ; выводит STOP!!!
movlw b'10000000' ; переход в начало
movwf temp_wr ; первой строки
call i_write
movlw 0x53
call LCD_DO
movlw 0x54
call LCD_DO
movlw 0x4F
call LCD_DO
movlw 0x50
call LCD_DO
movlw 0x21