找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5719|回复: 1
打印 上一主题 下一主题
收起左侧

光电编码盘的直流伺服电机PID闭环调速系统proteus仿真

[复制链接]
跳转到指定楼层
楼主
这个设计的仿真原理图:


基于单片机的光电编码盘的直流伺服电机PID闭环调速系统proteus仿真的所有资料下载:
基于光电编码盘的直流伺服电机PID闭环调速系统.zip (122.5 KB, 下载次数: 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
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:194876 发表于 2017-5-16 22:00 | 只看该作者
看看感觉还行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表