⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad-pwm.txt

📁 ARM中关于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 + -