📄 减速电机上控制.txt
字号:
用可变电阻器+减速电机做伺服电机
$regfile = "m8def.dat" '目标单片机为ATmega48
$baud = 9600
$crystal = 8000000 '使用内部8M晶振
' Config Serialout = Buffered , Size = 20
$prog &HFF , &HE2 , &HDF , &HFF '单片机熔丝位参数设置:禁止系统时钟8分频
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'设置ADC为单次转换模式,采样频率有编译器自动选择,参考电压使用AVcc
'下降触发
Config Timer1 = Timer , Prescale = 1024 , Capture Edge = Falling , Noice Cancel = 1
'计时器1计时
Dim A As Byte
Dim W As Integer
Dim X As Integer
Dim M As Integer
Dim S As Word
Dim R As Integer
Dim Q As Long
Dim F As Long
Dim I As Long
Dim C As Byte
'下降沿中断开
'计时器1中断开
On Icp1 Icp_isr
'使能
Enable Capture1
Enable Interrupts
Timer1 = 0
'装入计时器初值
Start Timer1
Ddrb = &B00000010
Ddrd.6 = 1
Ddrd.7 = 1
Portd = Portd And &B00000000
Start Adc '启动ADC转换,adc电阻与一个直流减速电机同轴
Q = 0
F = 0'可为预先设频率355
W = 0
S = 0
Do
Q = Getadc(0)
Print Q
If W = 0 Then '测得两次的pwm值,当小于 65536(timer1溢出)时,测得值+65536-旧值,否则新值-旧值
s=w
Else
If S = W Then Goto Lp
If S > W Then
S = 65536 - S
F = S + W
Else
F = S - W
End If
W = 0
end if
lp:
If Q <> F Then
If Q > F Then
Reset Portd.6
Set Portd.7
End If
If Q < F Then '设置PD6,7口为输出驱动电机,伺服电定位于指定角度
Reset Portd.7
Set Portd.6
End If
End If
Loop
End
Icp_isr:
S = Capture1
Return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -