ADC模数转换器(并联比较型)

本文介绍了ADC模数转换器的基本概念,重点探讨了并联比较型ADC的工作原理及其在信号处理中的应用。通过理解ADC如何将模拟信号转化为数字信号,读者可以更好地掌握信号处理系统的设计基础。
摘要由CSDN通过智能技术生成

    成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

    我选的课设题目是模数转换器, 题目要求: 输入: 0 5VDC, 输出:六位 TTL 电平, 转换速率: ≥ 1kHz, 输出可用 LED 灯指示。我已经设计出了电路,并且焊好了电路板,还荣幸地给老师和同学们进行了开题报告。接下来就说说我的设计方案吧!
    数电课本的第九章是讲的ADC转换和DAC转换,
下面是基于AT89C51的冰柜温度控制系统并联PID算法对应的程序示例: ``` #include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit EN=P3^2; //制冷机开关控制引脚 sbit K1=P3^0; //温度调节按键 sbit K2=P3^1; //温度调节按键 uint target_temp = 20; //目标温度 uint current_temp = 0; //当前温度 uint Kp = 10; //比例系数 uint Ki = 2; //积分系数 uint Kd = 0; //微分系数 void InitTimer0(); //定时器0初始化 void InitADC(); //ADC初始化 void DisplayTemp(); //温度显示函数 void main() { InitTimer0(); //初始化定时器0 InitADC(); //初始化ADC while(1) { if(K1 == 0) //调节目标温度 { target_temp++; if(target_temp > 30) target_temp = 30; while(!K1); } if(K2 == 0) { target_temp--; if(target_temp < 0) target_temp = 0; while(!K2); } current_temp = ADC; //读取当前温度 uint error = target_temp - current_temp; //计算误差 uint output = Kp * error; //比例控制 output += Ki * target_temp; //积分控制 output += Kd * (target_temp - current_temp); //微分控制 if(output > 100) output = 100; //限制输出在0~100之间 if(output < 0) output = 0; if(current_temp < target_temp) //制冷机开关控制 EN = 1; else EN = 0; if(output > current_temp) //制冷机PWM控制 EN = 1; else EN = 0; DisplayTemp(); //温度显示 } } void InitTimer0() { TMOD |= 0x01; //定时器0工作在模式1 TH0 = 0xFC; //定时器0初值 TL0 = 0x67; ET0 = 1; //允许定时器0中断 EA = 1; //开启总中断 TR0 = 1; //启动定时器0 } void InitADC() { ADC_CONTR = 0x80; //使能ADC ADC_CONTR |= 0x0F; //选择ADC0通道 ADC_RES = 0; //清零ADC结果寄存器 ADC_RESL = 0; } void DisplayTemp() { uchar tempstr[4]; tempstr[0] = current_temp / 100 + '0'; //百位数字 tempstr[1] = current_temp % 100 / 10 + '0'; //十位数字 tempstr[2] = current_temp % 10 + '0'; //个位数字 tempstr[3] = '\0'; //字符串结束符 //在LCD上显示温度 } void Timer0_ISR() interrupt 1 //定时器0中断服务程序 { TH0 = 0xFC; //重新赋初值 TL0 = 0x67; DisplayTemp(); //温度显示 } ``` 在这个程序中,并联PID算法的实现主要在主函数中完成,具体包括目标温度的调节、当前温度的读取、误差计算、比例控制、积分控制、微分控制和制冷机的开关控制和PWM控制。此外,还需要使用定时器0和ADC来实现温度的周期性检测和读取,以及LCD显示温度值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值