Микропроцессорная техника

Автор работы: Пользователь скрыл имя, 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

Содержимое работы - 1 файл

Луканов.doc

— 673.50 Кб (Скачать файл)

 


На входах драйверов (см. рис. 9) расположены резисторы R31= R33 = R35 = R37 = 510Ом (ряд Е24, точность 5%) на выходах драйверов - R32= R34 = R36 = R38 = 10Ом (ряд Е24, точность 5%).

 

 

3.4. Принципиальная схема привода Z

В соответствии с параметрами  асинхронного двигателя для привода 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. Список литературы

  1. Носков А. П. Микропроцессорная техника: методические указания к выполнению курсовой работы. – Кемерово: КузГТУ, 2008. – 32 с.
  2. PIC16F87X. Однокристальные 8-ми разрядные FLACH CMOS микроконтроллеры. – М.: Микро – Чип, 2002.
  3. Справочник по электрическим машинам / Под общей редакцией И. П. Копылова. – М.: Энергоатомиздат, 1988.
  4. Altivar 31H. Преобразователи частоты для АД. Руководство по эксплуатации. – Telemecanique, 2004. – 17 с.


 

  1. Приложение 1

Текст программы


 

;================ Начало 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

Информация о работе Микропроцессорная техника