📄 ad-pwm.txt
字号:
'////////////////////////////////////////////////////////////////////
'/这个程序用于测试FASTAVR的PWM以及A/D转换输出功能是否正常,这个程序 /
'/可以通过修改变成PWM脉宽调速的基本程序 /
'/这个程序是用ADC的采样值大小来控制PWM的脉宽的大小 /
'/语言:FASTAVR4.1.3 /
'/作者:JAMESKING /
'/参考程序:fastavr中文使用手册以及FastBW.pdf /
'/编译及使用情况:通过编译,没有错误;通过试验板测试,采用 /
'/TEK公司的TDS220数字存储示波器分别观测两通道波形,完全满足设计要求 /
'////////////////////////////////////////////////////////////////////
$Device = m8 '
$Clock = 11.0592 '
$Stack=125 '反正内部RAM大,不用白不用,用了也白用:)
$Lcd =PORTD.4 , RS = PORTD.2 , EN = PORTD.3, 16, 2 'LCD连接方式DB4、5、6、7连接PD4、5、6、7,此处必须要连续端口,其余应该可以看得懂的
$Baud = 115200 '波特率设置为115200,
$Source=On '
$Timer1=PWM, 10, Pwm1A=Normal,Pwm1B=Normal,Prescale=1024 '设置timer1为10位PWM,PWM输出为同相方式,预分频为1024(10位方式可以更改为8、9位方式,
'因为我使用了Mega8,所以有两个PWM输出端口,并且两个端口可以同时输出占空比完全不同的
'PWM波形),并且,可以根据芯片的不同采用不同的分频比。
Cls '清LCD1602
WaitMs 5 '等待5ms
Locate 1, 1 '定位光标于第一行第一列
Cursor On '光标打开
Cursor Blink '光标闪烁
Lcd "JAMESKING" '显示我的网络名称JAMESKING
Nop 10 '在液晶的第一行显示字符
Locate 2 , 2 : Lcd "SWJTU.EDU.CN " '在第二行的第二列显示字符
Nop 5 '
Wait 1 '等待1秒钟
Set DDRB.1 '置位PB1为输出
Nop 5 '
Wait 1 '
Set PORTB.1 '置位PB1
Nop 5 '
Wait 1 '
Reset PORTB.1 '清除PB1
Set DDRB.2 '置位PB2为输出
Nop 5 '
Set PORTB.2 '置位PB2
Nop 5 '
Wait 1 '
Reset PORTB.2 '清除PB2
Nop 5 '
Cls '清除LCD1602
Locate 2 , 2 : Lcd "MATS&ENG" '定位光标于第二行第二列,显示我的院系MAT&ENG
Wait 1 '
Cls '
Nop 5
Print "The World is Not Enough" '串行口输出字符“The World is Not Enough”至PC机
Nop 5
Cls '从这里开始,我来了个空档接龙
WaitMs 5 '等待5ms,不等待的话,这里根本就不会显示
Dim n As Byte '因为只会采样40次,所以这里用byte就足够了
Dim volts As Word '因为我的ADC采用的是10位,故这里用word
Dim voltraw As Word '采样的原始值
Dim voltav As Word '采样的累加和
Nop 5 '
Start Adc , Vref = Int '开始单次采样,VREF采用内部2.56V
Nop 5 '稳定ADC
Do
For n = 1 To 40 ' ADC采样40次
Nop 10 '
voltraw = Adc(0) '选择ADC0通道
Nop 5
Locate 1,1: Lcd "Raw Input "; voltraw; " " '在LCD上显示ADC采样原始值(实际上显示的不是十六进制而是十进制)
voltav = voltav + voltraw 'ADC的原始值累加
Next '
Nop 5
Wait 1 '这个地方如果不等待一秒钟,那么现在天气很冷,LCD肯定不听话
voltav = voltav / 40 ' 对ADC采样值求平均
Locate 2,1: Lcd "Filtered "; voltav; " " '显示ADC求平均以后的平均值
WaitMs 200 '原理同上,还是等等吧,咱不在乎这200ms,只是显示时间太短了
Pwm1A=voltraw 'PWM端口1A占空比受ADC0的采样初始值控制,设置的参数为变量,设置的参数须配合PWM的位数
Pwm1B=voltav 'PWM端口1B占空比受ADC0的40次采样平均值控制,设置的参数为变量,设置的参数须配合PWM的位数
Set DDRB.1 '置PWM1A为输出口
Set DDRB.2 '置PWM1B为输出口
Start Timer1 '启动定时期T1(就是启动PWM),输出PWM坡形
Loop '循环
End '
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -