- 打卡等级:以坛为家II
- 打卡总天数:421
- 最近打卡:2025-05-03 12:14:59
金牌会员
- 积分
- 1344
|
#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个字的跳动,不知道是哪里的问题。
|
|