vi51 发表于 2011-10-25 19:55:37

请坛中的兄弟指点如何在春风电源2。2中的Key2Sign实现18V-30V的正弦波电压或特定数

我认识了点汇编,并未用过STM32编程,但又想开发数控电源的功能,请坛友帮忙,我试写如下程序:
/* Private variables ---------------------------------------------------------*/
const unsigned int sin_table=
{
0x8000,0x8323,0x8647,0x8969,0x8c8a,0x8fa9,0x92c5,0x95df,0x98f5,0x9c07,0x9f16,0xa21f,
0xa523,0xa821,0xab19,0xae0b,0xb0f5,0xb3d8,0xb6b3,0xb985,0xbc4f,0xbf0f,0xc1c6,0xc472,
0xc714,0xc9ab,0xcc37,0xceb7,0xd12a,0xd392,0xd5ec,0xd839,0xda79,0xdcaa,0xdece,0xe0e2,
0xe2e8,0xe4df,0xe6c6,0xe89d,0xea64,0xec1b,0xedc1,0xef56,0xf0da,0xf24c,0xf3ad,0xf4fd,
0xf63a,0xf765,0xf87d,0xf983,0xfa76,0xfb57,0xfc24,0xfcde,0xfd85,0xfe19,0xfe99,0xff06,
0xff5f,0xffa5,0xffd7,0xfff5,0xffff,0xfff6,0xffd9,0xffa9,0xff64,0xff0d,0xfea1,0xfe22,
0xfd90,0xfcea,0xfc31,0xfb65,0xfa86,0xf993,0xf88f,0xf777,0xf64e,0xf512,0xf3c4,0xf264,
0xf0f2,0xef70,0xeddc,0xec37,0xea81,0xe8bb,0xe6e5,0xe4ff,0xe309,0xe104,0xdef1,0xdcce,
0xda9e,0xd85f,0xd613,0xd3b9,0xd153,0xcee0,0xcc61,0xc9d6,0xc740,0xc49e,0xc1f3,0xbf3d,
0xbc7d,0xb9b4,0xb6e2,0xb408,0xb125,0xae3c,0xab4a,0xa853,0xa555,0xa251,0x9f48,0x9c3a,
0x9928,0x9612,0x92f9,0x8fdc,0x8cbe,0x899d,0x867b,0x8357,0x8034,0x7d10,0x79ed,0x76ca,
0x73a9,0x708a,0x6d6d,0x6a54,0x673d,0x642b,0x611c,0x5e12,0x5b0e,0x580f,0x5517,0x5225,
0x4f3a,0x4c57,0x497b,0x46a8,0x43de,0x411d,0x3e66,0x3bb9,0x3916,0x367e,0x33f2,0x3171,
0x2efd,0x2c95,0x2a3a,0x27ec,0x25ab,0x2379,0x2154,0x1f3f,0x1d38,0x1b40,0x1958,0x1780,
0x15b8,0x1400,0x1259,0x10c3,0xf3e,0xdca,0xc68,0xb18,0x9d9,0x8ad,0x794,0x68c,
0x598,0x4b6,0x3e8,0x32c,0x284,0x1ef,0x16d,0xff,0xa5,0x5e,0x2b,0xb,
0x0,0x8,0x23,0x53,0x96,0xec,0x156,0x1d4,0x265,0x30a,0x3c2,0x48d,
0x56a,0x65b,0x75f,0x875,0x99d,0xad8,0xc25,0xd84,0xef4,0x1076,0x1209,0x13ad,
0x1561,0x1726,0x18fb,0x1ae0,0x1cd5,0x1ed9,0x20eb,0x230d,0x253d,0x277a,0x29c6,0x2c1e,
0x2e84,0x30f6,0x3374,0x35fe,0x3894,0x3b35,0x3de0,0x4095,0x4354,0x461c,0x48ee,0x4bc8,
0x4ea9,0x5193,0x5483,0x577b,0x5a78,0x5d7c,0x6084,0x6392,0x66a4,0x69b9,0x6cd3,0x6fef,
0x730d,0x762e,0x7950,0x7c73
};

int sin-out(void)

unsigned int i
while(l)
{
for(i=0;i<256;i++)
{
DAC_SetChannel1Data(DAC_Align_12b_L, sin_table);
//DAC_SetChannel2Data(DAC_Align_12b_L, 0xffff);
DelayI(20)
}

packer 发表于 2011-10-25 22:14:00

大体思路是这样,事先存好一个电压和持续时间信息的表,依次去读并输出。

为了波形精确,应单独设个定时器,DA输出放在定时中断里。

我也没用春风电源试过,纸上谈兵。

a21563 发表于 2011-10-26 11:23:26

沙发

vi51 发表于 2011-10-27 20:02:02

我看了几次春风电源的程序,是不是将正弦波幅值量化为浮点数再转为0X的数制的数组,然后依序执行类似SetDacU(),OutPut()子函数便可以输出正弦波?

vi51 发表于 2011-10-28 22:09:19

另一试写的程序;
void sinout (void)
{
unsigned int i;

for(i=0;i<32;i++)
Dacu=(u16)sin_table[];
DacI=500;
Out_on();
delayI(10);
SetDacu((float)Dacu/100);
SetDacI((float)DacI/1000);
delayI(1000);
}
页: [1]
查看完整版本: 请坛中的兄弟指点如何在春风电源2。2中的Key2Sign实现18V-30V的正弦波电压或特定数