找回密码
 立即注册

QQ登录

只需一步,快速开始

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

100kg电子称调试过程详细说明 附单片机源程序

[复制链接]
跳转到指定楼层
楼主
在电子称程序的调试过程中主要设计两大部分内容:硬件和软件。其中硬件部分包括压
力传感器、AD、主控单片机;软件是指代码编写部分。下面我就先从硬件的三个方面逐一
的阐述调试遇到的问题、注意事项及具体内容。
1.压力传感器
它更准确的说是电阻应变式压力传感器,它主要由弹性体、电阻应变片电缆线等组成,
内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片(转换元件)受到拉
伸或压缩应变片变形后,它的阻值将发生变化(增大或减小) ,从而使电桥失去平衡,产生
相应的差动信号,供后续电路测量和处理。具体受力变化过程如图1演示:
图1 应变式力传感器的受力工作原理
它的特点是: 精度高、 易加工、 结构简单紧凑、抗偏载能力强、固有频率高。实际
外形如图2:
图2 双孔悬臂平行梁应变式称重传感器
因此,在调试要注意三点:一是采用惠更斯电桥的传感器有四根线连接外电路,怎样正
确的判定电源正、负极输入,信号 1、2输出端口。二是注意体重测量时的技术参数。三是
称重传感器的固定。




<详见附件>


#include <reg51.h> //51系列单片机头文件
sbitADDO = P2^6; //声明 AD 的 DT端口
sbitADSK = P2^7; //声明AD 的SCK 端口
void init(); //声明初始函数
void delayms(char ms); //声明延时函数
void send_char(char txd);//声明串口函数
void get_weight(); //声明获取体重函数
long a,weight; //定义变量类型
char c[6],a1,a2; //同上
char tab[]="0123456789"; //同上
long ReadCount(void); //同上
main() //主函数
{
delayms(500); //延时 500ms
init(); //初始化函数
while(1) //大循环
{
get_weight(); //调用 get_weight
}
}
void init()
{TMOD = 0x20; // 定时器 1 工作于 8 位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率 9600
TL1 = 0xFD; // 同上
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器 1
IE = 0x0; // 禁止任何中断
}
void send_char(char txd) // 传送一个字符
{
SBUF = txd; //将串口发送寄存器中的数据一位位从串口发送出去
while(!TI); // 等待数据传送
TI = 0; // 清除数据传送标志
}
void delayms(char ms) // 延时子程序
{
char i;
while(ms--) //延时 ms 毫秒
{
for(i = 0; i < 120; i++);//整个循环近似等于 1ms
}
}
long ReadCount(void) //AD 驱动程序
{
long Count;
char i;
ADSK=0; //使能AD(PD_SCK 置低)
Count=0; //清零
while(ADDO); //AD 转换未结束则等待,否则开始读取。起了同步作用。
for (i=0;i<24;i++) //24位时钟脉冲从最高位到最低位逐位输出
{
ADSK=1; //PD_SCK 置高(发送脉冲)
Count=Count<<1; //下降沿来时变量 Count 左移一位,右侧补零
ADSK=0; //PD_SCK 置低
if(ADDO) Count++;//当数据输出为高电平,Count 加 1
}
ADSK=1; //第25 个脉冲到来
_nop_(); //延长一个机器周期
ADSK=0; //第25 个脉冲结束
return(Count); //输出Count
}
void get_weight() //获取被测物体重量
{int count=0;//定义count 变量为整型,初值为 0
long sum=0; //定义sum 变量为长整型,初值为 0
for (count=0;count<6;count++)//for 循环,变量 count 累加到 5 时跳出 for 循环
{
a=ReadCount();//读取AD 输出数据,赋值给 a
a=a>>8;//a 右移8 位,舍去低八位,a为 16 位有效,保证了线性
sum+=a;//将 a累加赋值给 sum
}
a=sum/5; //sum 求平均值赋值给 a
// a1=a&0xff;//a 低8 位赋值给 a1
// a2=a>>8;//a 右移8 位后再把此时的 a 的低八位赋值给 a2
// send_char(a2); //串口输出 a2
// send_char(a1);//串口输出 a1
// send_char(0xab);//串口输出AB
weight=(long)((float)(a-546)*9.9);
//重量转换函数,传感器型号不同此函数要适当修改
weight=(weight+50)/100*100; //实现十位四舍五入
c[0] = tab[weight/100000]; //重量值整除得十万位
c[1] = tab[weight%100000/10000];//重量值整除得万位
c[2] = tab[weight%10000/1000]; //重量值整除得千位
c[3] = tab[weight%1000/100]; //重量值整除得百位
c[4] = tab[weight%100/10]; //重量值整除得十位
c[5] = tab[weight%10]; //重量值除余得个位
send_char(c[0]);//串口输出从c[0]到c[5],由高位到低位依次输出
send_char(c[1]);
send_char(c[2]);
send_char(c[3]);
send_char(c[4]);
send_char(c[5]);
send_char(64);//串口输出@标记符号
}
/*由于称重传感器线性度参数的不同,而对获得的重量数据处理,此处可能会根据不同
称重传感器,程序的代码会有所不同*/
对于该程序的确定主要有两部分:调试 AD 输出结果程序和 weight 转换函数公式。


100kg电子称调试过程详细说明.pdf (431.63 KB, 下载次数: 0)

评分

参与人数 2黑币 +20 收起 理由
IdeaMing + 5
1109 + 15 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:146733 发表于 2025-10-19 10:44 | 只看该作者
建议增加0点追踪
回复

使用道具 举报

板凳
ID:276663 发表于 2025-10-20 09:13 | 只看该作者
经验分享点赞
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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