?? dec2812_da.c
字號(hào):
#include "string.h"
#include "math.h"
#include "DSP28_Device.h"
#include "DEC2812_DA.h"
/****************************************************************************
* 函數(shù): void da_setup(int tongdao,int kind,int freq,int value)
* 目的: 設(shè)置DA轉(zhuǎn)換
* 輸入:
tongdao 通道
kind da轉(zhuǎn)換波形方式: 0:正弦波
* 1: 方波
* 2:三角波
* 3:直流
freq 波形頻率
value 幅值
* 輸出: 無(wú)
* 參數(shù): dac7724cs: dac7724使能
loadcs: dac7724轉(zhuǎn)換使能
timer_sum: 定時(shí)器計(jì)數(shù)次數(shù) long
angle: 角度
angle_diff: 角度差
da_kind: da種類
da_value: da幅值
***************************************************************************/
void da_setup(int tongdao,int kind,int freq,int value)
{
float temp;
int i;
switch(kind)
{
case 0: /*正弦*/
if(tongdao >= 0)
{
if(tongdao < 4) /* 通道范圍 */
{
if(freq >= 40)
{
// if(freq < DA_TIMER_NUM) /*頻率范圍*/
{
tongdao_flag[tongdao] = 1; /* 通道設(shè)置標(biāo)志 */
timer_sum[tongdao] = DA_TIMER_NUM / freq; /* 一個(gè)周波的DA輸出點(diǎn)數(shù) */
angle_diff = 6.2831852 / timer_sum[tongdao]; /* 每個(gè)點(diǎn)與上一點(diǎn)的角度差 */
angle = 0; /* 初始化角度為0 */
da_kind[tongdao] = kind; /* 記錄該通道的DA種類 */
da_value = value; /* 幅值 范圍0~10000 */
da_value = da_value / DA_SETVALUE * 2048; /* 將幅值轉(zhuǎn)化成系統(tǒng)可識(shí)別的數(shù)值 */
/* 做系數(shù)表,每個(gè)值代表一個(gè)周波內(nèi)DA輸出的點(diǎn) */
for(i = 0; i < timer_sum[tongdao]; i++)
{
angle = angle + angle_diff;
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
xishu1[i] = da_value * sin(angle) + 2048;
break;
#endif
#if DAC7724_1_ENABLE
case 1:
xishu2[i] = da_value * sin(angle) + 2048;
break;
#endif
#if DAC7724_2_ENABLE
case 2:
xishu3[i] = da_value * sin(angle) + 2048;
break;
#endif
#if DAC7724_3_ENABLE
case 3:
xishu4[i] = da_value * sin(angle) + 2048;
break;
#endif
default:
break;
}
}
data_time[tongdao] = 0;
}
}
}
}
break;
case 1: /*方波*/
if(tongdao >= 0)
{
if(tongdao <= 3) /* 通道范圍 */
{
if(freq >= 40)
{
// if(freq < 40000) /* 頻率范圍 */
{
tongdao_flag[tongdao] = 1; /* 通道標(biāo)志 */
timer_sum[tongdao] = DA_TIMER_NUM / freq ; /* 每個(gè)周波的DA點(diǎn)數(shù) */
da_kind[tongdao] = kind; /* DA信號(hào)種類 */
da_value = value; /* 幅值 */
da_value = da_value / DA_SETVALUE * 2048;
for(i = 0; i < timer_sum[tongdao]; i++)
{
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
if(i < (timer_sum[0] / 2))
{
xishu1[i] = da_value + 2048;
}
else
{
xishu1[i] = 2048 - da_value;
}
break;
#endif
#if DAC7724_1_ENABLE
case 1:
if(i < (timer_sum[1] / 2))
{
xishu2[i] = da_value + 2048;
}
else
{
xishu2[i] = 2048 - da_value;
}
break;
#endif
#if DAC7724_2_ENABLE
case 2:
if(i < (timer_sum[2] / 2))
{
xishu3[i] = da_value + 2048;
}
else
{
xishu3[i] = 2048 - da_value;
}
break;
#endif
#if DAC7724_3_ENABLE
case 3:
if(i < (timer_sum[3] / 2))
{
xishu4[i] = da_value + 2048;
}
else
{
xishu4[i] = 2048 - da_value;
}
break;
#endif
default:
break;
}
}
data_time[tongdao] = 0;
}
}
}
}
break;
case 2: /*三角波*/
if((tongdao >= 0) && (tongdao <= 3))
{
if(freq >= 40) //&& (freq <= DA_TIMER_NUM))
{
tongdao_flag[tongdao] = 1;
timer_sum[tongdao] = DA_TIMER_NUM / freq; /*25us*/
da_value = value;
da_value = da_value / DA_SETVALUE * 2048;
da_value_high[tongdao] = da_value + 2048;
da_value_low[tongdao] = 2048 - da_value;
angle_diff = 4 * da_value /timer_sum[tongdao];
temp = 0;
for(i = 0; i < timer_sum[tongdao] / 4; i++)
{
temp = temp + angle_diff;
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
xishu1[i] = 2048 + temp;
break;
#endif
#if DAC7724_1_ENABLE
case 1:
xishu2[i] = 2048 + temp;
break;
#endif
#if DAC7724_2_ENABLE
case 2:
xishu3[i] = 2048 + temp;
break;
#endif
#if DAC7724_3_ENABLE
case 3:
xishu4[i] = 2048 + temp;
break;
#endif
default:
break;
}
}
temp = 0;
for(i = timer_sum[tongdao] / 4; i < timer_sum[tongdao] / 2; i++)
{
temp = temp + angle_diff;
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
xishu1[i] = da_value_high[tongdao] - temp;
break;
#endif
#if DAC7724_1_ENABLE
case 1:
xishu2[i] = da_value_high[tongdao] - temp;
break;
#endif
#if DAC7724_2_ENABLE
case 2:
xishu3[i] = da_value_high[tongdao] - temp;
break;
#endif
#if DAC7724_3_ENABLE
case 3:
xishu4[i] = da_value_high[tongdao] - temp;
break;
#endif
default:
break;
}
}
temp = 0;
for(i = timer_sum[tongdao] / 2; i < timer_sum[tongdao] * 3 / 4; i++)
{
temp = temp + angle_diff;
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
xishu1[i] = 2048 - temp;
break;
#endif
#if DAC7724_1_ENABLE
case 1:
xishu2[i] = 2048 - temp;
break;
#endif
#if DAC7724_2_ENABLE
case 2:
xishu3[i] = 2048 - temp;
break;
#endif
#if DAC7724_3_ENABLE
case 3:
xishu4[i] = 2048 - temp;
break;
#endif
default:
break;
}
}
temp = 0;
for(i = timer_sum[tongdao] * 3 / 4; i < timer_sum[tongdao] ; i++)
{
temp = temp + angle_diff;
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
xishu1[i] = da_value_low[tongdao] + temp;
break;
#endif
#if DAC7724_1_ENABLE
case 1:
xishu2[i] = da_value_low[tongdao] + temp;
break;
#endif
#if DAC7724_2_ENABLE
case 2:
xishu3[i] = da_value_low[tongdao] + temp;
break;
#endif
#if DAC7724_3_ENABLE
case 3:
xishu4[i] = da_value_low[tongdao] + temp;
break;
#endif
default:
break;
}
}
da_kind[tongdao] = kind;
data_time[tongdao] = 0;
}
}
break;
case 3: /*直流*/
tongdao_flag[tongdao] = 1;
timer_sum[tongdao] = 1;
da_value = value;
da_value = da_value / DA_SETVALUE * 2048 + 2048;
da_kind[tongdao] = kind;
da_zhiliu_value[tongdao] = da_value;
switch(tongdao)
{
#if DAC7724_0_ENABLE
case 0:
xishu1[0] = da_value; /*轉(zhuǎn)換數(shù)據(jù)發(fā)送*/
break;
#endif
#if DAC7724_1_ENABLE
case 1:
xishu2[0] = da_value; /*轉(zhuǎn)換數(shù)據(jù)發(fā)送*/
break;
#endif
#if DAC7724_2_ENABLE
case 2:
xishu3[0] = da_value; /*轉(zhuǎn)換數(shù)據(jù)發(fā)送*/
break;
#endif
#if DAC7724_3_ENABLE
case 3:
xishu4[0] = da_value; /*轉(zhuǎn)換數(shù)據(jù)發(fā)送*/
break;
#endif
default:
break;
}
break;
default:
break;
}
}
/****************************************************************************
* 函數(shù): void da_end(int tongdao)
* 目的: 關(guān)閉設(shè)定的DA通道轉(zhuǎn)換
* 輸入: tondao 通道
* 輸出: 無(wú)
* 參數(shù): 無(wú)
***************************************************************************/
void da_end(int tongdao)
{
tongdao_flag[tongdao] = 0;
#if DAC7724_0_ENABLE
if(tongdao == 1)
{
*DA_PORT0 = 2048;
}
#endif
#if DAC7724_1_ENABLE
if(tongdao == 2)
{
*DA_PORT1 = 2048;
}
#endif
#if DAC7724_2_ENABLE
if(tongdao == 3)
{
*DA_PORT2 = 2048;
}
#endif
#if DAC7724_3_ENABLE
if(tongdao == 4)
{
*DA_PORT3 = 2048;
}
#endif
}
/****************************************************************************
* 函數(shù): void da_run(void)
* 目的: 設(shè)置DA轉(zhuǎn)換
* 輸入: 無(wú)
* 輸出: 無(wú)
* 參數(shù): 無(wú)
***************************************************************************/
extern void da_run(void)
{
*DA_OUT = 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -