找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6103|回復: 1
收起左側

光電編碼盤的直流伺服電機PID閉環(huán)調速系統(tǒng)proteus仿真

[復制鏈接]
ID:137190 發(fā)表于 2016-9-4 22:13 | 顯示全部樓層 |閱讀模式
這個設計的仿真原理圖:
0.png 0.png
0.png
基于單片機的光電編碼盤的直流伺服電機PID閉環(huán)調速系統(tǒng)proteus仿真的所有資料下載:
基于光電編碼盤的直流伺服電機PID閉環(huán)調速系統(tǒng).zip (122.5 KB, 下載次數(shù): 119)


  1. ;HC11 PWM Motor Control Example
  2. ;Demonstrates ADC and Timer Output Capture functions

  3. PORTA             equ      $1000
  4. PORTC             equ      $1003
  5. PORTB             equ      $1004
  6. DDRC              equ      $1007
  7. TOC1              equ      $1016
  8. TOC2              equ      $1018
  9. TCTL1             equ      $1020
  10. TCTL2             equ      $1021
  11. TMSK1             equ      $1022
  12. TFLG1             equ      $1023
  13. TMSK2             equ      $1024
  14. PACTL             equ      $1026
  15. ADCTL             equ      $1030
  16. ADR1              equ      $1031
  17. ADR2              equ      $1032

  18.                 org $F000

  19. start:          lds  #$FF

  20.                 ldaa #$FF                        ;Port C is output
  21.                 staa DDRC

  22.                 ldaa #$80                        ;Enable OC1 interrupts.
  23.                 staa TMSK1                        ;

  24.                 ldaa #$2                        ;Set the prescaler (divide by 16)
  25.                 staa TMSK2

  26.                 ldaa #$80                        ;Enable PA7 as output
  27.                 staa PACTL
  28.        
  29.                           
  30.                 ldaa #$10                        ;Start first ADC conversion - multi mode enable
  31.                 staa ADCTL
  32.                           
  33.                 ldd #$0100                        ;Load the capture register
  34.                 std TOC1
  35.                        
  36.                 cli                                ;Enable interupts

  37. loop                wai
  38.                 bra loop



  39. ;OC1 interrupt service
  40. oc1f                ldaa #$10                         ;Start another ADC conversion
  41.                 staa ADCTL

  42.                 ldaa ADR1                        ;Read the pot position from ADC channel 1
  43.                 staa PORTB                        ;Display it
  44.                                                                                                    
  45.                 suba #127                        ;0x7F is zero reference.
  46.                
  47.                 bne oc1f_ne                            ;Jump if values not same

  48. ;Set Both outputs low. Motor is stationary
  49.                 clrb                                   
  50.                 stab PORTA                        ;Both OC1 and OC2 outputs low
  51.                 stab TCTL1                        ;TOC2 mode is disabled
  52.                 bra done
  53.                
  54. ;Non-zero drive - decide if +ve or -ve:
  55.                
  56. oc1f_ne                bcs oc1f_cs

  57. ;Positive result - motor spins clockwise:

  58.                 ldab #$40                        ;Port A drives this value:
  59.                 stab PORTA
  60.                 clrb                                ;Release TOC2 latch - Port A acquires value, above.
  61.                 stab TCTL1
  62.                 ldab #$40                         ;TOC 2 output toggles on OC2 event; motor drive stops.
  63.                 stab TCTL1
  64.                 bra done               

  65. ;Negative result - motor spins anti-clockwise:

  66. oc1f_cs                ldab #$80                        ;Port A drives this value:
  67.                 stab PORTA
  68.                 clrb                            ;Release TOC2 latch - Port A acquires value, above.
  69.                 stab TCTL1
  70.                 ldab #$40                         ;TOC 2 output toggles on OC2 event; motor drive stops.
  71.                 stab TCTL1
  72.                 nega                                ;Invert result -> 0xFF -> 0x01 etc.

  73. ;Now set up TOC2 to trigger at a time forward of TOC1. This means that the motor will
  74. ;be powered for the number of ticks in ACCA * 256.                                                                                
  75.                                                                                                                                                                                                                
  76. done:                tab                             ;TOC 2 is set to trigger after this no of cycles.
  77.                 clra
  78.                 rolb
  79.                 rola
  80.                 rolb
  81.                 rola               
  82.                 rolb
  83.                 rola
  84.                 rolb
  85.                 rola               
  86.                 rolb
  87.                 rola               
  88.                 addd TOC1  
  89.                 std TOC2
  90.                
  91.                 ldd #$1000
  92.                 addd TOC1
  93.                 std TOC1
  94.                
  95.                 ldaa #$80                        ;Clear the TOC 1 interrupt
  96.                 staa TFLG1
  97.                 rti


  98. ;Interrupt Vectors

  99.                 org $FFE8
  100.                 dw oc1f               

  101.                 org $FFFE
  102.                 dw start
復制代碼



回復

使用道具 舉報

ID:194876 發(fā)表于 2017-5-16 22:00 | 顯示全部樓層
看看感覺還行
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表