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

📄 pwm_drv.asm

📁 这个是关于实现同步电机FOC的控制程序源代码
💻 ASM
字号:
;======================================================================
; 文件名:	pwm_drv.asm
;
; 模块名:	FC_PWM_DRV
;
; 初始化程序名: FC_PWM_DRV_INIT
;
; 公司:	达盛科技
;
; 功能描述:	根据输入的占空比参数产生PWM波,也可以修改PWM周期
;
;			        |~~~~~~~~~~~~~~~~|
; Mfunc_c1	o------>|		         |----->o  CMPR1 (EV register)
; Mfunc_c2	o------>|  FC_PWM_DRV    |----->o  CMPR2 (EV register)
; Mfunc_c3	o------>|		         |----->o  CMPR3 (EV register)
; Mfunc_p	o------>|                |----->o  T1PER (EV register)
; n_period  o------>|________________|
;
; 目标板CPU:		x240/243/2407 
;
;=====================================================================================
; 修改纪录:
;-------------------------------------------------------------------------------------
; 最后更新日期:2005.6.22	版本号: Ver 1.0	
;======================================================================

;----------------------
; 变量声明
;----------------------
;		.ref FC_PWM_DRV,FC_PWM_DRV_INIT			;函数调用
;		.ref Mfunc_c1,Mfunc_c2,Mfunc_c3,Mfunc_p	;输入参量
;		.ref n_period							;输入

;---------------------------------
; 变量定义
;---------------------------------
		.include "x24x_app.h"

;-------------------------
; 默认 PWM 周期
;-------------------------
PWM_PERIOD	.set	100		; PWM 周期 单位uS (10KHz)
;PWM_PERIOD	.set	67		; PWM 周期 单位uS (15KHz)

;-------------------------
; 变量声明
;-------------------------
		.def FC_PWM_DRV,FC_PWM_DRV_INIT			;函数调用
		.def Mfunc_c1,Mfunc_c2,Mfunc_c3,Mfunc_p	;输入参量
		.def n_period							;输入参量

;------------
; 变量定义
;------------
Mfunc_c1	.usect "pwm_drv",1	; Phase 1 mod function Q15
Mfunc_c2	.usect "pwm_drv",1  ; Phase 2 mod function Q15
Mfunc_c3	.usect "pwm_drv",1  ; Phase 3 mod function Q15
Mfunc_p		.usect "pwm_drv",1	; Period mod function Q15
n_period	.usect "pwm_drv",1  ; Nominal period/compare value
m_period	.usect "pwm_drv",1  ; Modulated period

;------------------------------
; 参数设置
;------------------------------

T1PER_	.set	PWM_PERIOD*20		; 10KHz pwm 对应计数周期数  对应40MHz系统时钟 
;T1PER_	.set	PWM_PERIOD*15		; 10KHz pwm 对应计数周期数  对应30MHz系统时钟
T1CON_	.set	1000100001000000b	; 对称 PWM
DBTCON_	.set	09E8h				; 死区D/B = 1.8uS 对应40MHz系统时钟
ACTR_	.set	100110011001b		; 011001100110b; 1/3/5 低有效, 2/4/6 高有效
COMCON_	.set	1000001000000000b	; 使能比较,使能pwm	

;----------------------------------------------------------------------
; 初始化
;----------------------------------------------------------------------
FC_PWM_DRV_INIT
		LDP	#T1PER>>7
		SPLK	#T1PER_,T1PER	;周期寄存器初始化		
		SPLK	#T1CON_,T1CON	;
		SPLK	#DBTCON_,DBTCON	;信号死区初始化
		SPLK	#ACTR_,ACTR		;比较动作寄存器初始化
		SPLK	#COMCON_,COMCON	;

		ldp	#OCRA>>7			; 设置管脚
		LACC	OCRA
		OR	#0000111111000000b
		SACL	OCRA

		ldp	#n_period
		SPLK	#T1PER_,n_period
		SPLK	#7FFFh,Mfunc_p
		RET

;----------------------------------------------------------------------
; 控制程序
;----------------------------------------------------------------------
FC_PWM_DRV:
		ldp	#Mfunc_p	; 调制周期
		LT	Mfunc_p     
		MPY	n_period	; Mfunc_p*n_period/2
		PAC			;
		add	n_period,15	; 用 n_period/2 偏置
		SACH	m_period; 保存备用
		ldp	#T1PER>>7	;
		sach	T1PER	; 保存
		
		ldp	#Mfunc_c1	; 调制通道1
		LT	Mfunc_c1
		MPY	m_period	; Mfunc_c1*m_period/2
		PAC			;
		add	m_period,15	; 用 m_period/2 偏置
		ldp	#CMPR1>>7
		SACH	CMPR1	; 保存

		ldp	#Mfunc_c2	; 调制通道2
		LT	Mfunc_c2
		MPY	m_period	; Mfunc_c2*m_period/2
		PAC			;
		add	m_period,15	; 用 m_period/2 偏置
		ldp	#CMPR2>>7
		SACH	CMPR2	; 保存

		ldp	#Mfunc_c3	; 调制通道3
		LT	Mfunc_c3
		MPY	m_period	; Mfunc_c3*m_period/2
		PAC			;
		add	m_period,15	; 用 m_period/2 偏置
		ldp	#CMPR3>>7
		SACH	CMPR3	; 保存

		RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -