时时彩时时彩后一稳赚公式计划要怎么做啊 430单片机产生SPWM波,设定TA0C

MSP430单片机产生SPWM波 - gaon的日志 - 电子工程世界-论坛
请完成以下验证码
MSP430单片机产生SPWM波
热度 1已有 3600 次阅读 14:05
MSP430在功率电子方面的一个应用,由MSP430产生SPWM波的主程序,由于程序较多所以完整的程序在附件里。这个程序是原来做比赛的时候用的,单片机出来的波形经过整形再经过光耦以及其他变换后用来驱动后级的全桥用的。不过用MSP430来做这个感觉有点吃力,MSP430F1611的主频只有8M,细化占空比时微调不好弄。编程也有点复杂。如果你有更好的解决方案或者思路希望能一起探讨。互相交流,共同进步~
函数名:&&SPWM
函数功能: TA定时产生高低电平,改变定时时间即改变占空比
#include&&
#include \"math.h\"
#include \"lcdcaidan.h\"
#include \"lcd.h\"
#include \"SHUZHI.h\"
/******************************函数声明*****************************************/
void Clock_Init();
void time_js();
void TA_init();
void TB_init();
void&&io_init();
/*******************************宏定义******************************************/
#define&&uchar unsigned char
#define&&uint unsigned int
#define keyin (P2IN&0x1f) //注P2.0~P2.4为输入
#define PI 3.1415926
#define shuzhi 50.0
/***************************变量定义*******************************************/
static&&float Um=1.0;
uchar doit=0;
unsigned int i,j,TA_flag=1;
unsigned int k=0;
static float f=400.0;
float time1[50],time3[50];
int time2[50],time4[50];
int time[51][3];
/*======================主函数=====================*/
void main(void)
&&WDTCTL = WDTPW + WDTHOLD;& && & //关看门狗
&&Clock_Init();
&&io_init();
&&time_js();
&&TA_init();&&
&&_EINT();
&&while(1);
/*================ 初始化IO===========================
函数名称:
函数功能:
函数参数:
================================================*/
void&&io_init()
&&P1DIR |= BIT2;& && && && && && && && && & // P1.2 output
/*===================数据处理=========================
函数名称: 计算SPWM的占空比值,即是定时器A产生PWM的占空比值
函数功能:
函数参数:t=(Um/W)*(cos (k-1/N )*pi - cos (k/N)*pi )
=================================================*/
void time_js()
&&for(k=1;k<=k++)
& &&&time1[k]=((Um/(2*PI*f))*(cos((k-1)*PI/shuzhi)-cos(k*PI/shuzhi))*.6;
&&for(k=1;k<=k++)
& &&&time3[k]=(((/f/shuzhi/2.0)-time1[k])*0.5);
&&for(k=1;k<=k++)
& &&&time2[k]=(int)time1[k];
&&for(k=1;k<=k++)
& &&&time4[k]=(int)time3[k];
&&for(k=1;k<=k++)
& && &time[k][0]=time4[k];//低电平
& && &time[k][1]=time2[k];//高电平
& && &time[k][2]=time4[k];
/*===============TA的初始化设置=========================
函数名称: void TA_dingshi()
函数功能:定时器A捕获设置,用于捕获上升沿
函数参数:
===========================================*/
void TA_init()
&&TACCR0 = 5;
&&TACTL = TASSEL_2 + MC_1;&&
&&TACCTL0 = CCIE;
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
& &if(TA_flag==150)
& &&&TA_flag=1;
& &i=TA_flag/3;
& &j=TA_flag%3;
& &if(i<50)
& &else if(i>50)
& &TACCR0 = time[j];
& &if(j==1)
& && &//P1OUT |= BIT2;
& &&&P1OUT &= ~BIT2;
& && &//P1OUT &= ~BIT2;
& && &P1OUT |= BIT2;
& &TA_flag++;& &
/******************************时钟模块*****************************************
函数功能:初始化XT2时钟函数
*******************************************************************************/
void Clock_Init()
& &uint iq0;
& &BCSCTL1 &= ~XT2OFF;& &&&//打开XT2振荡器
& && &IFG1 &= ~OFIFG; //清除振荡器失效标志
& && &for (iq0 = 0xFF; iq0 > 0; iq0--); //延时,等待XT2起振
& &while ((IFG1 & OFIFG) != 0); //判断XT2是否起振
& &BCSCTL2 = SELM_2 + SELS;& && &&&//选择MCLK、SMCLK为XT2
& && && && && && && && && && && && && & //为高速时钟 不分频,均为8M
& && && && && &
作者的其他最新日志
评论 ( 个评论)
EEWORLD 官方微信
EE福利 唾手可得
Powered by用正弦表怎么生成SPWM
<em style="color:#999;font-size:12 margin-left:10" id="authorposton13-8-31 09:33:32&nbsp
小弟最近想做spwm&&原理懂得 等面积原则那个 在网上搜了正弦表生成器 不知道怎么转换成 开关时间啊(怎么利用那个写程序)?望大侠指点下&&谢谢
用Time_A或者Time_B
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
用Time_A或者Time_B
首先感谢您 你说的太简单了。。。我是说怎么转化为TA的占空比
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:
fs=195;& && && && && &%设定采样频率
N=195;& && && && && & %采样点数为195
f1=1;& && && && && & %这个f1可以不要
x=round(.8*sin(2*pi*f1*t))));& & %生成正弦信号,并取整
x就是比较寄存器的值,总共195个,下溢中断赋值就行了
2.方法二是在dsp中产生正弦表,计算占空比,计算比较寄存器的值
核心程序如下:
while (n&=195)&&
& & q=n*2*PI;& && &
& & q/=195;
& & j=sin(q);& &&&
& & l=1875*(1+M*j);//M为调制比& &&&//计算占空比表达式
& &if(l&=375&l&=3375)
& &&&sin_table[n]=l;&&
& && &&&if(l&3375)
& && && &sin_table[n]=3375;
& && &&&else
& && && &sin_table[n]=375;
& && &&&}&&
具体吧!这些程序都是我编的,我就是这么做的。两种都可以。
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:
您好!我现在要生成spwm波,但是不知道占空比怎么计算?载波pWM的频率是40KHZ,调制信号正弦波的频率是2KHZ,pWM的幅度是从0-3.3V。不知道有没有相关的计算公式?
按正弦表来刷TACCRx的值。占空比100%就是1,50%就是0,0%就是-1,按照正弦表的值计算占空比,再计算TACCRx的值
楼主 写好了吗 ?不知道你写了关于 PI校正以后的SPWM吗?交流一下
给你个软件&&我也是从论坛下载的
23:58 上传
点击文件名下载附件
下载积分: 积分 -1 分
167.66 KB, 下载次数: 709, 下载积分: 积分 -1 分
软件不能用啊{:1:}{:1:}
很久没登了 我去年写的&&你们参考一下吧
#include &msp430x16x.h&
int flag = 1;
int spwm[256]=
& &1& &, 5&&,& &9& &, 13&&,&&17& & ,21&&,&&24&&,&&28&&,
& &32&&,&&36 ,& &40 ,& &43 ,& &47&&,&&51 ,& &55,& & 58 ,& &62,
& & 66&&,&&70&&,&&73& &, 77&&,&&81,& & 85& &, 88&&,&&92&&,&&96,
& & 99&&, 103,& &106&&, 110 ,&&114& &,117,& &121,& &124,
& &128&&, 131&&, 135 ,&&138,& &141&&, 145& &,148& &,152&&, 155 ,
& &158&&, 162& &,165 ,&&168 ,&&171&&, 174,& &178 ,&&181,
& &184& &,187&&, 190,& &193,& &196,& &199 ,&&202&&, 205&&, 208 ,
& &210& &,213&&, 216,& &219,& &221 ,&&224 ,&&227 ,&&229,
& &232& &,234&&, 237 ,&&239 ,&&242&&, 244 ,&&247 ,&&249 ,&&251 ,
& &253&&, 256&&, 258&&, 260&&, 262&&, 264 , 266 ,&&268,
& &270&&, 272 ,&&274 ,&&276&&, 277 ,&&279&&, 281&&, 282&&,
& &284&&, 285 ,&&287 ,&&288 ,&&290,& &291,& &293& &,294,& &295,
& &296&&, 297& &,299,& &300,& &301&&, 302,& &303&&, 303 ,&&304 ,
& &&&305&&, 306 ,&&307&&, 307&&, 308 ,&&308&&, 309,& &309,
& &310&&, 310 ,&&311 ,&&311&&, 311 ,&&311 ,&&311,& &311,
& &311&&, 311 ,&&311&&, 311& &,311&&, 311&&, 311&&, 311 ,&&310,
& &310 ,&&309&&, 309,& &308&&, 308 ,&&307,& &307,& &306,
& &305& &,304 ,&&304 ,&&303 ,&&302&&, 301&&, 300,& &299 ,&&298,
& &296 ,&&295 ,&&294& &,293&&, 291& &,290&&, 289,& &287& &,286 ,
& &284& &,282 ,&&281& &,279&&, 277&&, 276,& &274 ,&&272,
& &270&&, 268&&, 266 ,&&264&&, 262 ,&&260 ,&&258 ,&&256,
& &254 ,&&251,& &249&&, 247 ,&&244 ,&&242 ,&&240,& &237&&, 235,
& &232&&, 229,& &227 ,&&224& &,222&&, 219,& &216& &,213,& &211&&,
& &208& &,205 ,&&202,& &199,& &196 ,&&193 ,&&190& &,187,
& &184&&, 181&&, 178&&, 175& &,171 ,&&168&&, 165&&, 162 ,&&158,
& &155&&, 152& &,148 ,&&145 ,&&142,& &138 ,&&135 ,&&131,
& &128& &,124,& &121&&, 117&&, 114,& &110&&, 107 ,&&103,& & 99 ,
& &96& & ,92&&,&&88& &, 85&&,&&81&&,&&77 ,& &74,& & 70,
& & 66 ,& &62 ,& &59&&,&&55&&,&&51&&,&&47&&,&&44 ,& &40 ,& &36,
& & 32& &, 28 ,& &25&&,&&21,& & 17 ,& &13& &,&&9&&,& &5,& & 2
void TimerB_Init()
&&P4SEL |= BIT2;& && && && && && && && && & // Set for Timer A1
&&P4DIR |= BIT2;
&&P4SEL |= BIT1;& && && && && && && && && & // Set for Timer A1
&&P4DIR |= BIT1;
&&TACCR0 = 312;
&&TBCCR0 = 312;& && && && && && && && && && & // Init TACCR0 w/ sample prd=CCR0+1
&&TBCCR1 = 0;&&
&&TBCCR2 = 0;& &
&&TBCCTL1 = OUTMOD_7;& && && && && && && &&&// Set/reset
&&TBCCTL2 = OUTMOD_7;& && && && && && && &&&// Set/reset
&&CCTL0= CCIE;
&&TBCTL = TBCLR + MC_1 + TBSSEL_2;& && && & // clear TAR, up mode*/
&&TACTL = TACLR + MC_1 + TASSEL_2;& && && & // clear TAR, up mode*/
void ini_sys(void)
& & BCSCTL1 &= ~XT2OFF;& && && && && && && &&&// XT2on
& && &IFG1 &= ~OFIFG;& && && && && && && && && &// Clear OSCFault flag
& && &for (char i = 0xFF; i & 0; i--);& && && && && &// Time for flag to set
& && &while ((IFG1 & OFIFG));& && && && && && & // OSCFault flag still set?
& & BCSCTL2=SELM_2+SELS;
void main()
& &WDTCTL=WDTPW+WDTHOLD;
& &ini_sys();&&
& &TimerB_Init();
& &_EINT();
& &while(1)
& && &&&if( flag == 1)
& && && & TBCCR2 = 0;
& && && & TBCCR1=spwm[n];
& && &&&}& &
& && &&&else
& && && & TBCCR1 = 0;&&
& && && & TBCCR2 = spwm[n%256];
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
& & if((n%256) == 0)
& && &flag = 1-
& & if(n == 512)
& && &n = 0;
楼主你现在做的怎么样,用什么做的,能不能给的建议
楼主你现在做的怎么样,用什么做的,能不能给的建议
我用430单片机做的,效果也不是特别好,做了好久了的!都忘了
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:
可不可以留下联系方式,如qq,有问题请教。
给你个软件&&我也是从论坛下载的
这个软件生成的数组怎么写到单片机里?要算法是什么?
直接建立一个数组复制进去啊
查表法最简单。
那些数字用excel简单拖公式就可以得到了。
童鞋,你问对人了。
正弦表的生成有两种办法
1.利用matlab:程序如下:
l=1875*(1+M*j),你这里的1875是怎么来的,还有后边的那个375和3375,这些值是怎么计算出来的
谢谢楼主,赞一个~
~~~~~~~~~~~~~~~~~~~~~~~~~~
站长推荐 /7
Powered by}

我要回帖

更多关于 时时彩后一稳赚公式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信