文档库 最新最全的文档下载
当前位置:文档库 › spwm_instruction

spwm_instruction

SPWM

#include"DSP281x_Device.h"
正弦表[512] 0-32767 q15
定义变量,声明函数

void main(void)
初始化系统时钟
初始化PIE中断(使用EVA定时器1的下溢中断)
初始化PIE向量表
初始化通用通用输入输出接口
初始化串行通信(未使用)
初始化事件管理器(EVA)
初始化ADC(未使用)
关中断
初始化IER IFR
将终端服务子程序地址放入PIE中断向量表
开中断(PIE对应位置的中断使能,CPU_INT2使能,全局中断使能)
选择异步调制、同步调制或分段同步调制
给定转速
Motor_Start()
等待中断
end main

unsigned int U_DIV_CAL( long unsigned int udividend,unsigned int udivisor )
无符号除法

Motor_Start()
开启事件管理器,开启输出口引脚

void openloop()
------------------[f=100相当于1Hz]
------------------[(50*100)/1500(q10)=3413](基频以下调速)
------------------[给定参考频率,实际参考频率缓缓增加,电机启动]
dd_f=目标参考频率/达到目标参考频率的时间(上升至目标频率过程中单位时间频率上升量)
限制最小目标和实际参考频率
根据当前实际参考频率选择载波比N
d_t(三角波的真实周期)(q18/q20/q22)
d_f(每一次下溢中断实际参考波频率上升量=三角波周期*dd_f)(q14)
d_theta(q(11+7)=q18)=三角波周期/实际参考正弦周期 (每一次下溢中断移动的相角在360中的“百分比”)
计算EvaRegs.T1PR 即t1per?????????3662???????????
实际参考波频率越小,增速越慢
实际参考波频率小于目标参考波频率,增加。
theta(int32)递增
index=theta>>9
uf()
end openloop

uf()
计算u_out????????????3355?????????????????

SPWM()
openloop()
index取自身低九位,得到theta小数点后九位(q9) index范围在[0,511]之间
theta的百分比转化到了512个数之中
查出sin(index)和sin(index-120度)
查表值*=参考正弦幅值
算出三个比较单元的值

interrupt void t1uf_int(void)
清楚IFR中INT2位
使能PWM
SPWM()
开中断

相关文档