




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/* (C) COPYRIGHT 2010 STMicroelectronics * File Name : ADCompute.c* Author :* Version : V1.0* Date : 10/08/2007* Description : AD_Compute program body* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO S
2、AVE TIME.* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
3、*/* Includes -*/#include "stm32f10x.h"#include "main.h"#include "stm32f10x_usart.h"#include "stm32f10x_lib.h" #include "stm32f10x_map.h" #include "platform_config.h"#include "stm32f10x_nvic.h"#include "stm32f10x_adc.h"#i
4、nclude "stm32f10x_dma.h"#include "extern.h"#include <stdio.h>#include <math.H>#define plus1 0#define plus2 1#define plus3 2/#define BufferSize 200#define ADC1 (ADC_TypeDef *) ADC1_BASE)#define DMA1_Channel6 (DMA_Channel_TypeDef *) DMA1_Channel6_BASE)/u8 ch_flag3=0,0,0
5、 ;/u8 plus_state3=0,0,0;volatile unsigned short int Current_L; / 剩余电流volatile unsigned short int ADC_ValueData224;/volatile unsigned short int ADC_ValueDataTAB7=0,0,0,0,0,0,0;volatile unsigned short int Angle_Value_Data7=0,0,0,0,0,0,0;volatile signed long int zhengxuDateTab367; volatile signed long
6、int fuxuDateTab367;/unsigned short int ADC_Value7=0,0,0,0,0,0,0;/标识/u8 prun,ddj_run,qda,qdc5,Trip,Trip2,Alarm,RLP_oweI,RLP_oweP,RLP_oweUA,RLP_oweUT;/变量/vs32 recval316,e40; vs32 ss0,ss1,ss2,ss3,ss4,ss5,ss6,ss7,ss8,ss9,ss10,ss11,ss12,ss13,ss14,ss15,ss16,ss17,ss18,ss19,ss20,ss21,sss_r,sss_x, ss_dxa,ss_
7、dxb,ss_dxc,ss_bphave,ss_bpha,ss_bphb,ss_bphc,ss_bphmax;vu8 pro1,pro2,pro3,pro4,pro5,pro6,pro7,pro8,pro9,pro10,pro11,pro12,pro13,pro14,pro15,settFLASH_PAGE_SIZE;vu32 e_im,e_105im,e_3im,e_6im,e_25im,e_1375im,pn,un;u32 est_t,st_t,tfdl2,rtfdl2;vu8 chn,set_num,M_num;float Ttirp,t_rgz;const signed short i
8、nt x_Num = 0, 347, 684, 1000, 1285, 1532, 1732, 1879, 1969, 2000, 1969, 1879, 1732, 1532, 1285, 1000, 684, 347,-0,-347,-684,-1000,-1285,-1532,-1732,-1879,-1969,-2000,-1969,-1879,-1732,-1532,-1285,-1000,-684,-347 ;/vs16 resist_temper4;unsigned short int SampleData(volatile unsigned short int ADCDataT
9、ab, unsigned short int nChannel); /const signed short int y_Num = 2000, 1969, 1879, 1732, 1532, 1285, 1000, 684, 347, 0,-347,-684,-1000,-1285,-1532,-1732,-1879,-1969,-2000,-1969,-1879,-1732,-1532,-1285,-1000,-684,-347,-0, 347, 684, 1000, 1285, 1532, 1732, 1879, 1969 ;/float CH_ComputeTab107;float UI
10、_Parent7; /unsigned short int Signal_Data7=0,0,0,0,0,0,0;/unsigned int IA1_Value = 0;/void Voltage_Calculate(void);void Signal_Conversion(void);void SIG_Distribute(void);float Differencevalue(float number);/ 绝对值double _squarert(double number);/ 开方struct Ctrl_Flag CtrlState;struct Meterage_Parameter
11、phaseA,phaseB,phaseC;/ 定义测量参数/* Function Name : ADC_Configuration* Description : This function handles ADC_Configuration* Input : None* Output : None* Return : None*/void ADC_Configuration(void) ADC_InitTypeDef ADC_InitStructure;/* ADC1 Configuration -*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Indepen
12、dent;/独立工作模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE;/扫描方式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;/连续转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/外部触发禁止 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 7;/用于转换的
13、通道数 ADC_Init(ADC1, &ADC_InitStructure);/* ADC1 regular channel8 configuration */ / 规则模式通道配置 ADC_RegularChannelConfig( ADC1 , ADC_Channel_0, 4, ADC_SampleTime_239Cycles5); / Ia ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 5, ADC_SampleTime_239Cycles5); / Ib ADC_RegularChannelConfig(ADC1, ADC_Cha
14、nnel_2, 6, ADC_SampleTime_239Cycles5); / Ic ADC_RegularChannelConfig(ADC1 , ADC_Channel_3, 1, ADC_SampleTime_239Cycles5); / Ua ADC_RegularChannelConfig( ADC1, ADC_Channel_4, 2, ADC_SampleTime_239Cycles5); / Ub ADC_RegularChannelConfig( ADC1, ADC_Channel_5, 3, ADC_SampleTime_239Cycles5); / Uc ADC_Reg
15、ularChannelConfig( ADC1, ADC_Channel_6, 7, ADC_SampleTime_239Cycles5); / Il/* Configure high and low analog watchdog thresholds */ /ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0B00, 0x0300);/* Configure channel8 as the single analog watchdog guarded channel */ /ADC_AnalogWatchdogSingleChannelConfig(A
16、DC1, ADC_Channel_8);/* Enable analog watchdog on one regular channel */ /ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleRegEnable);/* Enable AWD interupt */ /ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); / AD 中断/* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE);/* Enable ADC1 reset calibaration register */ ADC
17、_ResetCalibration(ADC1); / 下面是ADC自动校准,开机后需执行一次,保证精度/* Check the end of ADC1 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC1);/* Start ADC1 calibaration */ ADC_StartCalibration(ADC1);/* Check the end of ADC1 calibration */ while(ADC_GetCalibrationStatus(ADC1); /DMA_Cmd(DMA1_Cha
18、nnel1, ENABLE); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE);/* Enable ADC1 DMA 使能ADC1 DMA*/ ADC_DMACmd(ADC1, ENABLE); /* Function Name : SampleData * Description : Sample the ADC converted value of one channel * Input : Address of the ADCDataTab, Number of the Channel
19、 * Output : SampleData * Return : SampleData */ unsigned short int SampleData(volatile unsigned short int ADCDataTab, unsigned short int nChannel) auto float Value=0; for(ss10=0;ss10<(DATALEN-5);ss10+) Value += (unsigned short int)(*(ADCDataTab+nChannel+ss10*TDCONLEN); return (unsigned short int)
20、(Value/(DATALEN-5); /* Function Name : Voltage_Conversion * Description : average the ADC converted value of one channel * Input : Address of the ADCDataTab, Number of the Channel * Output : Average value * Return : Average value * */void Voltage_Conversion(void) volatile signed short int AdcValueTm
21、p=0;ss12 = 0; for(ss12=0;ss12<(TDCONLEN);ss12+) AdcValueTmp = (SampleData(ADC_ValueData,ss12)-0x800); zhengxuDateTabss13ss12 = (AdcValueTmp*x_Numss13); fuxuDateTabss13ss12 = (AdcValueTmp*y_Numss13); ss13+;if(ss13>=(DATALEN-1) ss13 = 0; CtrlState.ADCompute_Flag = 1; /* Function Name : xinhaoCon
22、version* Description : None* Input : None* Output : None* Return : None*/void xinhaoConversion(void)/信号转换 auto unsigned char xubu=0,shibu=0;/虚部和实部变量 auto unsigned long int TotalTemp=0; / 总变量 auto signed long int TotalSTemp=0,TotalLTemp=0; / 总分量 if(CtrlState.ADCompute_Flag) CtrlState.ADCompute_Flag =
23、 0; for(shibu=0;shibu<(TDCONLEN-1);shibu+) TotalSTemp = 0; TotalLTemp = 0; TotalTemp = 0; for(xubu=0;xubu<(DATALEN-1);xubu+) TotalSTemp += zhengxuDateTabxubushibu; TotalLTemp += fuxuDateTabxubushibu; TotalSTemp = ( TotalSTemp /( (float )(fangdabeishu*(fangdabeishu)*kxishu); TotalLTemp = (Total
24、LTemp /(float )(fangdabeishu*(fangdabeishu)*kxishu); TotalSTemp *= TotalSTemp; TotalLTemp *= TotalLTemp; TotalTemp = (TotalSTemp+TotalLTemp);/ 求矢量和 CH_ComputeTabRLP_oweUTshibu = Differencevalue(float)TotalTemp); CH_ComputeTabRLP_oweUTshibu*= (CH_ComputeTabRLP_oweUTshibu); CH_ComputeTabRLP_oweUTshibu
25、= (float ) (_squarert(double) CH_ComputeTabRLP_oweUTshibu) ; RLP_oweUT+; if(RLP_oweUT>=1) RLP_oweUT = 0; CtrlState.ADCAverage_Flag = 1; /* Function Name : Signal_Conversion* Description : None* Input : None* Output : None* Return : None*/void Signal_Conversion(void) xinhaoConversion(); SIG_Distri
26、bute();/* Function Name : SIG_Distribute* Description : None* Input : float data* Output : unsigned intdata* Return : None*/void SIG_Distribute(void) auto unsigned char iii=0,jjj=0; auto double average=0; if(CtrlState.ADCAverage_Flag) CtrlState.ADCAverage_Flag = 0; for(jjj=0;jjj<(TDCONLEN-1);jjj+
27、) average = 0; for(iii=0;iii<1;iii+) average += CH_ComputeTabiiijjj; for(nn=3;nn < Num_ch;nn+) jj=(u16)nn*DATALEN; /amp_samplenn=(u16)sqrt(s32)trnn*trnn+(s32)txnn*txnn); average /= 1; / 平均处理 switch(jjj) case 0: phaseA.I = (unsigned short int)average); / Ia电流 break; case 1: phaseB.I = (unsigned
28、 short int)average); / Ib电流 break; case 2: phaseC.I = (unsigned short int)average); / Ic电流 break; case 3: phaseA.U = (unsigned short int)average); / Ua电压 break; case 4: phaseB.U = (unsigned short int)average); / Ub电压 break; case 5: phaseC.U = (unsigned short int)average); / Uc电压 break; default : bre
29、ak;/* Function Name : absolutevalue* Description : None* Input : float data* Output : None* Return : float data*/float Differencevalue(float number) /差分 long i = 0; float x = 0, y = 0; const float f = 1.5F; x = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5F3759DF - ( i >> 1 ); y
30、= * ( float * ) &i; y = y * ( f - ( x * y * y ) ); y = y * ( f - ( x * y * y ) ); return number * y; /* Function Name : SquareRootFloat* Description : None* Input : double data* Output : None* Return : double data*/double _squarert(double number) /开方double a = 0.0;double b = number/2;while(a!=b)
31、a=b;b=(a+number/a)/2;return a;void sample() u8 x1,first_line=0; s32 x2; u8 x=0,dis_flag=0; s32 di3old5; u8 last=0,adjust_keep=0; s16 angles14,tt;l1: delay(10); chn=(i-39)&(DATALEN-1); fsjs(0,Num_ch-1); for(x2=0;x2<Num_ch;x2+) DI3x2=fzjs(trrx2,txxx2); get_channels(); for(x1=Num_ch;x1<12;x1+
32、) DI3x1=0; anglesx1=0; DI3Num_ch=ad_base; for(x1=0;x1<Num_ch;x1+) if(trrx1!=0) anglesx1=(signed int)(atan2(txxx1,trrx1)*572.96); else if(txxx1>0) anglesx1=900; else anglesx1=-900; tt=angles2; for(x1=0;x1<=Num_ch;x1+) anglesx1=anglesx1-tt; if(anglesx1<0) anglesx1+=3600; if(DI3x1<5) ang
33、lesx1=0; angles2=anglesNum_ch=0; clrscr(); if(BZT|BZTWML) /110616miao for(x1=0;x1<=3;x1+) /V=DI3x1+first_line;disv(5,0x02+x1*0x10,2); /V=anglesx1+first_line;disv(5,0x09+x1*0x10,1); if(x1+first_line)<6) V=DI3x1+first_line/100;disv(4,0x03+x1*0x10,0); else V=DI3x1+first_line;disv(5,0x02+x1*0x10,2
34、); V=anglesx1+first_line;disv(5,0x09+x1*0x10,1); get_symbol(void*)dis,x1*0x10,x1+first_line); disx1*0x10+0x0a=char_jiao; else for(x1=0;x1<=3;x1+) V=DI3x1+first_line;disv(5,0x02+x1*0x10,2); V=anglesx1+first_line;disv(5,0x09+x1*0x10,1); get_symbol(void*)dis,x1*0x10,x1+first_line); disx1*0x10+0x0a=c
35、har_jiao; x1=key(); if(x1=XIA)&&(first_line<=(Num_ch-4) first_line+; else if(x1=SHA)&&(first_line!=0) first_line-; else if(x1=QUE) if(dis_flag=0) return; else dis_flag=0; adjustx=adjust_keep; if(x1=FG) dis_flag=1; adjust_keep=adjustx; if(dis_flag=1) if(x1=SHA) if(+adjustx>=126)
36、 adjustx=126; else if(x1=XIA) if(-adjustx<=(-126) adjustx=(-126); else if(x1=YOU) adjustx=adjust_keep; if(+x)>=12) x=0; adjust_keep=adjustx; else if(x1=ZUO) adjustx=adjust_keep; if(x=0) x=11; else x-; adjust_keep=adjustx; else if(x1=REN) password(1); if(mark4bits.passed=1) write_calibration();
37、 mark4bits.passed=0; adjust_keep=adjustx; if(+last>=5) last=0; di3oldlast=DI3x; clrscr(); dis0x02=char_cC;dis0x03=char_a;dis0x04=char_l;dis0x05=char_i;dis0x06=char_b; dis0x07=char_r;dis0x08=char_a;dis0x09=char_t;dis0x0a=char_i;dis0x0b=char_o; dis0x0c=char_n; dis0x10=char_cC;dis0x11=char_h;dis0x12
38、=char_xsd;dis0x13=char_cN;dis0x14=char_o; dis0x15=char_xsd;dis0x16=char_mh; V=x;disv(2,0x17,0); dis0x20=char_cF;dis0x21=char_a;dis0x22=char_c;dis0x23=char_t;dis0x24=char_o; dis0x25=char_r;dis0x26=char_mh; V=(s32)adjustx*10;disv(5,0x27,1); dis0x30=char_cV;dis0x31=char_a;dis0x32=char_l;dis0x33=char_u;dis0x34=char_e; dis0x35=char_mh; V=(di3old0+di3old1+di3old2+di3old3+di3old4)/5;disv(5,0x37,2); delay(10); display(0x0f); goto l1;void diskwh() u8 a0; s32 aa; a0=a0; aa=epqa0; a2=(unsigned char)(aa/100000); a3=(unsigned char)(aa/10000-(aa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年性病科性病常识及健康教育考核试题及答案解析
- 产业政策影响分析-第2篇-洞察及研究
- 2025年北京市农业科技合作项目合同范本
- 2025年用工单位是否强制要求签订劳动合同
- 2025临时工劳务合同新范文
- 2025企业运营指南合同管理范本
- 2025安全评估服务合同
- 2025车辆抵押合同
- 更期保健与荷尔蒙疗法2讲课文档
- 2025劳动合同协议方案协同保证契约书
- 成人失禁相关性皮炎的预防与护理课件
- 鼻的症状学相关知识
- 中职生劳动教育试题答案
- 现代学徒制课题:市域产教联合体与行业产教融合共同体内开展现场工程师培养的机制创新研究(研究思路模板、技术路线图)
- 2024年《数字摄影技术》考试复习题库(含答案)
- 医疗纠纷讲座
- 一氧化碳安全培训
- 2024关于深化产业工人队伍建设改革详细解读课件
- 医务人员职业暴露预防及处理课件(完整版)
- 新能源发电技术 电子课件 2.5 可控核聚变及其未来利用方式
- 建材销售购销合同范本
评论
0/150
提交评论