久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3533|回復: 2
收起左側

bascom avr版仿真PID控制直流電機的例子

[復制鏈接]
ID:342822 發表于 2021-5-13 13:41 | 顯示全部樓層 |閱讀模式
本帖最后由 taotie 于 2021-5-13 14:20 編輯

屏幕截圖(67).png

程序:
rem Main.bas file generated by New Project wizard
rem
rem Created:   周日 5月 9 2021
rem Processor: ATmega8
rem Compiler:  BASCOM-AVR

rem Write your code here

'------------------------------------------------------------------------------
'name                     : PID速度控制
'copyright                : (c) 2009 by Türk Mario
'purpose                  : 直流電動機的速度控制
'
'micro                    : Mega8
'------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 24
$baud = 9600
Config Pinb.0 = Output                                      'LED
Config Pinb.3 = Output                                      'PWM
Config Pinc.0 = Output                                      '方向
Config Pinc.1 = Output                                      '方向
Config Pind.2 = Input
Portd.2 = 1                                                 '激活上拉
Config Portd.0 = Input                                      '串口輸入
Portd.0 = 1
Dim E As Single
Dim Esum As Single
Dim Ealt As Single
Dim Kp As Single
Dim Ki As Single
Dim Kd As Single
Dim Ta As Single
Dim Proportionalteil As Single  '比例部分為單精度
Dim Integralteil As Single       '積分 部分為單精度'
Dim Differentialteil As Single    '微分部分為單精度
Dim Cv As Single
Dim Gv As Single
Dim Flanken As Integer                                      '計入側翼
Dim Flankenperturn As Integer                               '每圈側翼數
Dim Umdrehungen As Single
Dim Solldrehzahl As Single                                  '目標速度
Dim Maxdrehzahl As Single                                       '最大速度
Dim Befehl As String * 9                                    '指令
Dim Bcount As Integer                                       '計數
Dim Ar(5) As String * 5
Kp = 60
Ki = 8
Kd = 0.2
Ta = 0.04
Solldrehzahl = 10 '目標速度
Maxdrehzahl = 50   '最大速度
Flankenperturn = 30  '每圈側翼數
E = 0
Esum = 0
Ealt = 0
Config Int0 = Falling                                       '下降沿觸發中斷
Enable Interrupts
Enable Int0
On Int0 Encoder_zaehlen                                     '發生中斷時觸發編碼器計數
Config Timer1 = Timer , Prescale = 256                      'Timer1每40ms執行一次調節
On Timer1 Regler
Timer1 = 64285                                              ' 65535 - (8000000/256/Ta)   Ta = 25
Enable Timer1
Start Timer1
                                                             '定時器2負責電機PWM
Config Timer2 = Pwm , Compare Pwm = Clear Up , Pwm = On , Prescale = 64
   Ocr2 = 30
   '指定方向:
   Portc.0 = 1
   Portc.1 = 0
   '啟動PWM電機
   Enable Timer2
   Start Timer2
'$sim
Do                                                          '主程序
Input "" , Befehl
Bcount = Split(befehl , Ar(1) , ": ")     '將字符串拆分為多個數組元素。計數=拆分(源、數組(idx)、搜索)
   If Ar(1) = "Kp" Then                                     '設置和信息選項
          Kp = Val(ar(2))
   End If
    If Ar(1) = "Ki" Then
          Ki = Val(ar(2))
   End If
    If Ar(1) = "Kd" Then
          Kd = Val(ar(2) )
   End If
   If Ar(1) = "soll" Then
   Solldrehzahl = Val(ar(2))
   End If
    If Ar(1) = "max" Then
   Maxdrehzahl = Val(ar(2))
   End If
   If Ar(1) = "rps" Then
        Print Umdrehungen
   End If
    If Ar(1) = "pid" Then
        Print "Kp=" ; Kp
        Print "Ki=" ; Ki
        Print "Kd=" ; Kd
   End If
    If Ar(1) = "pwm" Then
        Print Ocr2
    End If
Loop
Encoder_zaehlen:                                            '所有邊緣都在這里計算
Incr Flanken
Return
Regler:                                                     'PID控制器算法
Timer1 = 64285
Umdrehungen = Flanken / Ta                                  '確定每秒的轉數
Umdrehungen = Umdrehungen / Flankenperturn
Flanken = 0                                                 '將邊緣計數器設置為零
E = Solldrehzahl - Umdrehungen                              '計算控制偏差
Esum = Esum + E                                             '加總錯誤
Proportionalteil = Kp * E                                   '計算比例項
Integralteil = Ki * Ta                                      '計算積分項
Integralteil = Integralteil * Esum
Differentialteil = E - Ealt                                 '計算微分項
Differentialteil = Differentialteil / Ta
Differentialteil = Differentialteil * Kd
Cv = Proportionalteil + Integralteil                        '匯總所有鏈接
Cv = Cv + Differentialteil
Gv = Maxdrehzahl / 255                                      '轉移到PWM占空比
Gv = Gv * Cv
If Gv < 0 Then Gv = 0
If Gv > 255 Then Gv = 255
Ocr2 = Gv                                    '電機PWM進行了相應的調整
Ealt = E                                                    '注意下一次運行的規則錯誤
Return

工程文件:用8.9版打開
新建文件夾 (3).zip (205.6 KB, 下載次數: 14)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:830831 發表于 2021-5-15 15:26 | 顯示全部樓層
結果如何? 可能分析一下?
回復

使用道具 舉報

ID:342822 發表于 2021-5-15 17:46 | 顯示全部樓層
本帖最后由 taotie 于 2021-5-16 15:29 編輯
Highnose 發表于 2021-5-15 15:26
結果如何? 可能分析一下?

筆記本沒有COM口


屏幕截圖(69).png
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品久久 | 精品日韩一区 | 亚洲国产情侣自拍 | 国产成人免费在线观看 | 51ⅴ精品国产91久久久久久 | 久精品久久 | 久久精品视频在线观看 | 久久一二 | 久久男人 | 国产在线观看不卡一区二区三区 | 久色 | 亚洲人的av | 久久久www成人免费无遮挡大片 | 天天天天操 | 欧美精品1区2区 | 天堂在线中文 | 亚洲精品一级 | 欧美网址在线观看 | 日韩电影免费在线观看中文字幕 | 国产美女视频一区 | 国产 日韩 欧美 制服 另类 | 91不卡在线 | 日韩at| 四虎影院在线免费观看 | 日本在线视频一区二区 | 国产成人福利在线观看 | 日韩精品视频在线观看一区二区三区 | 日本三级黄视频 | 国产精品欧美精品日韩精品 | 亚洲视频在线看 | 视频1区| 国产精品日韩欧美一区二区 | 懂色av蜜桃av | 国产精品久久久久久久久污网站 | 91精品国产自产精品男人的天堂 | 日韩综合在线视频 | 国产精品久久久久一区二区三区 | 欧美一级欧美一级在线播放 | 99久久免费精品国产免费高清 | 精品久久久久久一区二区 | 亚洲高清一区二区三区 |