单片机数据采集板(设计资料,非实物) 以STC系列的51单片机为主控,集合了多种外设; 有23...
单片机数据采集板设计资料非实物 以STC系列的51单片机为主控集合了多种外设 有232串口通信 2路PWM信号转模拟量输出 以TLC2543为核心的模拟量输入 计数器和中断输入端子接口 MAX517和DAC0832为核心的模拟量输出 74LS48为核心的数码管驱动电路 LM324为主体的有源低通滤波电路 是单片机爱好者学习基础功能的绝佳资料最近在整理工作室的时候翻出一块老古董——基于STC51的数据采集板设计资料。这板子简直是把传统单片机外设玩出花来了特别适合刚入坑的硬件爱好者练手。今天就带大家拆解几个有意思的模块手把手教你怎么玩转这些经典电路。先看最核心的PWM转模拟量模块。板子上的两路PWM通过RC滤波转成0-5V电压配合STC自带的PWM模块特别省事。初始化代码大概长这样void PWM_Init(void) { P1M1 | 0x03; // P1.0/P1.1推挽输出 CMOD 0x02; // 时钟源系统时钟/2 CL 0x00; // 清零计数器 CH 0x00; CCAPM0 0x42; // PWM0模式 CCAPM1 0x42; // PWM1模式 CR 1; // 启动PCA计数器 }这里有个坑要注意STC的PCA模块默认是12T模式如果主频跑在24MHz的话PWM频率大概在24MHz/(256*12)7.8kHz左右。实际用示波器看波形时如果发现纹波太大可以适当增大滤波电容值。模拟量采集用TLC2543这枚12位ADC典型的三线SPI接口操作。读取通道1的代码示例unsigned int ReadADC(unsigned char ch) { unsigned int val 0; ADCS 0; // 片选使能 ch 4; for(unsigned char i0; i12; i){ DIN (ch 0x80) ? 1 : 0; CLK 1; val 1; if(DOUT) val | 1; CLK 0; ch 1; } ADCS 1; // 片选关闭 return val; }这个时序要注意数据是在时钟下降沿采样的调试时可以用LED先验证高低位是否正常。实测发现当输入电压接近参考电压时读值偶尔会跳变这时候需要在软件里做滑动平均滤波。单片机数据采集板设计资料非实物 以STC系列的51单片机为主控集合了多种外设 有232串口通信 2路PWM信号转模拟量输出 以TLC2543为核心的模拟量输入 计数器和中断输入端子接口 MAX517和DAC0832为核心的模拟量输出 74LS48为核心的数码管驱动电路 LM324为主体的有源低通滤波电路 是单片机爱好者学习基础功能的绝佳资料板子上的DAC模块混搭了MAX517I2C接口和DAC0832并行接口两套方案挺有意思的对比。个人更推荐用MAX517毕竟I2C布线方便。输出0-2.5V的典型代码void SetDAC(unsigned char val) { I2C_Start(); I2C_SendByte(0x58); // 器件地址 I2C_SendByte(0x00); // 命令字节 I2C_SendByte(val); // 数据 I2C_Stop(); }调试时记得先确认I2C总线上有没有设备应答可以用逻辑分析仪抓波形。遇到过最奇葩的问题是I2C上拉电阻没焊结果数据线一直保持低电平...数码管驱动部分用了74LS48 BCD译码器这种设计现在看有点复古了。动态扫描的核心代码unsigned char code segTable[] {0x3F,0x06...}; // 共阴段码表 void Display(unsigned int num) { unsigned char digits[4]; digits[0] num/1000; digits[1] num%1000/100; digits[2] num%100/10; digits[3] num%10; for(unsigned char i0; i4; i){ P2 ~(1 i); // 位选 P0 segTable[digits[i]]; // 段码 delay_ms(2); } }这里有个视觉暂留的技巧每个数码管点亮时间不要超过5ms否则会有明显闪烁。实测发现当主循环有其他耗时操作时显示会变暗这时候需要优化代码结构或者上定时器中断。板子上的LM324低通滤波电路参数挺讲究截止频率设在1kHz左右。不过实际测试时发现运放输出有约50mV的直流偏移后来在软件里做了自动校零才解决。模拟电路和数字电路果然还是得做好隔离血的教训啊...这板子虽然用的都是老芯片但用来理解底层硬件原理特别合适。现在的新手可能习惯了Arduino那种傻瓜式操作但真正要深入嵌入式开发还是得从寄存器操作开始练起。下次准备用这块板改个简易示波器玩玩有兴趣的可以关注后续更新~