[N32G03x] N32G032C8L7有一定概率AD采集口损坏

[复制链接]
1119|4
 楼主| zhaolei2612 发表于 2022-8-26 17:02 | 显示全部楼层 |阅读模式
N32G032C8L7的AD采集口会出现一直输出5V或端口电压值变动而AD值不变的情况,重新上电无法解决,只有更换芯片。现在使用的是PA4端口。
 楼主| zhaolei2612 发表于 2022-8-26 17:07 | 显示全部楼层
AD采集电路。只是在公司测试,J16接的变阻箱,首次上电就读不到AD值。手工焊接的芯片,重新焊接也不行,只有更换芯片。目前测试了三四十个,有2个有问题,一个一直输出5V,一个端口电压改变而AD值不变。
 楼主| zhaolei2612 发表于 2022-8-26 17:08 | 显示全部楼层
本帖最后由 zhaolei2612 于 2022-8-26 17:10 编辑


123.png
 楼主| zhaolei2612 发表于 2022-8-26 17:13 | 显示全部楼层
  1. #define AD_FUEL_PORT   (GPIOA)
  2. #define AD_FUEL_PIN    (GPIO_PIN_4)
  3.         RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA, ENABLE);
  4.         RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC, ENABLE);
  5.         RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV12);
  6.         ADC_ConfigClk(ADC_CTRL3_CKMOD_AHB, RCC_ADCHCLK_DIV16);
  7. MY_GPIO_Init(AD_FUEL_PORT,AD_FUEL_PIN,GPIO_MODE_ANALOG,GPIO_NO_PULL,GPIO_SPEED_LOW,GPIO_DC_LOW,GPIO_NO_AF);
  8. void MYADC_Init(void)
  9. {
  10.         ADC_InitType ADC_InitStructure;
  11.         DMA_InitType DMA_InitStructure;
  12.        
  13.         /* DMA channel1 configuration ----------------------------------------------*/
  14.         DMA_DeInit(DMA_CH1);
  15.         DMA_StructInit(&DMA_InitStructure);
  16.         DMA_InitStructure.PeriphAddr     = (uint32_t)&ADC->DAT;
  17.         DMA_InitStructure.MemAddr        = (uint32_t)&ADCConvertedValue[0];
  18.         DMA_InitStructure.Direction      = DMA_DIR_PERIPH_SRC;
  19.         DMA_InitStructure.BufSize        = 2;
  20.         DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
  21.         DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_ENABLE;
  22.         DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
  23.         DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord;
  24.         DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
  25.         DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
  26.         DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
  27.         DMA_Init(DMA_CH1, &DMA_InitStructure);
  28.         DMA_RequestRemap(DMA_REMAP_ADC, DMA, DMA_CH1, ENABLE);

  29.         /* Enable DMA channel1 */
  30.         DMA_EnableChannel(DMA_CH1, ENABLE);

  31.         /* ADC configuration ------------------------------------------------------*/
  32.         ADC_InitStruct(&ADC_InitStructure);
  33.         ADC_InitStructure.MultiChEn      = ENABLE;
  34.         ADC_InitStructure.ContinueConvEn = DISABLE;
  35.         ADC_InitStructure.ExtTrigSelect  = ADC_EXT_TRIGCONV_NONE;
  36.         ADC_InitStructure.DatAlign       = ADC_DAT_ALIGN_R;
  37.         ADC_InitStructure.ChsNumber      = 2;
  38.         ADC_Init(ADC, &ADC_InitStructure);
  39.         /* ADC regular channel1 configuration */
  40.         ADC_ConfigRegularChannel(ADC, ADC_CH_4_PA4, 1, ADC_SAMP_TIME_56CYCLES5);
  41.         ADC_ConfigRegularChannel(ADC, ADC_CH_5_PA5, 2, ADC_SAMP_TIME_56CYCLES5);
  42.         /* Enable ADC DMA */
  43.         ADC_EnableDMA(ADC, ENABLE);

  44.         /* Enable ADC */
  45.         ADC_Enable(ADC, ENABLE);

  46.         /*wait ADC is ready to use*/
  47.         while(!ADC_GetFlagStatusNew(ADC, ADC_FLAG_RDY))
  48.         ;
  49.         /*wait ADC is powered on*/
  50.         while(ADC_GetFlagStatusNew(ADC, ADC_FLAG_PD_RDY))
  51.         ;
  52.         /* Start ADC Software Conversion */
  53.         ADC_EnableSoftwareStartConv(ADC, ENABLE);       
  54. }

  55. void MYADC_Run(void)
  56. {
  57.         uint32_t loop = 0;
  58.         uint32_t loopb = 0;
  59.         uint32_t dat0=0,dat1=0;

  60.         ADC_EnableSoftwareStartConv(ADC, ENABLE);       
  61.         while(!ADC_GetFlagStatus(ADC, ADC_FLAG_ENDC));
  62.         ADC_ClearFlag(ADC,ADC_FLAG_ENDC);
  63.        
  64.         dat0=ADCConvertedValue[0];
  65.         dat1=ADCConvertedValue[1];
  66.        
  67.         loop = dat0;//油量
  68.         if(loop>TABLE_FUEL[0])
  69.                 loop = TABLE_FUEL[0];
  70.         if(loop<TABLE_FUEL[8])
  71.                 loop = TABLE_FUEL[8];
  72.         ucBufFuel[ucLocFuel]=loop;
  73.         ucLocFuel++;
  74.         ucCntFuel++;
  75.         if(ucLocFuel>=5)
  76.                 ucLocFuel=0;
  77.         if(ucCntFuel>=5)
  78.                 ucCntFuel=5;
  79.         loop=0;
  80.         for(loopb=0;loopb<ucCntFuel;loopb++)
  81.                 loop+=ucBufFuel[loopb];
  82.         loop/=ucCntFuel; //????
  83.         loopb=0;
  84.         while(loop<TABLE_FUEL[loopb])
  85.                 loopb++;
  86.         if(0==loopb)
  87.                 loop = 0;
  88.         else
  89.                 loop = 125*loopb-(loop-TABLE_FUEL[loopb])*125/(TABLE_FUEL[loopb-1]-TABLE_FUEL[loopb]);
  90.         loop/=10;
  91.         Adc_Fuel=loop;//0~100
  92.        
  93.         loop = dat1;//电压
  94.         ucBufBV[ucLocBV] = loop;
  95.         ucLocBV++;
  96.         ucCntBV++;
  97.         if(ucLocBV>=4)
  98.                 ucLocBV = 0;
  99.         if(ucCntBV>=4)
  100.                 ucCntBV = 4;
  101.         loop=0;
  102.         for(loopb=0;loopb<ucCntBV;loopb++)
  103.                 loop += ucBufBV[loopb];
  104.         loop /= ucCntBV; //
  105.         loop = loop*25/149+12;
  106.         Adc_Bv=loop;
  107. }


画个朴昧 发表于 2022-8-29 19:28 | 显示全部楼层
zhaolei2612 发表于 2022-8-26 17:07
AD采集电路。只是在公司测试,J16接的变阻箱,首次上电就读不到AD值。手工焊接的芯片,重新焊接也不行,只 ...

有测试过I/O的电气特性吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

97

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部