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

📄 pwm_dc_drv.asm

📁 这是关于有刷直流电动机PWM控制方案的源码
💻 ASM
字号:
;======================================================================
; 文件名:	pwm_dc_drv.asm
;
; 模块名:	DC_PWM_DRV
;
; 初始化程序名: DC_PWM_DRV_INIT
;
; 公司:	达盛科技
;
; 功能描述:	根据输入的占空比参数产生PWM波,也可以修改PWM周期,用于
;           直流电动机
;
;			        |~~~~~~~~~~~~~~~~|
;  Mfunc	o------>|		         |----->o  CMPR1 (EV register)
; 					|  DC_PWM_DRV    |----->o  CMPR2 (EV register)
; 					|		         |
; Mfunc_p	o------>|                |----->o  T1PER (EV register)
; n_period  o------>|________________|
;
; 目标板CPU:		x2407 
;
;=====================================================================================
; 修改纪录:
;-------------------------------------------------------------------------------------
; 最后更新日期:2005.6.22	版本号: Ver 1.0	
;======================================================================

;----------------------
; 变量声明
;----------------------
;		.ref FC_PWM_DRV,FC_PWM_DRV_INIT			;function calls
;		.ref Mfunc,Mfunc_p 						;Inputs
;		.ref n_period							;Input

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

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

;-------------------------
; 变量声明
;-------------------------
		.def DC_PWM_DRV,DC_PWM_DRV_INIT			;function calls
		.def Mfunc,Mfunc_p 						;Inputs
		.def n_period							;Input
;------------
; 变量定义
;------------
Mfunc		.usect "pwm_drv",1	; input mod function Q15
Mfunc_p		.usect "pwm_drv",1	; Period mod function Q15
tmpy		.usect "pwm_drv",1	;
n_period	.usect "pwm_drv",1  ; Nominal period/compare value
m_period	.usect "pwm_drv",1  ; Modulated period

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

T1PER_	.set	PWM_PERIOD*20		; *1000nS/(2*25nS)  对于 40MHz 系统时钟
;T1PER_	.set	PWM_PERIOD*15		; *1000nS/(2*33nS)  对于 30MHz 系统时钟
T1CON_	.set	1000100001000000b	; 对称 PWM
DBTCON_	.set	09E8h				; 死区D/B = 1.8uS   对于 40MHz 系统时钟
ACTR_	.set	111110011001b		; 1/3 高有效, 2/4 低有效,5/6强制0 ab相输出
;ACTR_	.set	100110011111b		; 1/3 高有效, 2/4 低有效,5/6强制0 bc相输出
COMCON_	.set	1000001000000000b	; 使能比较操作,使能比较输出
                                    ; 比较寄存器和动作控制寄存器
                                    ; 重载条件均为定时器T1下溢    	

;----------------------------------------------------------------------
; 初始化
;----------------------------------------------------------------------
DC_PWM_DRV_INIT
		LDP	#T1PER>>7
		SPLK	#T1PER_,T1PER		;设置pwm周期		
		SPLK	#T1CON_,T1CON		;设置对称pwm输出
		SPLK	#DBTCON_,DBTCON		;设置死区时间
		SPLK	#ACTR_,ACTR			;设置比较器输出有效电平
		SPLK	#COMCON_,COMCON		;设置比较器动作条件

		ldp	#OCRA>>7				; 设置pwm引脚功能
		LACC	OCRA				;
		OR	#0000111111000000b		;
		SACL	OCRA				;

		ldp	#n_period				;输入pwm周期
		SPLK	#T1PER_,n_period	;
		SPLK	#7FFFh,Mfunc_p
		RET
;----------------------------------------------------------------------
; 控制程序
;----------------------------------------------------------------------
DC_PWM_DRV:
		ldp	#Mfunc_p	; modulate period
		LT	Mfunc_p     
		MPY	n_period	; Mfunc_p*n_period/2
		PAC			;
		add	n_period,15	; offset by n_period/2
		SACH	m_period	; save for later reference
		ldp	#T1PER>>7	;
		sach	T1PER	; 保存定时周期
		
		ldp	#Mfunc		; Modulate channel one
		LT	Mfunc
		MPY	m_period	; Mfunc_c1 x m_period/2
		PAC				;
		add	m_period,15	; offset by m_period/2

		ldp	#tmpy
		sach tmpy
		ldp	#CMPR1>>7
		BLDD #tmpy,CMPR2	; 采用ab相输出
;		BLDD #tmpy,CMPR2	; 采用bc相输出
		LDP #m_period
		LACC m_period
		SUB  tmpy,0
		LDP #CMPR2>>7
		SACL CMPR1			;采用ab相输出
;		SACL CMPR3			;采用bc相输出

		RET

⌨️ 快捷键说明

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