rem Main.bas file generated by New Project wizard
rem
rem Created: 周三 8月 30 2023
rem Processor: ATmega8
rem Compiler: BASCOM-AVR
rem Write your code here
' 使用8MHz的ATmega8時鐘來控制伺服電機。
' 信號周期=50Hz(20mS)
' 脈沖范圍=1.5mS±0.5mS(1mS~2mS)
' 輸出端口PB2
' (1)使用預分頻器將時鐘8MHz分頻1/8。8,000,000 Hz÷8=1000,000 Hz
' (2) 使用比較器A[OCR1A]進行1/2500分頻。1000,000Hz÷50Hz=20000計數-1
' (3)使用比較器B[OCR1B],將脈沖寬度從999到2000改變為1 mS到2 mS。
$regfile = "m8Def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
Config Portb.2 = Output ' 將脈沖輸出端口OC1B設置為輸出
Config Timer1 = Pwm , Prescale = 8 , Clear Timer = 1 , Compare B Pwm = Clear Up
Set Tccr1a.wgm11 '高速PWM模式。(TOP=OCR1A)
Set Tccr1b.wgm13 ' 高速PWM模式。(TOP=OCR1A)
Compare1a = 19999 ' 1000,000Hz÷50Hz=20000計數-1 (19999*1μS約等于20ms)
Dim a As Byte '循環計數
Dim pw_count As word ' 脈沖寬度計數。(初始值)1個計數為1μS。
' '
Do
'舵機跳躍式動作反復3次
do
incr a ' 每次循環計數 a=a+1
Compare1b = 1499 ' 脈沖寬度(0度時計數值)。1個計數為1μS。1*1499為伺服電機的中性位置——1.5mS
Wait 1
Compare1b = 1499+501 ' 脈沖寬度(+90度時計數值)。1個計數為1μS。1*20000為伺服電機的+90位置——2.0mS
Wait 1
Compare1b = 1499-500 ' 脈沖寬度(-90度時計數值)。1個計數為1μS。1*999為伺服電機的-90位置——1.0mS
Wait 1
loop until a=3 '3次后退出循環
a=0 '循環計數歸零
'舵機緩慢增加或減少(+90度到-90度來回擺動)
For pw_count = 999 To 2000 ' 將脈沖寬度變化至1 mS至2 mS。
Compare1b = pw_count ' 設置脈沖寬度。
Waitms 5 ' 等待時間。
Next pw_count '
Waitms 500 '為看清顯示設置的等待
For pw_count = 2000 To 999 Step -1 ' 脈沖寬度從2mS變化到1mS
Compare1b = pw_count ' 設置脈沖寬度。
Waitms 5 ' 等待時間。
Next pw_count '
Waitms 500 '為看清顯示設置的等待
Loop '
End ' 程序結束。
仿真如下:
48.gif (938.03 KB, 下載次數: 49)
下載附件
2023-8-31 23:08 上傳
|