基于【EVAL-ADICUP360】的毫欧计-程序设计
[复制链接]
下位机主要是将AIN5输出1mA恒流,但不知道为什么输出的电流不准,在200uA以内时,实测特别准确,但超过200uA时就不准了,实际电流偏高。也没有在官方找到正确答案。
1mA实测电流为1.081mA。超出官方说的5%。不过不影响,有实测结果就行。
AIN5输出1mA恒流,接到目标电阻+极,负极接GND,原理图参见我上个贴子。
测出的AD数据通过串口发送至上位机,目标板自带了CMSIS-DAP,并有串口。
通过板上的紫色LED闪烁指示运行状态。
代码如下:
-
- #include "ADuCM360.h"
- #include "DioLib.h"
- #include "DacLib.h"
- #include "AdcLib.h"
- #include "IexcLib.h"
- #include "UrtLib.h"
- #include "DmaLib.h"
-
- #include "string.h"
- #include "stdio.h"
-
- char uart_tx_bf[256];
- uint32_t sysTick=0;
- uint32_t delayCount=0;
-
-
- uint32_t ad;
- void PrintStr();
-
- int main(void){
- SystemCoreClockUpdate();
- SysTick_Config(SystemCoreClock/1000);
-
-
- UrtCfg(pADI_UART,B115200,COMLCR_WLS_8BITS,0);
-
- DioCfgPin(pADI_GP0,PIN1,3);
- DioCfgPin(pADI_GP0,PIN2,3);
-
-
- DioDrv(pADI_GP0,BIT4,0,0);
-
-
-
-
- IexcCfg(IEXCCON_PD_off,IEXCCON_REFSEL_Int,IEXCCON_IPSEL1_AIN5,IEXCCON_IPSEL1_Off);
-
- IexcDat(IEXCDAT_IDAT_1mA,IDAT0Dis);
-
-
-
-
-
-
-
-
-
-
- AdcPin(pADI_ADC1,ADCCON_ADCCN_AGND,ADCCON_ADCCP_AIN0);
-
-
-
-
-
-
-
-
-
- AdcRng(pADI_ADC1,ADCCON_ADCREF_INTREF,ADCMDE_PGA_G128,ADCCON_ADCCODE_UINT);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AdcGo(pADI_ADC1,ADCMDE_ADCMD_INTOCAL);
- while((AdcSta(pADI_ADC1)&(1<<5))==0);
-
- AdcGo(pADI_ADC1,ADCMDE_ADCMD_SINGLE);
- while(1){
- if(delayCount==0){
- DioTgl(pADI_GP0,BIT4);
- delayCount=500;
- }
-
- if(AdcSta(pADI_ADC1)&1){
- ad= AdcRd(pADI_ADC1);
-
- sprintf(uart_tx_bf,"%d\r\n",ad);
- PrintStr();
-
- AdcGo(pADI_ADC1,ADCMDE_ADCMD_SINGLE);
- }
-
-
- }
-
-
-
-
-
-
- }
-
-
- void PrintStr(){
- char * ptr=uart_tx_bf;
- while(*ptr){
- UrtTx(pADI_UART,*ptr);
- ptr++;
- while((UrtLinSta(pADI_UART)&COMLSR_THRE)==0);
- }
- }
- void SysTick_Handler(){
- sysTick++;
- if(delayCount>0)
- delayCount--;
- }
-
-
-
|