精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

SPWM輸出經RC濾波后變成了三角波

小弟最近剛剛開始研究SPWM,在網上找了一個程序,通過dspic30f4011芯片產生SPWM波形,進而控制電機。我想驗證spwm波形正確與否,就把它跟一個1K的電阻和104的電容相連,然后用數字示波器看電容兩端的波形,結果出來的是三角波,懇請各位大蝦幫幫忙~

附上我的程序:

.equ __30F4011, 1
.include "F:\mplab\MPLAB C30\support\inc\p30f4011.inc"
.global __reset
;..............................................................................
; 配置位:
;..............................................................................
config __FOSC, CSW_FSCM_OFF & XT_PLL4 ; 關閉時鐘切換和
; 故障保護時鐘監視并
; 使用XT 振蕩器和4 倍頻PLL 作為
; 系統時鐘
config __FWDT, WDT_OFF ; 關閉看門狗定時器
config __FBORPOR, PBOR_ON & BORV_27 & PWRT_16 & MCLR_EN
; 設置欠壓復位電壓
; 并將上電延遲定時器設置為16ms
config __FGS, CODE_PROT_OFF ; 對一般代碼段
; 將代碼保護設置為關閉
;..............................................................................
; 近數據存儲器(RAM 的低8KB)中的未初始化變量
;..............................................................................
.section .nbss, "b"
; 在每個PWM 周期將此變量加到16 位的
; 正弦波數值表指針。對于16 KHz 的PWM 調制,數值246 將提供
;60 Hz 的調制頻率
Frequency:.space 2
; 此變量用來設置調制幅值并換算
; 從正弦波數值表獲取的值。有效值的范圍為0 到32767
Amplitude:.space 2
; 此變量是正弦波數值表的指針。在每次PWM 中斷時,
; 它遞增一次,遞增數值是Frequency 變量的值。
Phase: .space 2
;..............................................................................
; 存儲在程序空間中的常數
;..............................................................................
.section .sine_table, "x"
.align 256
; 這是一個含有64 個值的正弦波表,覆蓋了正弦函數的360 度。
; 使用Microsoft Excel 計算這些值并將它們粘貼到此程序中。
SineTable:
.hword 0,3212,6393,9512,12539,15446,18204,20787,23170,25329
.hword 27245,28898,30273,31356,32137,32609,32767,32609,32137,31356,30273,28898
.hword 27245,25329,23170,20787,18204,15446,12539,9512,6393,3212,0,-3212,-6393
.hword -9512,-12539,-15446,-18204,-20787,-23170,-25329,-27245,-28898,-30273
.hword -31356,-32137,-32609,-32767,-32609,-32137,-31356,-30273,-28898,-27245
.hword -25329,-23170,-20787,-18204,-15446,-12539,-9512,-6393,-3212
;..............................................................................
; 此應用程序中的常數
;..............................................................................
; 此常量用來將正弦查找值換算到PWM 占空比的有效范圍內。占空比的范圍取決于寫入PTPER 的值。
; 對于此應用程序,我們將設置PTPER = 230,使占空比介于0 和460 之間。正弦表數據是有符號的,
; 我們用230 乘以表中數據,然后將乘積加上固定的偏移值從而將查找數據換算為正值
.equ PWM_Scaling, 230
; 正弦波表的指針是16 位的。把0x5555 加給
; 指針將提供120 度的偏移,而加上0xAAAA 將提供240
; 度的偏移。這些偏移用來獲取PWM 輸出的相位2 和相位3 的查找值。
.equ Offset_120, 0x5555
;..............................................................................
; 程序存儲器中的代碼部分
;..............................................................................
.text ;代碼部分的開始
__reset:
MOV #__SP_init, W15 ; 初始化堆棧指針
MOV #__SPLIM_init, W0 ; 初始化堆棧指針限制寄存器
MOV W0, SPLIM
NOP ; 在初始化SPLIM 之后,加一條NOP
CALL _wreg_init ; 調用 _wreg_init 子程序
; 可以選用RCALL 代替CALL
call Setup ; 調用程序以設置I/O 和PWM
;------------------------------------------------------------------------------
; 初始化變量
;------------------------------------------------------------------------------
clr Frequency
clr Amplitude
;------------------------------------------------------------------------------
; 主循環代碼
; 在主循環中查詢PWM 中斷標志
;------------------------------------------------------------------------------
Loop: btss IFS2,#PWMIF ; 查詢PWM 中斷標志
      bra CheckADC ; 如果置1,則繼續
      call Modulation ; 調用正弦波調制程序
      bclr IFS2, #PWMIF ; 清零PWM 中斷標志
CheckADC:
      btss IFS0,#ADIF
      bra Loop
      call ReadADC
      bra Loop
;------------------------------------------------------------------------------
; ADC 處理子程序
;------------------------------------------------------------------------------
ReadADC:
push.d W0
push.d W4
mov ADCBUF0,W0 ; 將ADC 結果讀入W0
mov ADCBUF1,W1 ; 和W1。
asr W0,#2,W4 ; 右移2 位以得到
mov W4,Frequency ; 調制頻率。
sl W1,#5,W4 ; 將AN7 和AN12 的值左移以得到
sl W0,#5,W5 ; 1.15 格式的小數數據。
mpy W4*W5,A ; 將頻率與V/Hz 的商相乘得到
sac A,W0 ; 調制幅值。將結果存儲在W0 中。
mov #28000,W1 ; 限制調制幅值以避免
cp W1,W0 ; 在PWM 調制中由死區引起的
bra GE,NoLimit ; 失真。
mov W1,W0
NoLimit:
mov W0,Amplitude
pop.d W4
pop.d W0
return
;------------------------------------------------------------------------------
; PWM 正弦波調制子程序
;------------------------------------------------------------------------------
Modulation:
push.d W0 ; 保存工作寄存器
push.d W2
push.d W4
push.d W6
push.d W8
push.d W10
; 下面的三條指令初始化TBLPAG 和指針寄存器
; 從而可使用讀表操作來訪問程序存儲器中的正弦波數據。
mov #tblpage(SineTable),W0
mov W0,TBLPAG
mov #tbloffset(SineTable),W0
; 下面的指令塊裝載正弦波調制程序中使用的各種常數和變量。
mov Phase,W1 ; 裝載正弦波表指針
mov #Offset_120,W4 ; 這是120 度偏移的值
mov Amplitude,W6 ; 裝載幅值換算系數
mov #PWM_Scaling,W7 ; 裝載PWM 換算值
mov Frequency,W8 ; 裝載將在每次中斷時與表指針相加的Frequency 常數。
; 這是指針調節代碼。將Frequency 值加給正弦表指針以使指針在正弦表中前移。
; 然后,為此指針加上相應的偏移值以得到相位2 和相位3 的指針。
; 注意:如果需要不同的相位偏移,可以在這里使用其他常數值。
; 加上0x4000 將得到90 度偏移,加上0x8000 將
; 提供180 度偏移。 在此將0x5555 裝入W4 以提供120 度偏移。
add W8,W1,W1 ; 將Frequency 值加給正弦指針
add W1,W4,W2 ; 加上120 度偏移值以得到相位2 的指針
add W2,W4,W3 ; 再加上120 度偏移以得到相位3 的指針
; 該正弦表有64 個值,所以將指針右移
; 以得到一個6 位的指針值。
lsr W1,#10,W9 ; 將相位1 的指針右移以得到高6 位
sl W9,#1,W9 ; 左移一位轉換為字節地址
lsr W2,#10,W10 ; 將相位2 的指針右移以得到高6 位
sl W10,#1,W10 ; 左移一位轉換為字節地址
lsr W3,#10,W11 ; 將相位3 的指針右移以得到高6 位
sl W11,#1,W11 ; 左移一位轉換為字節地址
; 現在,將每個相位的指針與基表指針相加以獲得查找值的絕對表地址。
; 然后將查找值換算為正確的幅值和在有效的占空比范圍之內。
; 下面的指令塊為相位1 計算占空比。為相位2 和相位3 計算占空比的代碼與此相同。
add W0,W9,W9 ; 形成相位1 的表地址
tblrdl [W9],W5 ; 讀相位1 的查找值
mpy W5*W6,A ; 乘以幅值換算系數
sac A,W5 ; 存儲經過換算的結果
mpy W5*W7,A ; 乘以PWM 換算系數
sac A,W8 ; 存儲經過換算的結果
add W7,W8,W8 ; 加上PWM 換算系數以產生50% 的偏移
mov W8,PDC1 ; 寫PWM 占空比
; 下面的代碼塊為相位2 計算占空比。
add W0,W10,W10 ; 形成相位2 的表地址
tblrdl [W10],W5 ; 讀相位2 的查找值
mpy W5*W6,A ; 乘以幅值換算系數
sac A,W5 ; 存儲經過換算的結果
mpy W5*W7,A ; 乘以PWM 換算系數
sac A,W8 ; 存儲經過換算的結果
add W7,W8,W8 ; 加上PWM 換算系數以產生50% 的偏移
mov W8,PDC2 ; 寫PWM 占空比
; 下面的代碼塊為相位3 計算占空比。
add W0,W11,W11 ; 形成相位3 的表地址
tblrdl [W11],W5 ; 讀相位3 的查找值
mpy W5*W6,A ; 乘以幅值換算系數
sac A,W5 ; 存儲經過換算的結果
mpy W5*W7,A ; 乘以PWM 換算系數
sac A,W8 ; 存儲經過換算的結果
add W7,W8,W8 ; 加上PWM 換算系數以產生50% 的偏移
mov W8,PDC3 ; 寫PWM 占空比
; 現在,保存經過調節的正弦波表指針從而能
; 在此代碼的下一次迭代中使用它。
mov W1,Phase
pop.d W10 ; 恢復工作寄存器
pop.d W8
pop.d W6
pop.d W4
pop.d W2
pop.d W0
return ; 從子程序返回
;------------------------------------------------------------------------------
; PWM 和ADC 的設置代碼
;-------------------------------------------------------------------------------------
Setup:
; 在使能PWM 之前需要做的第一件事是配置I/O 并復位電源模塊。
; 該控制板有一個緩沖PWM 控制線的驅動器IC。
; RD11 端口上的有效低電平使能該緩沖器。
; 此電源模塊有一條與端口RE9 相連的高電平有效復位線路。
;clr PORTD
clr PORTE
;mov #0xF7FF,W0 ; 設置RD11 輸出驅動PWM 緩沖器
;mov W0,TRISD ; 使能。
mov #0xFFC0,W0;
mov W0,TRISE ; 設置RE0~RE5為輸出
; 現在,通過驅動復位線并保持幾個微秒來確保電源模塊復位。
/*bset PORTE,#9
repeat #39
nop
bclr PORTE,#9 */
; 設置ADC
mov #0x0404,W0 ; 掃描輸入
mov W0,ADCON2 ; 每次中斷進行2 次采樣/ 轉換
mov #0x0003,W0;
mov W0,ADCON3 ; Tad 是2 個Tcy
clr ADCHS ;
clr ADPCFG ; 將所有A/D 引腳設置為模擬模式
clr ADCSSL ;
bset ADCSSL,#7 ; 使能對AN7 的掃描
bset ADCSSL,#8 ; 使能對AN8 的掃描
mov #0x8066,W0 ; 使能A/D、PWM 觸發和自動采樣
mov W0,ADCON1 ;
bclr IFS0,#ADIF ; 清零A/D 中斷標志位
; 現在設置PWM 寄存器
mov #0x0077,W0 ; 互補模式,使能#1、#2 和#3
mov W0,PWMCON1 ; 三對PWM 輸出
mov #0x000F,W0 ; 器件運行速度為7.38 MIPS 時,將產生2μs 的死區
mov W0,DTCON1
mov #PWM_Scaling, W0 ; 器件運行速度為7.38 MIPS 時,為16KHz PWM 設置周期
mov W0,PTPER
mov #0x0001,W0 ;
mov W0,SEVTCMP ; 將ADC 設置為以特殊事件觸發啟動
mov #0x0F00,W0 ; 將特殊事件后分頻比設置為1:16
mov W0,PWMCON2 ;
mov #0x8002,W0 ; 使能PWM 時基,中心對齊模式
mov W0,PTCON
return ; 從Setup 子程序返回
;..............................................................................
; 子程序:將W 寄存器初始化為0x0000
;..............................................................................
_wreg_init:
CLR W0
MOV W0, W14
REPEAT #12
MOV W0, [++W14]
CLR W14
RETURN
;-------- 所有代碼部分結束---------------------------------------------
.end ; 此文件中程序代碼的結尾

全部回復(4)
正序查看
倒序查看
2011-03-15 17:53
軟件看不懂...但不知你的示波器是用什么檔位測試的?最好能上個波形圖。
0
回復
2011-03-18 09:52
@GreenEnergy
軟件看不懂...但不知你的示波器是用什么檔位測試的?最好能上個波形圖。
我覺得我這個程序本身可能沒什么問題,這是我從microchip網站上下來的,但是網站上的核心芯片用的是DSPIC30F6010,而我用的是4011的芯片,所以我想請問一下您,在這個程序的基礎上改的話,應該有哪些需要改的。謝謝~
0
回復
2013-12-08 15:40
@晨光永遠
我覺得我這個程序本身可能沒什么問題,這是我從microchip網站上下來的,但是網站上的核心芯片用的是DSPIC30F6010,而我用的是4011的芯片,所以我想請問一下您,在這個程序的基礎上改的話,應該有哪些需要改的。謝謝~
可能是表格的采樣值有問題,或采樣值太少
0
回復
wwangjian
LV.4
5
2013-12-10 10:35
用匯編啊,太牛了啊。
0
回復
主站蜘蛛池模板: 夜夜爽www一区二区三区精品 | japanese丰满少妇最高潮 | 综合在线视频精品专区 | 天天干天天日 | 国产又黄又粗又爽又色的视频 | 夫妻性生活视频免费看 | 女教师巨大乳孔中文字幕 | 国产成人精品午夜视频免费 | 97久久偷偷做嫩草影院免费看 | 曰批视频免费40分钟在线视频观看 | 欧美成人手机在线视频 | 人人射在线视频 | 国产另类交视频免费观看 | 免费AV片在线观看蜜芽TV | 国产精品一区二区久久 | 国产成人久久AV免费高清 | 欧美专区中文字幕 | 日本激情动作片免费看 | 国产中文区4幕区2023 | 麻豆免费版在线观看 | babesvideos极品另类 | 中国亚洲gvgay视频在线观看 | 新91入口 | 国产美女久久精品香蕉 | 看全黄大色黄大片美女爽一次 | 亚洲小说区图片区色综合网 | 久久久久久中文字幕2020 | 新67194成人永久网站 | 欧美成人bangbros | 久久第一区 | 九九九国产视频 | 亚洲AV永久无码精品网站 | 美女高潮流白浆娇喘免费网站 | 国产精品三区在线观看 | 一区二区精品在线视频 | 91亚州熟女网站 | 在线观看日韩 | 回复术士重回人生免费观看 | 亚洲国产日韩a综合在线 | 91视频-x99av | 秋霞AV鲁丝片一区二区 |