资源描述
机电系统测控装置设计制作实践报告
设计项目:单片机:自动散热器 PLC:机械吊臂
班级:09机械1班
设计小组组员:
序号
姓名
学号
分工
备注
1
苏汉生
0915020045
单片机编程,电路的检测,元件的购买
2
江子毅
PLC编程,电路焊接
3
李国俊
电路焊接,PLC模型制作
设计人姓名:苏汉生,江子毅,李国俊
提交日期:2012年3月9日
一、设计任务
(1) 单片机自动监控系统
(2) PLC系统
二、设计过程
1、单片机系统
(1)单片机自动控制系统:自动散热器
(2)功能说明:自动检测发热体(用电灯泡代替),当温度超过25℃,蜂鸣器响,LED灯亮,表示警告,风扇启动对发热体进行散热;当温度不超过25℃,蜂鸣器不响,LED灯熄灭,表示正常状态。发热体(电灯泡)的开及关是用红外控制的。
(3)电路原理图:
(4)流程图:
红外控制发热体的开与关
温度检测
温度>25
是
否
蜂鸣器响
LED灯亮
风扇启动对发热体进行散热
蜂鸣器不响
LED灯熄灭
风扇关闭停止对发热体进行散热
(5)程序及每个函数的说明:
const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
用于在数码管上显示数字的数组,对应的是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
void time0_init(void)
{
OCR0A = 10;
TCCR0A |= (1<<WGM01);
TCCR0B |= ((1<<CS02)|(1<<CS00));
TCNT0 = 0;
TIMSK0 |= (1<<OCIE0A);
定时器0的初始化
void init_devices(void)
{
CLI();
time0_init();
DDRC |= 0x1E;
DDRD |= 0xD8;
PORTC &= 0xE1;
PORTD |= (1<<3);
SEI();
}
设备初始化,对单片机上的I/O口进行初始化。
void display_num(unsigned char num)
{
static unsigned char wei = 0;
unsigned char num_l,num_r,i;
num_r = num%10;
num /= 10;
num_l = num%10;
if(wei)
num_r = Seg7_Data[num_r];
else
num_r = Seg7_Data[num_l];
for (i=0;i<8;i++)
{
if (num_r & 0x80)
PORTC |= 0x04;
else
PORTC &= 0x0FB;
num_r = num_r<<1;
PORTC |= 0x02;
PORTC &= 0x0FD;
}
if (!wei)
{
PORTC |= (1<<3);
PORTC &=~(1<<4);
}
else
{
PORTC &=~(1<<3);
PORTC |= (1<<4);
}
wei = !wei;
}
采用74LS164 8位移位寄存器(串行输入,并行输出)的显示函数,用于把要显示的数字送到数码管上,并显示出来。
void init_1820(void)
{
TEM_DDR &=~ (1<<TEM_SDT);
SET_TEM_DDR;
SET_TEM_SDT;
CLR_TEM_SDT;
delay_nus(180);
SET_TEM_SDT;
CLR_TEM_DDR;
delay_nus(5);
while(CHECK_TEM_SDT);
SET_TEM_DDR;
SET_TEM_SDT;
delay_nus(80);
}
该程序是DS18B20的初始化,主机总线t0时刻发送一复位脉冲(最短为480us,最长为960us的低电平信号),接着在t1时刻释放总线并进入接受状态,DS18B20在检测到总线的上升沿之后,等待15-60us,接着DS18B20在t2时刻发出存在脉冲(低电平,持续60-240us)。
void write_1820(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLR_TEM_SDT;
if(data&(1<<i))
SET_TEM_SDT;
else
CLR_TEM_SDT;
delay_nus(20);
SET_TEM_SDT;
}
SET_TEM_SDT;
}
写时间隙,当主机总线t0时刻从高拉至低电平时,就产生写时间隙,见图1、图2,从t0时刻开始15us之内应将所需写的位送到总线上,DS18B20在t0后15-60us间对总线采样。若低电平,写入的位是0,见图1;若高电平,写入的位是1,见图2。连续写2位间的间隙大于1us。
图1 DS18B20 写0时序
图2 DS18B20 写1时序
unsigned char read_1820(void)
{
unsigned char temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
CLR_TEM_SDT;
SET_TEM_SDT;
CLR_TEM_DDR;
k=CHECK_TEM_SDT;
if(k)
temp|=(1<<n);
else
temp&=~(1<<n);
delay_nus(20);
SET_TEM_DDR;
}
return (temp);
}
读时间隙,见图3,主机总线t0时刻从高拉至低电平时,总线至少保持低电平1us。之后在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t2时刻前有效。t2距t1为15us,也就是说,t2时刻前主机必须完成读位,并在t0后的60us-120us内释放总线。
图3 读时序
void system_init(void)
{
DDRD |= (1<<0);
PORTD |= (1<<0);
DDRD &= ~(1<<1);
PORTD |= (1<<1);
PORTD |= (1<<2);
DDRD &= ~(1<<2);
DDRD |= (1<<3);
PORTD |= (1<<3);
OCR0A = 50;
TCCR0A = (1<<CS01);
TCCR0B = (1<<WGM01);
TIMSK0 = (1<<OCIE0A)
SEI();
}
设备初始化,对单片机I/O进行初始化,定义定时器0,CTC模式,8分频,T/C A比较中断
unsigned char get_pulse()
{
unsigned char return_val=0;
if (yk_pulse_n == 16)
{
if (yk_pulse == PULSE1)
return_val = 2;
else if (yk_pulse == PU2LSE)
return_val = 1;
yk_pulse_n = 0;
pulse_tick = 0;
}
return return_val;
}
获取脉冲函数,通过这个函数得到对应的脉冲,返回对应标志值,在主函数中进行判断。当脉冲等于16时,进行判断,脉冲数在最下面的程序中不断增加。接收到遥控脉冲1,返回2;接收到脉冲2,返回1。
#pragma interrupt_handler timer0_ctc_A:15
void timer0_ctc_A(void)
{
m_second10++;
this_sign = PIND & 0x04;
if (this_sign == sign)
{
if (pulse_tick<250)
pulse_tick ++;
}
else if (yk_pulse_n < 16)
{
if (pulse_tick>120)
yk_pulse_n = 0;
else
{
yk_pulse = yk_pulse >>1;
if (19<pulse_tick && pulse_tick<30)
{
yk_pulse |= 0x8000;
}
yk_pulse_n ++;
}
sign = this_sign;
pulse_tick = 0;
}
}
判断电平是否和上次的一样,是的话继续计数,然后判断计数值代表的时间,来判断是短脉冲还是宽脉冲;不是一样,说明电平变化了,对计数值代表的脉冲长度进行判断。是电平一样,是的话继续判断,计数不大于周期,因为有可能是周期间很长的间隙,不断计数,用来等下判断1还是0。电平开始变化,如果脉冲数小于16,不断自加,等于16时,会在上面程序进行判断是哪个脉冲串。电平变化后,也有可能是无效脉冲,比如一段脉冲的前后8ms间隙。脉冲数右移,第一次时,初始化yk_pulse为0x0000,有效宽脉冲,比短脉冲长比长脉冲短,实际利用检验方法把计数不断变小。如果是有宽脉冲那么最高位16位置位。不断加脉冲数,在上面的读脉函数get_pulse函数如果等于16进行判断,返回标志值。把读到变化后电平值赋给标志电平位,以便下一次判断,计数清零。
2、PLC系统
(1)题目:吊机
(2)功能说明:用PLC控制直流小电机,实现吊机座的横纵向运动、吊机台的旋转运动以及吊重物的绳子的升降运动。
(3)完整电路原理图
输入:
输出:
(4)流程图
(5)程序及每个函数的说明
初始化,先进行扫描,用移动字指令存取当前值
当按下按键1时,接通I0.0,启动计时器T32,以60ms为周期启动M10.0,当计时器T32大于VW20的值时,接通Q0.0,即电机1以某个速度正转。再按一下按键时,电机停下。
当按下按键2时,接通I0.1,启动计时器T33,以70ms为周期启动M10.1,当计时器T33大于VW22的值时,接通Q0.0,即电机1以某个速度反转。再按一下按键时,电机停下。(当电机反转时,如果按下按键1时,电机还是照常反转,不能切换成正转;正转时同理)
当按下按键时,将IN2加上IN1,重新定义OUT,使高电平的时间减少,达到转速变慢的效果。
当按下按键时,将IN2加上IN1,重新定义OUT,使高电平的时间增加,达到转速变快的效果。
网络10—网络15控制电机2;网络16—网络21控制电机3;网络22—网络27控制电机4。四个电机控制的原理是一样的。
当按下按键接通I1.3,复位。
三、设计结果及总结
开学前三周的课程设计结束了。对于这次的课程设计,自己感觉不满意,当然其中自己有很大的责任。单片机的自动散热器到离作品提交的两天前突然坏掉了,自己对硬件的检测还是存在很大的问题,经过两天的奋斗,还是没能把突然坏掉的自动散热器拯救过来。在这过程中,自己感觉到很多东西都要自己去学,很多元件我们以前都没有接触过,老师都没有教过,要自己上网去查,去问同学,问老师。红外接头信号的检测,继电器各脚的连接,DS18B20的连接等等,都需要自己去学习。在制作的过程中,遇到很多问题,程序上的不懂,基础的薄弱,加剧了制作的难度,但是我们没有放弃,遇到不懂,我们会讨论,会去问同学,问老师,找到解决方法。一个组,最重要的是团结,大家一齐做事,齐心协力把任务做好,我们收获的不仅是知识,收获的还有我们的友谊。在整个过程中,让我学习到的是,遇到困难不要放弃,因为那正是考验你的时候,困难不可怕,我们要勇敢面对,知识不懂不要怕,我们有信心把它学习好。
不知不觉历时三个星期的课程设计已经结束了。我们经历了辛酸,但我们从中收获了知识。从设想到构思,从选择材料到采购材料,从焊接电路板到编写程序,每一步都需要我们认真细心去对待,每一步都需要我们亲自去体验。我们从中得到了实践,得到了锻炼,当然从中我们遇到了很多困难,譬如在这么短的时间内学习、编写以及调试PLC程序,而且只有6台PLC,我们组只在三个星期内“玩”过两天的PLC,能完成PLC的系统,真的不容易啊。因此我要感谢和我们共用一台PLC的其他三个组的同学,他们让我知道,团队合作不只是一个小组的事,不只是在一个小组之间体会出来,他们也让我明白团结精神在每个小组之间都传递着。
19 / 19
展开阅读全文