找回密码
 立即注册
查看: 39|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    昨天 21:46
  • 签到天数: 85 天

    [LV.6]常住居民II

    12

    主题

    42

    回帖

    272

    积分

    中级会员

    积分
    272
    发表于 2024-4-8 21:07:55 | 显示全部楼层 |阅读模式
    #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个字的跳动,不知道是哪里的问题。

    回复 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-30 11:03 , Processed in 0.049561 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表