资源简介
用DSP实现spwm的C语言程序 简单易行
代码片段和文件信息
/*
09.10.23 09.10.24 实现
尝试发出PWM波形采用对称规则采样法。
三相发出的正弦波都很完美。唯一的问题是中断函数执行了160us有点时间太长了
总共也就200us的时间。看能否想办法再精简程序
采用汇编则可采用角度查询法,当然需要360°的sin值表
RC滤波器参数:0.1uF、10k 加上窄脉冲删除 94us
*/
#include “SEED-DEC2407.h“
void initial();
void bad_trap();
unsigned long int gettime();
void look_up_sin ();
/*unsigned int i=0j=0l=0;
unsigned long int k=0t=0N=0M=9;//M值的大小和Fc有关系,
//Ud不变,Uc随着Fc的改变而改变,所以M=Uc/Us值改变。
unsigned long int tm1=0tm2=0tm3=0;
unsigned int ADAcount=0ischange=0result=0F_modu=50;*/
// 一些中间的运算变量,到时候能删的全部删掉
unsigned int Nk; //N为载波比 N=Fc/F_mode=5000/50=100
extern unsigned int sintab[1801];
unsigned int Temp0=0Temp1=0Temp2=0;
signed int Tmp0=0Tmp1=0Tmp2=0Tmp3Tmp4Tmp5;
signed long var1var2var3;
signed int sinwtcoswt;
signed int sinwt_csinwt_bsinwt_acoswt_a;
main()
{
N=5000/50;
initial(); //系统初始化
while(1)
{
*PEDATDIR=*PEDATDIR & 0xFFF9; //输出低电平
}
}
void initial(void)
{
asm(“ setc INTM“); //禁止所有可屏蔽中断
asm(“ clrc SXM“); //抑制符号扩展。SXM=1时,数据通过定标移位器
//传送到累加器时将产生符号扩展
asm(“ clrc OVM“); //OVM清零累加器中结果正常溢出
asm(“ clrc CNF“); //CNF清零B0被设置为数据存储区
*WDCR=0x68 ; //看门狗定时控制寄存器,禁止看门狗
*SCSR1=0x81fe; //系统控制及状态寄存器1,CPU时钟频率设置
//设为40MHZ
//*SCSR2&=0x000e; //SARAM配置为内部数据MEM ?
//*XINT1CR=*XINT2CR=0x8006; //禁止外部中断
//*WSGR=0x0000; //设置外部存储器的接口不插入等待状态
*IFR=0xffff; //清所有系统中断标志
*IMR=0x0002; //开 INT2 中断
*EVAIFRA=0xffff; //清事件管理器A所有中断标志
*EVAIFRB=0xffff; //清事件管理器A所有中断标志
*EVAIFRC=0xffff; //清事件管理器A所有中断标志
*EVAIMRA=0x0200; //T1下溢中断 使能T1PINT
*EVAIMRB=0; //屏蔽所有中断
*EVAIMRC=0; //屏蔽所有中断
/**ADCTRL1= 0x0900; //设置连续转换模式
*MAXCONV = 0x0; //每次完成转换1个通道
*CHSELSEQ1=0x0; // ADCIN0
*ADCTRL2= 0x2000; //启动转换*/
//IO口引脚设置
*MCRA=*MCRA|0x0fc0; //设置PWM1~6引脚
*MCRC=*MCRC & 0xFFF9; //PWM7/8配置为通用输出口,测试用
*PEDATDIR|=0x0600;
//PWM发生器设置(EVA)
*ACTRA=0x0999; //引脚PWM1、3、5低有效,PWM2、4、6高有效。
*T1PR=4000; //T1周期寄存器值为4000,载波频率为5k
*CMPR1=4000; //比较器的比较值,开始时占空比初始值0%
*CMPR2=4000;
*CMPR3=4000;
*T1CNT=0; //定时器1计数寄存器
*DBTCONA=0x08f4; //死区周期值为8,死区预分频系数为32,
//死区值为7×32=224个CPU时钟周期CPU时钟周期为50ns,定时器周期为8×32×25ns 6.4us
*COMCONA=0x8200; //比较控制寄存器A 输出使能,下溢重载
//当计数器T1CNT=0(下溢)时重载
*T1CON=0x0842; //定时器1控制寄存器 F=1连续增减计数方式
asm(“ clrc INTM“); //开总中断
}
void look_up_sin (void)
{
switch(Temp1)
{case 0:
asm(“ L
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7154 2010-03-16 21:06 spwm程序\SPWM.c
文件 13569 2010-03-16 21:06 spwm程序\vectors.asm
目录 0 2010-03-25 09:42 spwm程序
----------- --------- ---------- ----- ----
20723 3
- 上一篇:Windows内存清理工具实现含源码及程序
- 下一篇:二进制文件转换成文本文件
相关资源
- msp430g2553_AD采样及显示C语言程序
- C语言职工工作量统计系统设计
- C语言实验报告(结构体(struct))
- C语言实现FTP服务器
- C语言之逆波兰表达式完整代码(附算
- [数据结构课程设计——C语言描述第
- 光流场计算 c语言 源码 optical flow
- C语言课程设计 《 运动会比赛计分系
- 类C语言的脚本解析执行(使用C++语言
- C语言学生选课系统
- C语言图书管理系统代码.doc
- 英汉翻译程序设计基于c语言
- 数据挖掘中的Apriori算法(C语言版)
- OJ部分习题及解答c语言
- 毕业设计 c语言 贪吃蛇游戏的编制
- 7.4循环码c语言
- C语言课程设计之学生考勤管理系统
- C语言课程设计之实验室设备管理系统
- 用fft求互相关,速度更快,c语言实现
- c语言课程设计报告 会员卡计费系统源
- pwm C语言程序
- 清华大学数据结构C语言版习题答案
- 邮件发送程序客户端----VC实现
- 黄金分割法C语言程序运行过无误的
- C语言实现的AES加密解密
- MSP430_C语言例程注释详细资料
- c和c++库函数快速查询资料
- 基于c语言的语音识别程序
- C语言LCD多级菜单(完整版)
- I2C通信程序的C语言详细
评论
共有 条评论