打印
[STM32F1]

制作一台四路热电偶采集器 stm32+max6675

[复制链接]
3354|46
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanzhen654|  楼主 | 2019-8-22 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

主要材料:

MCU:STM32F103C8T6核心板

热电偶:4个K型热电偶

采集芯片:4个MAX6675

显示:LCD1602液晶

指示:LED指示灯

接线柱:四路热电偶接线柱

箱子:180*120**80


使用特权

评论回复
沙发
hanzhen654|  楼主 | 2019-8-22 16:18 | 只看该作者
功能:

1.支持四路热电偶数据同步串口输出到PC端。

2.支持4路温度同时采集,LCD显示。

3.支持热插拔方式,方便操作。

4.LED提示工作状态。

5.带有开机**。

使用特权

评论回复
板凳
hanzhen654|  楼主 | 2019-8-22 16:18 | 只看该作者
需要改进处:

可以使用LCD TFT彩屏显示
识别热电偶的状态。
打印将10275改为0度。
预留swd调试端口。

使用特权

评论回复
地板
hanzhen654|  楼主 | 2019-8-22 16:21 | 只看该作者
正面

使用特权

评论回复
5
hanzhen654|  楼主 | 2019-8-22 16:22 | 只看该作者
开关细节图

使用特权

评论回复
6
hanzhen654|  楼主 | 2019-8-22 16:22 | 只看该作者
串口细节图:

使用特权

评论回复
7
hanzhen654|  楼主 | 2019-8-22 16:23 | 只看该作者
电源插座细节图

使用特权

评论回复
8
hanzhen654|  楼主 | 2019-8-22 16:23 | 只看该作者
准备仪器,连接电源(5V 1A)

使用特权

评论回复
9
hanzhen654|  楼主 | 2019-8-22 16:26 | 只看该作者
电源线另一端连接仪器5V电源插座

使用特权

评论回复
10
hanzhen654|  楼主 | 2019-8-22 16:27 | 只看该作者
连接串口线到电脑PC端,串口线连接到仪器。

使用特权

评论回复
11
hanzhen654|  楼主 | 2019-8-22 16:27 | 只看该作者
串口线连接到电脑USB

使用特权

评论回复
12
hanzhen654|  楼主 | 2019-8-22 16:27 | 只看该作者
打开仪器电源开关, —符号端为接通端,O符号端为断开端,此时开关处于接通状态。

使用特权

评论回复
13
hanzhen654|  楼主 | 2019-8-22 16:29 | 只看该作者
LCD上电会显示 GIMM Init………字样

使用特权

评论回复
14
hanzhen654|  楼主 | 2019-8-22 16:29 | 只看该作者
连接热电偶,将热电偶的正极(红色)连接接线柱的红色,热电偶的负极(蓝色)连接接线柱的黑色。

使用特权

评论回复
15
hanzhen654|  楼主 | 2019-8-22 16:29 | 只看该作者
LCD会显示该通道的温度值,对应的LED会以一定时间周期翻转状态。

使用特权

评论回复
16
hanzhen654|  楼主 | 2019-8-22 16:30 | 只看该作者
打开串口助手,波特率选择9600。

使用特权

评论回复
17
hanzhen654|  楼主 | 2019-8-22 16:30 | 只看该作者
需要实时记录温度数据的话,点击串口助手的保存数据按钮,注意:点击保存后,只是记录从开始采集那一刻开始到点击按钮时刻的数据。

使用特权

评论回复
18
hanzhen654|  楼主 | 2019-8-22 16:32 | 只看该作者
#include "lcd1602.h"
// RS:PC13   RW:PC14;  EN:PC15      
// DB0~DB7  PA0~PA7
// vO :接电位器
// 1脚:GND
// 2脚:VCC
void GPIO_Configuration()
{   
          GPIO_InitTypeDef GPIO_InitStructure;
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB, ENABLE);
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
       
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOA, &GPIO_InitStructure);
}


void LCD1602_Wait_Ready(void)
{
        u8 sta;
        DATAOUT(0xff);
        LCD_RS_Clr();
        LCD_RW_Set();
        do
        {
                LCD_EN_Set();
                SysTick_delay_ms(5);
                sta = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
                LCD_EN_Clr();
        }while(sta & 0x80);
}

void LCD1602_Write_Cmd(u8 cmd)
{
        LCD1602_Wait_Ready();
        LCD_RS_Clr();
        LCD_RW_Clr();
        DATAOUT(cmd);
        LCD_EN_Set();
        LCD_EN_Clr();
}

void LCD1602_Write_Dat(u8 dat)
{
        LCD1602_Wait_Ready();
        LCD_RS_Set();
        LCD_RW_Clr();
        DATAOUT(dat);
        LCD_EN_Set();
        LCD_EN_Clr();
}



void LCD1602_ClearScreen(void)
{
        LCD1602_Write_Cmd(0x01);
}

void LCD1602_Set_Cursor(u8 x, u8 y)
{
        u8 addr;
       
        if (y == 0)
                addr = 0x00 + x;
        else
                addr = 0x40 + x;
        LCD1602_Write_Cmd(addr | 0x80);
}



void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
{
        LCD1602_Set_Cursor(x, y);
        while(*str != '\0')
        {
                LCD1602_Write_Dat(*str++);
        }
}

void LCD1602_Init(void)
{
        GPIO_Configuration();
        LCD1602_Write_Cmd(0x38);       
        LCD1602_Write_Cmd(0x0c);
        LCD1602_Write_Cmd(0x06);       
        LCD1602_Write_Cmd(0x01);
}


使用特权

评论回复
19
hanzhen654|  楼主 | 2019-8-22 16:32 | 只看该作者
#ifndef _LCD1602_H_
#define _LCD1602_H_


#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"

#define u8   unsigned char
#define u16  unsigned int
       
#define        LCD_RS_Set()        GPIO_SetBits(GPIOC, GPIO_Pin_13)
#define        LCD_RS_Clr()        GPIO_ResetBits(GPIOC, GPIO_Pin_13)

#define        LCD_RW_Set()        GPIO_SetBits(GPIOC, GPIO_Pin_14)
#define        LCD_RW_Clr()        GPIO_ResetBits(GPIOC, GPIO_Pin_14)

#define        LCD_EN_Set()        GPIO_SetBits(GPIOC, GPIO_Pin_15)
#define        LCD_EN_Clr()        GPIO_ResetBits(GPIOC, GPIO_Pin_15)
#define        DATAOUT(x)          GPIO_Write(GPIOA, x)


void GPIO_Configuration(void);
void LCD1602_Wait_Ready(void);
void LCD1602_Write_Cmd(u8 cmd);
void LCD1602_Write_Dat(u8 dat);
void LCD1602_ClearScreen(void);
void LCD1602_Set_Cursor(u8 x, u8 y);
void LCD1602_Show_Str(u8 x, u8 y, u8 *str);
void LCD1602_Init(void);


#endif


使用特权

评论回复
20
hanzhen654|  楼主 | 2019-8-22 16:32 | 只看该作者
#include "max6675.h"

float temprature1,temprature2,temprature3,temprature4;

#define SCLK1_H   GPIO_SetBits(TC1_MAX6675_PORT, TC1_SCK)
#define SCLK1_L   GPIO_ResetBits(TC1_MAX6675_PORT, TC1_SCK)
#define DIN1      GPIO_ReadInputDataBit(TC1_MAX6675_PORT, TC1_SO)

#define SCLK2_H   GPIO_SetBits(TC2_MAX6675_PORT, TC2_SCK)
#define SCLK2_L   GPIO_ResetBits(TC2_MAX6675_PORT, TC2_SCK)
#define DIN2      GPIO_ReadInputDataBit(TC2_MAX6675_PORT,TC2_SO)

#define SCLK3_H   GPIO_SetBits(TC3_MAX6675_PORT,TC3_SCK)
#define SCLK3_L   GPIO_ResetBits(TC3_MAX6675_PORT,TC3_SCK)
#define DIN3      GPIO_ReadInputDataBit(TC3_MAX6675_PORT,TC3_SO)

#define SCLK4_H   GPIO_SetBits(TC4_MAX6675_PORT,TC4_SCK)
#define SCLK4_L   GPIO_ResetBits(TC4_MAX6675_PORT,TC4_SCK)
#define DIN4      GPIO_ReadInputDataBit(TC4_MAX6675_PORT,TC4_SO)



void Init_MAX6675_GPIO(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(TC1_RCC_MAX6675_SCK|TC2_RCC_MAX6675_SCK|TC3_RCC_MAX6675_SCK|TC4_RCC_MAX6675_SCK, ENABLE);

        GPIO_InitStructure.GPIO_Pin = TC1_SCK|TC1_CS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(TC1_MAX6675_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = TC2_SCK|TC2_CS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(TC2_MAX6675_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = TC3_SCK|TC3_CS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(TC3_MAX6675_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = TC4_SCK|TC4_CS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(TC4_MAX6675_PORT, &GPIO_InitStructure);
       

        GPIO_InitStructure.GPIO_Pin = TC1_SO;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
        GPIO_Init(TC1_MAX6675_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = TC2_SO;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
        GPIO_Init(TC2_MAX6675_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = TC3_SO;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
        GPIO_Init(TC3_MAX6675_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = TC4_SO;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
        GPIO_Init(TC4_MAX6675_PORT, &GPIO_InitStructure);

        GPIO_SetBits(TC1_MAX6675_PORT, TC1_CS );//CS1=1;
        GPIO_ResetBits(TC1_MAX6675_PORT, TC1_SCK );//SCK1=0;
        GPIO_SetBits(TC2_MAX6675_PORT, TC2_CS );//CS2=1;
        GPIO_ResetBits(TC2_MAX6675_PORT, TC2_SCK );//SCK2=0;
        GPIO_SetBits(TC3_MAX6675_PORT, TC3_CS );//CS3=1;
        GPIO_ResetBits(TC3_MAX6675_PORT, TC3_SCK );//SCK3=0;
        GPIO_SetBits(TC4_MAX6675_PORT, TC4_CS );//CS4=1;
        GPIO_ResetBits(TC4_MAX6675_PORT, TC4_SCK );//SCK4=0;
}


void MAX6675_Read_Temp(unsigned char channel)
{
        uint16_t temp=0;
  char i;
        switch(channel)
        {
          case 1:               
                                                GPIO_ResetBits(TC1_MAX6675_PORT, TC1_CS);//CS=0;
                                                for(i=0;i<=15;i++)
                                                {
                                                        SCLK1_H;//read data SO
                                                        SysTick_delay_ms(1);
                                                        temp<<=1;
                                                        if(DIN1)
                                                        temp|=0x0001;
                                                        SCLK1_L;
                                                        SysTick_delay_ms(1);
                                                }
                                                GPIO_SetBits(TC1_MAX6675_PORT, TC1_CS);//CS=1;
                                                temp>>=3;       
                                                temprature1 = temp*0.25;
                break;       
    case 2:               
                                                GPIO_ResetBits(TC2_MAX6675_PORT,TC2_CS);//CS=0;
                                                for(i=0;i<=15;i++)
                                                {
                                                        SCLK2_H;//read data SO
                                                        SysTick_delay_ms(1);
                                                        temp<<=1;
                                                        if(DIN2)
                                                        temp|=0x0001;
                                                        SCLK2_L;
                                                        SysTick_delay_ms(1);
                                                }
                                                GPIO_SetBits(TC2_MAX6675_PORT, TC2_CS);//CS=1;
                                                temp>>=3;       
                                                temprature2 = temp*0.25;
                break;       
    case 3:               
                                                GPIO_ResetBits(TC3_MAX6675_PORT,TC3_CS);//CS=0;
                                                for(i=0;i<=15;i++)
                                                {
                                                        SCLK3_H;//read data SO
                                                        SysTick_delay_ms(1);
                                                        temp<<=1;
                                                        if(DIN3)
                                                        temp|=0x0001;
                                                        SCLK3_L;
                                                        SysTick_delay_ms(1);
                                                }
                                                GPIO_SetBits(TC3_MAX6675_PORT, TC3_CS);//CS=1;
                                                temp>>=3;       
                                                temprature3 = temp*0.25;
                break;
    case 4:               
                                                GPIO_ResetBits(TC4_MAX6675_PORT,TC4_CS);//CS=0;
                                                for(i=0;i<=15;i++)
                                                {
                                                        SCLK4_H;//read data SO
                                                        SysTick_delay_ms(1);
                                                        temp<<=1;
                                                        if(DIN4)
                                                        temp|=0x0001;
                                                        SCLK4_L;
                                                        SysTick_delay_ms(1);
                                                }
                                                GPIO_SetBits(TC4_MAX6675_PORT, TC4_CS);//CS=1;
                                                temp>>=3;       
                                                temprature4 = temp*0.25;
                break;                                                               
        }
}




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

1766

帖子

2

粉丝