找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1693|回复: 1
打印 上一主题 下一主题
收起左侧

c8051f040单片机做一个恒压控制的功能

[复制链接]
跳转到指定楼层
楼主
之前同事做了一个1psi PID恒压控制的程序  让增大传感器量程改程序,由于程序较长我我只贴出了我有疑问的部分程序中没看明白的部分
1选择内部基准电压2.4V而传感器的输出电压是5V 怎么作比较?
2为什么我计算的采集结果是 P=(1.25*real/4096-1.125)*690?

12位ADC模拟量输入配设置
void ADC0_Init (void) //
    {
     char SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page

     SFRPAGE = ADC0_PAGE;

     ADC0CN = 0x80;                      // ADC0 enabled; normal tracking   1000 0000  ADC0使能
                                         // mode; ADC0 conversions are initiated
                                         // when writing 1 to ad0busy flag; ADC0 data is
                                         // right-justified

     REF0CN = 0x03;                      // Enable on-chip VREF,  0011 电压基准寄存器 基准电压选择 内部基准电压到VREF引脚
                                         // and VREF output buffer
     AMX0CF = 0x00;                      // ALL inputs are single-ended (default)  信号采集单端输入  AMX0CF: AMUX0 配置寄存器
     AMX0SL = 0x06;                      // 选择P3偶数引脚
     AMX0PRT = 0x01;                     // 选择P3.0作为初始模拟输入
     ADC0CF = 0x98;                      // ADC conversion clock = 1.10592MHz, Gain=1   1001 1000  20分频    conversion转换 PGA放大增益为1 转换的时钟周期
     SFRPAGE = SFRPAGE_SAVE;             // Restore SFR page
    }


模拟量采集
SFRPAGE = SFRPAGE_SAVE;
     num++;        //扫描6次,使用6个数码管
     count++;
        if(num==6)
            num=0;
        if(count == 5)
        {
         count = 0;
         SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page
         SFRPAGE = ADC0_PAGE;

         AMX0SL = 0x06;                      // 选择P3偶数引脚  0110  AMX0AD3-0 都配置为单端输入
         AMX0PRT = 0x01;                     // 选择P3.0作为初始模拟输入 0001

         for(t = 0;t<8;t++)          // 第一路循环采样
            {
             AD0INT = 0;
             AD0BUSY = 1;//写1采样一次
             while(!AD0INT);
             accumulator += ADC0;
             for(s = 0; s<6;s++)         //延时6个周期
                {
                 ;
                }
            }
         real0 = (int)((accumulator >> 3));                 //20190814
         PID1_OUT();
         accumulator = 0;

         AMX0SL = 0x06;                      // 选择P3偶数引脚 0110
         AMX0PRT = 0x04;  

负压数据
temp = (int)((1-real0/4096.0)*690);                //20190426
        StrTab[0]=led_code[18];        //显示P
        StrTab[1]=led_code[0];         //显示0
        StrTab[2]=0xBF;                //显示"-"          20190426
        StrTab[3]=led_code[temp/100] & 0X7F;        //显示负压整数部分并且显示小数点
        StrTab[4]=led_code[(temp%100)/10];
        StrTab[5]=led_code[temp%10];
        break;




迅读PDF截图20210621142502.png (268.1 KB, 下载次数: 56)

迅读PDF截图20210621142502.png

迅读PDF截图20210621143234.png (310.31 KB, 下载次数: 64)

迅读PDF截图20210621143234.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:941563 发表于 2021-6-22 11:27 | 只看该作者
我知道原因了 那个传感器是±1psi的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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