完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用定时器A0产生三角波,用定时器A1定时来比较三角波和正弦波(查表)。代码如下:
#include #define Threshold0 (int)( 1.0/(256*frequency)*12000*100 ) #define Threshold1 (int)( 1.0/(256*frequency)*12000 ) typedef unsigned int u16; u16 frequency=100;//调制正弦波的频率 u16 flag; float k; const float sin[256]={/*256点正弦查找表*/ 0.00000,0.02464,0.04926,0.07385,0.09840,0.12289,0.14730,0.17163,0.19585,0.21995,0.24391, 0.26773,0.29139,0.31487,0.33816,0.36124,0.38411,0.40674,0.42912,0.45124,0.47309,0.49466, 0.51592,0.53687,0.55749,0.57777,0.59771,0.61728,0.63647,0.65528,0.67370,0.69170,0.70928, 0.72643,0.74314,0.75940,0.77520,0.79053,0.80538,0.81974,0.83360,0.84696,0.85980,0.87212, 0.88391,0.89516,0.90587,0.91603,0.92564,0.93468,0.94315,0.95106,0.95838,0.96512,0.97128, 0.97685,0.98182,0.98620,0.98998,0.99316,0.99573,0.99771,0.99907,0.99983,0.99998,0.99953, 0.99846,0.99680,0.99452,0.99164,0.98817,0.98409,0.97941,0.97414,0.96828,0.96183,0.95479, 0.94718,0.93899,0.93023,0.92091,0.91102,0.90059,0.88960,0.87808,0.86603,0.85344,0.84034, 0.82673,0.81262,0.79802,0.78293,0.76736,0.75133,0.73484,0.71791,0.70054,0.68275,0.66454, 0.64593,0.62692,0.60754,0.58779,0.56767,0.54722,0.52643,0.50533,0.48391,0.46220,0.44022, 0.41796,0.39545,0.37270,0.34973,0.32654,0.30315,0.27958,0.25584,0.23195,0.20791,0.18375, 0.15948,0.13511,0.11065,0.08613,0.06156,0.03695,0.01232,-0.01232,-0.03695,-0.06156, -0.08613,-0.11065,-0.13511,-0.15948,-0.18375,-0.20791,-0.23195,-0.25584,-0.27958,-0.30315, -0.32654,-0.34973,-0.37270,-0.39545,-0.41796,-0.44022,-0.46220,-0.48391,-0.50533,-0.52643, -0.54722,-0.56767,-0.58779,-0.60754,-0.62692,-0.64593,-0.66454,-0.68275,-0.70054,-0.71791, -0.73484,-0.75133,-0.76736,-0.78293,-0.79802,-0.81262,-0.82673,-0.84034,-0.85344,-0.86603, -0.87808,-0.88960,-0.90059,-0.91102,-0.92091,-0.93023,-0.93899,-0.94718,-0.95479,-0.96183, -0.96828,-0.97414,-0.97941,-0.98409,-0.98817,-0.99164,-0.99452,-0.99680,-0.99846,-0.99953, -0.99998,-0.99983,-0.99907,-0.99771,-0.99573,-0.99316,-0.98998,-0.98620,-0.98182,-0.97685, -0.97128,-0.96512,-0.95838,-0.95106,-0.94315,-0.93468,-0.92564,-0.91603,-0.90587,-0.89516, -0.88391,-0.87212,-0.85980,-0.84696,-0.83360,-0.81974,-0.80538,-0.79053,-0.77520,-0.75940, -0.74314,-0.72643,-0.70928,-0.69170,-0.67370,-0.65528,-0.63647,-0.61728,-0.59771,-0.57777, -0.55749,-0.53687,-0.51592,-0.49466,-0.47309,-0.45124,-0.42912,-0.40674,-0.38411,-0.36124, -0.33816,-0.31487,-0.29139,-0.26773,-0.24391,-0.21995,-0.19585,-0.17163,-0.14730,-0.12289, -0.09840,-0.07385,-0.04926,-0.02464,-0.00000}; //timerA0产生三角波,TimerA1作为定时器 void main() { WDTCTL = WDTPW + WDTHOLD;//关闭看门狗 BCSCTL3 |= LFXT1S_2; CCTL0 |= CCIE; CCR0 = Threshold0; TA0CTL = TASSEL_1 + TACLR + MC_3;//增减计数模式 TA1CCTL0 |= CCIE; TA1CCR0 = Threshold1; TA1CTL = TASSEL_1 + TACLR + MC_1;//增计数模式 k = Threshold0/2.0; //k是一个比例系数 P1SEL &=~ ( BIT0 + BIT1 );//P10和P11是IO口 P1DIR |= BIT0 + BIT1;//P10和P11是输出口 P1OUT |= BIT0; P1OUT &=~ BIT1; _EINT();//使能中断 while(1); } #pragma vector=TIMER1_A0_VECTOR __interrupt void Timer1_A(void) { static int i=-1; i=( i + 1 )%256; if( k*(sin+1.0)>TA0R )//当正弦波在三角波上面时,P10输出高电平,P11输出低电平 { if( flag == 0 ) { P1OUT |= BIT0; P1OUT &=~ BIT1; flag = 1; } } else //当正弦波在三角波下面时,P10输出低电平,P11输出高电平 { if( flag == 1 ) { P1OUT &=~ BIT0; P1OUT |= BIT1; flag = 0; } } } #pragma vector=TIMER0_A0_VECTOR //表示给这个向量表中的【定时器中断】所对应的地址进行赋值,并赋值为函数void Port_1(void)的首地址。 __interrupt void Timer0_A (void) //定时器A的CC0中断处理程序 必须是没有返回值的 { } 但是输出波形不是稳定的SPWM波 这样导致逆变电路输出的波形也不对,望大神赐教。 |
|
相关推荐
2个回答
|
|
A0怎么输出三角波的呢?
|
|
1 条评论
|
|
A0怎么输出三角波的呢?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
776 浏览 0 评论
2265 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2124 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1682 浏览 0 评论
2786 浏览 3 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5518 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-19 18:23 , Processed in 0.459320 second(s), Total 43, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号