mtiaopi 发表于 2024-4-8 21:07:55

改的屠龙刀核心板的PWM-DAC的程序,釆样的ADC数值一直跳变

#include "STC32G.h"
#include "usb.h"
#include "adc.h"
#include "pwm.h"
#include "stdlib.h"
#include "string.h"
#include "sys_init.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD="@STCISP#";


u16 adc;
u16 duty;
u16 feedback;
long int ad;


void main()
{

        u16 j;
//        float ad;
        sys_init();
        usb_init();
        ADC_init();
        PWMA_Init();
        EA=1;
        P2M0=0X00;
        P2M1=0X00;
       
        duty = 10;
        feedback = duty;
        while(1)
        {

                if(DeviceState !=DEVSTATE_CONFIGURED)
                        continue;
                if(bUsbOutReady)
                {
                        duty=atol(UsbOutBuffer);
            printf("ADC=%u,duty=%u,feedback=%u\r\n",adc,duty,feedback);
                        usb_OUT_done();
                        memset(UsbOutBuffer,0,OutNumber);
                }
//      adc = ADC_Read(8);//参数0~15,查询方式做一次ADC, 返回值就是结果

                          adc=Fliter_average();

                       j = (u16)((duty*4096UL)/(PERIOD+1));    //计算ADC采样理论值

                       if(j>adc)
                          {
                                   if(((j-adc)>THRESHOLD) && (feedback<=PERIOD)) feedback++;
                          }
                          else
                          {
                                   if(((adc-j)>THRESHOLD) && (feedback>0)) feedback--;
                          }
                          printf("ADC=%u,duty=%u,feedback=%u\r\n",adc,duty,feedback);
                          UpdatePwm(feedback);    //更新占空比       
   }
}

用这个程序控制一个场管做负载,釆样电流,ADC值最大有200多的字跳动,电流表跳动近100ma,如果ADC直接釆样直流电压,显示的ADC值只有2个字的跳动,不知道是哪里的问题。

页: [1]
查看完整版本: 改的屠龙刀核心板的PWM-DAC的程序,釆样的ADC数值一直跳变