切换到宽版
下载频道
社区服务
积分商城
积分夺宝
活动聚焦
道具中心
邀请好友
会员推荐
微博关注
精华自荐
活动聚焦
领优惠券
帖子
相册
日志
群组
热榜
分享
记录
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
新站
老站
精华
领券
签到
邀请码
积分商城
帖子
用户
版块
帖子
搜索
热搜:
LENX
工业遥控器
oxbe
地盒
大众车机
mage20
T12 固件
爱墨
数码之家
>
我爱单片机
>
用ATMEGA16制作数码白光烙铁(T12)控制器
发帖
回复
返回列表
1
2
3
4
5
6
...9
下一页
到第
页
确认
新帖
31642
阅读
85
回复
[C51]
用ATMEGA16制作数码白光烙铁(T12)控制器
[复制链接]
上一主题
下一主题
离线
zhouchs
UID:845288
注册时间
2011-07-11
最后登录
2018-07-25
在线时间
15小时
发帖
14
搜Ta的帖子
精华
0
M币
287
专家
2
访问TA的空间
加好友
用道具
数码9级
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
发帖
14
M币
287
专家
2
粉丝
15
加关注
发消息
只看楼主
倒序阅读
我要置顶
楼主
发表于: 2011-07-19
以前用精密运放、单片机LPC938加液晶显示屏设计了白光烙铁(T12)控制器,使用效果较好,唯一不足之处就是成本稍高,于是想再设计个“白菜”数码白光烙铁控制器,经过测试已基本达到设想要求,调温范围160~410℃,精度±10℃左右,元件成本20元左右(09年10元以内,当时购买20个ATMEGA16,单价5.5元)。
电路图见图1,单片机采集烙铁热偶电压、电位器温度设定电压,经过计算控制烙铁输出和LED显示输出。白光烙铁内热偶输出电压较低(几十mV内),用精密运放价格高,使用了单片机内部差分输入,同时放大了200倍,参考电压使用2.56V内部基准,R4、D2的作用是限制烙铁输出时的电压进入单片机。温度设定采用电位器,几kΩ到几百kΩ都可以,参考电压使用电源电压AVCC作为基准,这样能充分利用电位器的全部位置。烙铁控制输出通过光耦,能避免驱动元件损坏时,高压进入单片机造成损坏。单片机AD转换电源串接电感,参考电压外接电容,能有效减少电路对AD转换的干扰。LED驱动为共阳极分时驱动,这里不再细说。
图1:电路原理图
没有用参考温度测量,默认了环境温度为30℃,当电路板放到盒子内工作一段时间,温度基本上是这样,环境温度对测量温度有一定影响。电路输入电压15~20内最好,因没有采用PID温度调节,不同电压对电路温度调节稳定性有一定影响。制作时根据需要可自己修改源码,提高温度控制精度。
程序源代码如下:
//********************************************************************
//白光烙铁控制程序
//M16 150-52、200-58、250-64、300-70
//2011.7.10
//********************************************************************
#include <iom16v.h>
#include <macros.h>
#pragma interrupt_handler Timer0Int:10
unsigned char DISP[3]={0x01,0x02,0x03}; //3位数字,高位在前,温度值:XXX℃
//显示状态切换,0-停止,1-加热,显示烙铁温度,2-调节,3-烙铁插错
unsigned char Mod;
unsigned char Num3; //轮流显示
unsigned int Num4; //设定延时切换,2s
unsigned long Ut; //热电偶电压
unsigned int U[100]; //热电偶电压均值计算
unsigned int Ua; //设定电压
unsigned int Tf; //上次设定值
unsigned char Tk; //计时
unsigned char Tr; //加热周期,0~4/5
unsigned int Ts; //设定温度值,160~410
unsigned int Tt; //实际温度值,0~410
unsigned int Tp; //实际温度均值显示
const unsigned char DIG[]={0x14,0x77,0x4C,0x45,0x27,0x85,0x84,0x57,0x04,0x05,0x26,0xBC,0x8E};
//从高到低:B、F、A、G、C、DP、D、E
//数字编码:0、1、2、3、4、5、6、7、8、9、H(10)、L(11)、F(12)
//--------------------------------------------------
//io_init:初始化IO子程序
//--------------------------------------------------
void io_init(void)
{
DDRA = 0xC2; //PA0\PA2\PA3\PA4\PA5为输入,其余均为输出
PORTA|=0x30; //拉高按键管脚
DDRB = 0xFF;
DDRC = 0xFC; //
PORTC|=0x03;
DDRD = 0xF7; //PD3输入
PORTD|=0x08;
}
//-------------------------------------------------------------------
//TIMER_init:初始化定时器 5ms定时 无分频
//-------------------------------------------------------------------
void TIMER_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x64; //set count
TCCR0 = 0x04; //start timer
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources 允许定时器零匹配和溢出中断
}
//-------------------------------------------------------------------
//TLT:A/D转换,烙铁温度
//-------------------------------------------------------------------
void TLT(void)
{
unsigned int tmp; //
unsigned char i; //
ADCSRA = 0x00; //disable adc
ADMUX = 0xEF; //2.56V内部基准,左对齐,通道ADC3、ADC2差分输入
ACSR = 0x80;
ADCSRA=0xC6; //ADC使能并开始转换,预分频64,8/64=125kHz(50~200)
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=(1<<ADSC)|(0<<ADIF); //第二次转换,更准确些
while(!(ADCSRA&(1<<ADIF)));
Ut=ADCH;
for(i=0;i<99;i++)U
=U[i+1]; //保存前100个测量值
U[99]=Ut;
Ut=0;
for(i=90;i<100;i++)Ut=Ut+U
; //取最近10个的平均值作为温度调节差值计算用
if(Ut<340) Ut=340;
Tt=25*Ut/30-283;
Ut=0;
for(i=0;i<100;i++)Ut=Ut+U
;
if(Ut<3400) Ut=3400; //取100个的平均值作为温度显示用
Tp=25*Ut/300-283;
}
//-------------------------------------------------------------------
//TSET:A/D转换,设定温度转换
//-------------------------------------------------------------------
void TSET(void)
{
unsigned int tmp; //
unsigned char i; //
ADCSRA = 0x00; //disable adc
ADMUX = 0x60; //AVCC,左对齐,通道ADC0单端输入
ACSR = 0x80;
ADCSRA=0xC6;
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=(1<<ADSC)|(0<<ADIF);
while(!(ADCSRA&(1<<ADIF)));
Ua=ADCH;
Tf=Ts;
Ts=Ua+155;
if((Tf>Ts && Tf-Ts>2)||(Ts>Tf && Ts-Tf>2))
{
Mod=2;
Num4=0;
}
if(Ts<160)Mod=0;
if(Mod==2 && Num4>500)
{
if(Ts<160)Mod=0;
else Mod=1;
}
}
//--------------------------------------------------
//主程序
//--------------------------------------------------
void main(void)
{
unsigned int m; //
io_init();
DDRC&=0Xcf;
PORTC|=0X30;
TIMER_init();
Mod=1;
Tr=1;
PORTA=0xF2;
Ts=200;
SEI(); // //开中断
while(1)
{
if(Ts<Tt) //根据温度差值计算加热周期
{
Tr=1;
if(Ts>240)Tr=2;
if(Ts>340)Tr=3;
}
else
{
m=(Ts-Tt);
if(m<5) Tr=3;
if(m>5 && m<11) Tr=5;
if(m>10 && m<20) Tr=7;
if(m>20 && m<31) Tr=10;
if(m>30 && m<51) Tr=12;
if(m>50) Tr=15;
if(Ts>240)Tr*=2;
if(Ts>320)Tr+=3;
if(Tr>15) Tr=15;
}
}
}
//-------------------------------------------------------------------
//Timer0Int:定时中断子程序,用于显示输出及按键延时计时,5ms
//-------------------------------------------------------------------
void Timer0Int(void)
{
unsigned char n; //循环计数,0~19
unsigned char m; //
unsigned int p; //
TCNT0=0x64;//79次计数为10mS
Num3++; //轮显
Num4++; //状态转换
Tk++;
if(Tk>199)Tk=0;
n=Tk%20;
if(n==0)
{
PORTA|=0x02;
TLT(); //读温度转换
if(Tk%40==0) //0.2s刷新显示
{
TSET(); //设定电压
if(Mod==1)p=Tp;
if(Mod==2)p=Ts;
//p=Mod;
//p=Ua;
DISP[0]=p/100; //显示温度
DISP[1]=(p%100)/10;
DISP[2]=p%10;
if(Mod==0)
{
DISP[0]=0; //显示OFF
DISP[1]=12;
DISP[2]=12;
}
}
}
else
{
if(n<Tr+1 && Mod>0)PORTA&=0xFD; //n/20周期加热
else
PORTA|=0x02;
}
PORTD|=0x07;
n=Num3%3;
m=DIG[DISP[n]];
if(Mod==2) m&=0xFB; //设置温度状态
PORTB=m;
if(n==2)PORTD&=0xFE; //输出个位数字
if(n==1)PORTD&=0xFD; //输出十位数字
if(n==0)PORTD&=0xFB; //输出百位数字
}
电路板见图2,熔丝位设定见图3。
图2:电路板
图3:熔丝位设定
电路板放入盒子里时如果和开关电源放在一起,距离不能太近,开关电源可能会对AD转换有干扰,具体离多远安装时调试下,建议3cm以上,我的盒子小,放开关电源时紧挨着就有干扰,严重的表现是不调设定电位器时设定温度也会闪动,准备放4节锂电,在不好接电源时用。
本文内容包含图片或附件,获取更多资讯,请
登录
后查看;或者
注册
成为会员获得更多权限
本帖最近打赏记录:共
17
条打赏
,
M币
+99
,
专家
+1
1
2
关键词:
M16
T12
白光
回复
举报
离线
zhouchs
UID:845288
注册时间
2011-07-11
最后登录
2018-07-25
在线时间
15小时
发帖
14
搜Ta的帖子
精华
0
M币
287
专家
2
访问TA的空间
加好友
用道具
数码9级
发帖
14
M币
287
专家
2
粉丝
15
加关注
发消息
只看该作者
1楼
发表于: 2011-07-19
回 楼主(zhouchs) 的帖子
请登录后查看
[ 此帖被zhouchs在2011-07-20 19:30重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请
登录
后查看;或者
注册
成为会员获得更多权限
本帖最近打赏记录:共
2
条打赏
,
M币
+10
回复
举报
离线
oled
UID:74933
注册时间
2007-12-31
最后登录
2022-03-17
在线时间
1946小时
发帖
5062
搜Ta的帖子
精华
0
M币
53
专家
4
访问TA的空间
加好友
用道具
数码5段
发帖
5062
M币
53
专家
4
粉丝
101
加关注
发消息
只看该作者
2楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
xiayu9213
UID:836315
注册时间
2011-06-01
最后登录
2024-06-06
在线时间
573小时
发帖
188
搜Ta的帖子
精华
0
M币
162
专家
4
访问TA的空间
加好友
用道具
数码2级
发帖
188
M币
162
专家
4
粉丝
24
加关注
发消息
只看该作者
3楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
qq1851166
UID:803572
注册时间
2010-07-07
最后登录
2025-07-03
在线时间
1312小时
发帖
827
搜Ta的帖子
精华
0
M币
204
专家
4
访问TA的空间
加好友
用道具
数码2段
发帖
827
M币
204
专家
4
粉丝
20
加关注
发消息
只看该作者
4楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
hizllin
UID:837660
注册时间
2011-06-02
最后登录
2025-08-11
在线时间
710小时
发帖
907
搜Ta的帖子
精华
0
M币
89
专家
2
访问TA的空间
加好友
用道具
数码1段
发帖
907
M币
89
专家
2
粉丝
34
加关注
发消息
只看该作者
5楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
eking
UID:697727
注册时间
2009-03-16
最后登录
2026-08-16
在线时间
300小时
发帖
38
搜Ta的帖子
精华
0
M币
43
专家
1
访问TA的空间
加好友
用道具
数码4级
发帖
38
M币
43
专家
1
粉丝
12
加关注
发消息
只看该作者
6楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
tank364638
UID:817883
注册时间
2010-12-23
最后登录
2024-10-08
在线时间
836小时
发帖
1043
搜Ta的帖子
精华
0
M币
4909
专家
1
访问TA的空间
加好友
用道具
数码1段
发帖
1043
M币
4909
专家
1
粉丝
47
加关注
发消息
只看该作者
7楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
chary8088
UID:828650
注册时间
2011-04-16
最后登录
2019-05-13
在线时间
288小时
发帖
256
搜Ta的帖子
精华
0
M币
819
专家
2
访问TA的空间
加好友
用道具
数码3级
发帖
256
M币
819
专家
2
粉丝
22
加关注
发消息
只看该作者
8楼
发表于: 2011-07-19
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
离线
wb.chn
UID:41278
注册时间
2007-10-20
最后登录
2026-06-23
在线时间
515小时
发帖
503
搜Ta的帖子
精华
0
M币
3854
专家
2
访问TA的空间
加好友
用道具
数码1级
发帖
503
M币
3854
专家
2
粉丝
18
加关注
发消息
只看该作者
9楼
发表于: 2011-07-19
回 楼主(zhouchs) 的帖子
请登录后查看
本帖最近打赏记录:共
条打赏
回复
举报
发帖
回复
返回列表
1
2
3
4
5
6
...9
下一页
到第
页
确认
http://bbs.mydigit.cn
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
隐藏
快速跳转
◇产品交易区◇
我爱优惠购
数码交易区
数码值得买
◇电脑之家◇
电脑软硬派
WiFi/路由器
NAS/网络存储
◇数码大家谈◇
数码大家谈
机顶盒/智能电视
数码前沿
◇车主之家◇
谈车论驾
汽车拆客
汽车数码
◇拆客&拆机◇
拆机乐园
行业拆客
硬件博物馆
◇玩家进阶界◇
爱上极客
创意DIY
能工巧匠
◇电子技术区◇
电子学堂
维修达人
我爱单片机
◇半导体存储◇
U盘启动研究
U盘存储技术
SSD存储技术
◇产品讨论区◇
电源/充电器
手电筒/照明
耳机发烧友
◇工具讨论区◇
3D打印/雕刻机
我是工具控
仪表谈谈
◇数字の户外◇
骑行天地
四轴/模型
摄友沙龙
◇网站服务区◇
站务中心
家有评测
缘聚茶楼
关闭
关闭
选中
1
篇
全选