我也做了一个 计划使用两个比较器 积分弄不来,这里就用了个比较器A
目前来说用用可以, 精度保证不了。。
基本思路是 陀螺信号进来的是 数值176 (至少我这个是这样的,使用的是M16 内部2.56V的比较电源)
之后乘上9 就差不多是1580 舵机的中立点。
然后消除抖动,故所以大于1700或小于1450时候比较器才会加上或减去数值。我不知道上面的算不算消抖动,反正现在这个陀螺放在桌上舵机不乱斗了。
精度很差,转动陀螺的时候幅度不能太大。不能可能转不到 你想要让他转到的角度。
$regfile = "m16def.dat"
Config Portd = Output
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Adc
Enable Interrupts
Enable Compare1a
Compare1a = 1500
Dim W As Word , Channe1 As Byte
Dim A As Byte
Dim G As Single
Dim D As Word
Dim E As Word '与ADC转换相关变量
Dim F As Word
Dim H As Word
Dim Z As Word
Cls
Cursor Off
Channe1 = 1
Z = 1500
Start Adc
Do
H = Compare1a
D = Getadc(channe1)
E = D * 9
If E > 1700 Then
Compare1a = Compare1a + 30
Elseif Compare1a > 2400 Then
Compare1a = 2400
Elseif E < 1450 Then
Compare1a = Compare1a - 30
Elseif Compare1a < 600 Then
Compare1a = 600
End If
Locate 2 , 1
Lcd "H=" ; H ; " ms" ;
Locate 1 , 1
Lcd "E=" ; E ; " ms" ;
Locate 2 , 10
Lcd "G=" ; G ;
Locate 1 , 10
Lcd "D=" ; Compare1a ;
Pulseout Portd , 0 , H
Loop
End |