求单片机控制PWM输出0~10V连续可调电压不进0.05程序电路

求单片机控制PWM输出0~10V连续可调电压不进0.05程序电路,第1张

用PWM输出做呀。10位的PWM就可以做到001。每增加一个PWM值就可以实现步进001了。用PWM端口控制一个三极管导通,然后给过三级RC滤波就可以实现很平滑的电压输出了。不过,这只是开环情况下的结果。带上负载的话,要根据负载的变化调节PWM输出量。这就是做直流稳压电源的方案!

用单片机实现。搭建电路,电路中通过滑动变阻器旋钮调节输入电阻,改变输入电压,此电压输入单片机模数转换模块,将电压模拟量变为数字量,单片机再用该数字量输出一组高低电平,此高低电平再通过电平转换电路变为PWM波。

pwm电平不为0,可能你电路有问题,最好再用一个开关直接关断。PWM直接关断感觉不是那么稳定。arduino的PWM也有这个问题,就是说当你设置PWM0时,实际DA口输出还有7-8左右(假设范围0-255)

#include<reg51h>                          
unsigned int f,t;
sbit PWM_OUT=P0^0;      //shine1991
main (void)
{
    TMOD=0x01;    //T0方式1  定时计数
    TH0=0xb1;    //装入初值   20MS
    TL0=0xe0;
    TR0 = 1;
    ET0 = 1;
    EX0 = 1; EX1 = 1;
    IT0 = 1; IT1 = 1;
    EA = 1;
    f=5;t=0;
    while(1){}        //无限循环
}
void t0() interrupt 1 using 2
{
    TH0=0xb1;  //重装t0
    TL0=0xe0;
    f--;
    if(f<t) PWM_OUT=1;        //shine1991
    else   PWM_OUT=0;         //shine1991
    if(f==0)
    {
        f=5;
    }  
    
}
void X0_INT() interrupt 0
{
    t++;
    if(t > 5) t = 5;           //占空比等级最大为19
}
//------------------------------------------
void X1_INT() interrupt 2
{
    t--;
    if(t < 1) t = 1;             //占空比等级最小为1
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13348572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-19
下一篇 2023-07-19

发表评论

登录后才能评论

评论列表(0条)

保存