专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
用正弦表怎么生成SPWM?
2019-07-15 15:36
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
16548
19
990
小弟最近想做spwm 原理懂得 等面积原则那个 在网上搜了正弦表生成器 不知道怎么转换成 开关时间啊(怎么利用那个写程序)?望大侠指点下 谢谢
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
小粮zz
2019-07-17 07:02
很久没登了 我去年写的 你们参考一下吧
430单片机
#include <msp430x16x.h>
int n=0;
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
do
{
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)
{
n++;
if((n%256) == 0)
{
flag = 1- flag;
}
if(n == 512)
{
n = 0;
}
}
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
430单片机
#include <msp430x16x.h>
int n=0;
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
do
{
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)
{
n++;
if((n%256) == 0)
{
flag = 1- flag;
}
if(n == 512)
{
n = 0;
}
}
一周热门 更多>