找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 4291|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于MSP430G2553的溫度采集和控制系統(tǒng)設(shè)計(jì)資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:977412 發(fā)表于 2021-11-3 18:59 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

完成的工作

我以選題二為任務(wù)目標(biāo)
  • 經(jīng)過自學(xué),基本了解了MSP430G2553芯片的結(jié)構(gòu)、外設(shè)模塊,加上之前利用CCS軟件給MSP430單片機(jī)燒制過程序,已基本了解CCS編程基本知識(shí)。
  • 掌握了利用AD軟件繪制原理圖的基本步驟,并能根據(jù)原理圖繪制PCB圖,其中的布局布線原則能好好遵守。
  • 制板到手后通過對(duì)貼片元器件的焊接,大大提高了焊接的能力,能保證不虛焊、焊反等問題并具有一定的美觀性。
  • 通過查閱資料加上自己的改進(jìn)完成了代碼的調(diào)試,最后的溫度采集和控制系統(tǒng)能實(shí)現(xiàn)利用OLED顯示實(shí)時(shí)溫度和供電電壓,并能輸出PWM波控制電機(jī)運(yùn)轉(zhuǎn),溫度越高PWM波占空比越高電機(jī)轉(zhuǎn)得越快。
二、系統(tǒng)設(shè)計(jì)

2.1 硬件設(shè)計(jì)

2.1.1 硬件系統(tǒng)方案框圖及介紹

包含六大模塊,分別是:DS18B20,實(shí)現(xiàn)對(duì)溫度的采集;

                     AMS1117,穩(wěn)壓芯片組成電源部分;

                      OLED,將采集的信息顯示在屏幕上;

                     L9110S,驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn);

                     MAX3232,實(shí)現(xiàn)RS-232性能,搭配四個(gè)0.1uF的電容組成電池供電設(shè)備。

                     MSP430G2553,整個(gè)系統(tǒng)的CPU;

2.1.2MSP430G2553單片機(jī)的特點(diǎn)

? 低電源電壓范圍:1.8V 至 3.6V
? 超低功耗
– 運(yùn)行模式:230μA(在 1MHz 頻率和 2.2V 電壓條件下)
– 待機(jī)模式:0.5μA
– 關(guān)閉模式(RAM 保持):0.1μA
? 5 種節(jié)能模式
? 可在不到 1μs 的時(shí)間里超快速地從待機(jī)模式喚醒
? 16 位精簡(jiǎn)指令集 (RISC) 架構(gòu),62.5ns 指令周期時(shí)間
? 基本時(shí)鐘模塊配置
– 具有四種校準(zhǔn)頻率并高達(dá) 16MHz 的內(nèi)部頻率
– 內(nèi)部超低功耗低頻 (LF) 振蕩器
– 32kHz 晶振
– 外部數(shù)字時(shí)鐘源
? 兩個(gè) 16 位 Timer_A,分別具有三個(gè)捕獲/比較寄存器
? 多達(dá) 24 個(gè)支持觸摸感測(cè)的 I/O 引腳

2.1.3MSP430G2553單片機(jī)管腳作用

2.1.4原理圖設(shè)計(jì)主要規(guī)范

1、元件編號(hào)以設(shè)計(jì)圖為準(zhǔn),不要修改元件的原始編號(hào)
2、以設(shè)計(jì)模塊為單元進(jìn)行繪制,完整的單元模塊內(nèi)元件用導(dǎo)線連接
3、功能模塊之間用網(wǎng)絡(luò)標(biāo)號(hào)連接
4、重要器件的管腳與PDF文檔一致
5、特殊器件的原理圖庫制作要簡(jiǎn)潔且能說明問題
6、引出所需的各種接口如電源接口、測(cè)試接口、下載接口等,功能模塊之間添加跳線為模塊測(cè)試用
7、有極性區(qū)分的兩引腳器件連接注意正負(fù)如極性電容、數(shù)碼管(共陽共陰要實(shí)測(cè))等,三引腳器件連接注意引腳功能排列順序如電位器、三極管、集成穩(wěn)壓電源芯片等。
8、電阻、二極管等在原理圖庫中的符號(hào)直接修改成小一些的符號(hào)(以10mil為單位合理縮�。�。
9、以A4大小繪圖,盡量緊促
10、自制封裝器件的單位用公制mm。
11、元件外圍邊框?yàn)樵附臃胖脮r(shí)的垂直投影
12、元件的絲印層不要覆蓋至焊盤
13、焊盤孔徑大小較管腳尺寸(方形引腳器件應(yīng)測(cè)量對(duì)角尺寸)大0.2~0.3mm,具體值視具體器件而定,優(yōu)先采用0.6mm、0.8mm、1.0mm、1.2mm等尺寸
14、焊盤的外徑應(yīng)為大于等于焊盤孔徑的2倍
15、自制元件封裝的命名:元件編號(hào)—安裝方式(默認(rèn)為立式安裝可不做標(biāo)注,臥式安裝時(shí)標(biāo)W)
16、常用元件可參考原庫封裝
17、特殊元件封裝的參考點(diǎn)設(shè)置以PCB板的裝配圖尺寸標(biāo)注的參考點(diǎn)為準(zhǔn)
18、有極性區(qū)分的兩引腳器件1腳為正,三引腳器件連接注意引腳排列與功能一致(尤其注意三極管的管腳與原理圖及手冊(cè)要對(duì)應(yīng))

2.1.5 系統(tǒng)原理圖及各部分介紹

溫度采集模塊
供電模塊
驅(qū)動(dòng)電機(jī)模塊
電池充電模塊
系統(tǒng)CPU
OLED顯示模塊

2.1.6 PCB設(shè)計(jì)主要規(guī)范和PCB圖

(1)不同電壓等級(jí)電源應(yīng)該隔離,電源走線不應(yīng)交叉。
(2)走線采用 45°拐角或圓弧拐角,不允許有尖角形式的拐角。
(3)PCB走線直接連接到焊盤的中心,與焊盤連接的導(dǎo)線寬度不允許超過焊盤外徑的大小。
(4)高頻信號(hào)線的線寬不小于 20mil,外部用地線環(huán)繞,與其他地線隔離。
(5)干擾源(DC/DC 變換器、晶振、變壓器等)底部不要布線,以免干擾。
(6)盡可能加粗電源線和地線,在空間允許的情況下,電源線的寬度不小于 50mil。
(7)低電壓、低電流信號(hào)線寬 9~30mil,空間允許的情況下盡可能加粗。
(8)信號(hào)線之間的間距應(yīng)該大于 10mil,電源線之間間距應(yīng)該大于 20mil。
(9)大電流信號(hào)線線寬應(yīng)該大于 40mil,間距應(yīng)該大于 30mil。
(10)過孔最小尺寸優(yōu)選外徑 40mil,內(nèi)徑 28mil。在頂層和底層之間用導(dǎo)線連接時(shí),優(yōu)選焊盤。
(11)不允許在內(nèi)電層上布置信號(hào)線。
(12)內(nèi)電層不同區(qū)域之間的間隔寬度不小于 40mil。
(13)在繪制邊界時(shí),盡量不要讓邊界線通過所要連接到的區(qū)域的焊盤。
(14)在頂層和底層鋪設(shè)敷銅,建議設(shè)置線寬值大于網(wǎng)格寬度,完全覆蓋空余空間,且不留有死銅,同時(shí)與其他線路保持 30mil(0.762mm)以上間距(可以在敷銅前設(shè)置安全間距,敷銅完畢后改回原有安全間距值)。
(15)在布線完畢后對(duì)焊盤作淚滴處理。
(16)金屬殼器件和模塊外部接地。
(17)放置安裝用和焊接用焊盤。
(18)DRC 檢查無誤。

2.1.7原理圖和PCB設(shè)計(jì)軟件

(1)原理圖編譯時(shí),提示Net has no driving source

一是將對(duì)應(yīng)元件的管腳類型修改為對(duì)應(yīng)的類型;(如果是input、output等,表示進(jìn)行電氣規(guī)則檢查,需要將相連接的關(guān)聯(lián)元件的管腳類型都進(jìn)行相應(yīng)設(shè)置,比如:這兒5腳是input,則和它連接的部分可調(diào)整為output;如果是passive類型,則表示不需要進(jìn)行電氣規(guī)則檢測(cè)。)

第二個(gè)方法是:點(diǎn)擊“放置——指示——沒有ERC”,這兒,沒有ERC即表示不就行電氣規(guī)則檢查,然后,在告警的相應(yīng)點(diǎn)處放置一個(gè)No ERC即可

(2)原理圖編譯時(shí),提示Floating Net Label...at...

網(wǎng)絡(luò)標(biāo)號(hào)懸浮,沒有連接

(3)畫完原理圖的時(shí)候一定要讓所有的元件都有封裝,否則導(dǎo)PCB的時(shí)候會(huì)找不到元件

(4)若發(fā)現(xiàn)圖不正確,一定要先改原理圖,再用原理圖更PCB.

(5)PCB原件移動(dòng)提示綠色報(bào)錯(cuò)問題
可能的原因:1、不符合DRC規(guī)則,比如原件之間距離過近
2、右下角ROOM沒有刪除

2.1.8 焊接電路板注意事項(xiàng)

1、選擇合適的焊接溫度

電烙鐵的焊接溫度過高或者過低,都容易造成焊接不良。

2、焊接元器件遵循從小到大的原則

焊接元器件要先焊接小,再焊接大。

3、注意極性反向

像一些電容、電阻、二極管和三極管,是有極性方向的,在焊接時(shí)要避免接反。

4、錫不易過多

焊接時(shí)要確保焊點(diǎn)的周圍都有錫,防止虛焊,但并不是錫越多越好,當(dāng)焊點(diǎn)的錫量層錐形即是最好的。電路板焊接時(shí)還要注意通風(fēng),可以選擇配備一個(gè)抽風(fēng)機(jī),防止焊接時(shí)產(chǎn)生的氣體吸入人體,對(duì)人體造成傷害。

2.2 軟件設(shè)計(jì)

2.2.1 軟件設(shè)計(jì)流程


測(cè)溫函數(shù)
#ifndef __DS18B20_H
#define __DS18B20_H

#include<msp430g2553.h>

#define  DQ_OUT P2DIR|=BIT1
#define  DQ_IN  P2DIR&=~BIT1
#define  DQ_H   P2OUT|=BIT1
#define  DQ_L   P2OUT&=~BIT1
#define  DQ_READ  (P2IN&BIT1)

#define uchar unsigned char
#define uint  unsigned int

float readtemperature(void);



#endif  //__DS18B20_H

OLED顯示函數(shù)
#ifndef __OLED_H
#define __OLED_H                                                         
#include    <msp430.h>
#include              <intrinsics.h>
#define  u8 unsigned char
#define  u32 unsigned int
#define OLED_CMD  0              //寫命令
#define OLED_DATA 1              //寫數(shù)據(jù)



#define                            Set_Bit(val, bitn)                            (val |= (/*1 <<*/(bitn)))                           
#define                            Clr_Bit(val, bitn)                            (val &= ~(/*1<<*/(bitn)))                           
#define                            Get_Bit(val, bitn)                            (val & (1<<(bitn)) )                           
//----------------------------------------------------------------------------------
//OLED SSD1306 SPI  時(shí)鐘D0
//#define                            OLED_SSD1306_SCLK_DIR                                          (P1DIR)
//#define                            OLED_SSD1306_SCLK_OUT                                          (P1OUT)
#define                            OLED_SSD1306_SCLK_PIN_NUM                            (BIT7)

#define                            OLED_SSD1306_SCLK_IO_INIT                            (Set_Bit(P3DIR,OLED_SSD1306_SCLK_PIN_NUM))
#define                            OLED_SCLK_Set()                                                  (Set_Bit(P3OUT,OLED_SSD1306_SCLK_PIN_NUM))
#define                            OLED_SCLK_Clr()                                                        (Clr_Bit(P3OUT,OLED_SSD1306_SCLK_PIN_NUM))

//----------------------------------------------------------------------------------
//OLED SSD1306 SPI 數(shù)據(jù)D1
//#define                            OLED_SSD1306_SDIN_DIR                                          (P1DIR)
//#define                            OLED_SSD1306_SDIN_OUT                                          (P1OUT)
#define                            OLED_SSD1306_SDIN_PIN_NUM                            (BIT7)

#define                            OLED_SSD1306_SDIN_IO_INIT                            (Set_Bit(P1DIR,OLED_SSD1306_SDIN_PIN_NUM))
#define                            OLED_SDIN_Set()                                                        (Set_Bit(P1OUT,OLED_SSD1306_SDIN_PIN_NUM))
#define                            OLED_SDIN_Clr()                                                  (Clr_Bit(P1OUT,OLED_SSD1306_SDIN_PIN_NUM))

//----------------------------------------------------------------------------------
//OLED SSD1306 數(shù)據(jù)/命令DC
//#define                            OLED_SSD1306_DC_DIR                                                        (P1DIR)
//#define                            OLED_SSD1306_DC_OUT                                                        (P1OUT)
#define                            OLED_SSD1306_DC_PIN_NUM                                          (BIT5)

#define                            OLED_SSD1306_DC_IO_INIT                                          (Set_Bit(P2DIR,OLED_SSD1306_DC_PIN_NUM))
#define                            OLED_DC_Set()                                                        (Set_Bit(P2OUT,OLED_SSD1306_DC_PIN_NUM))
#define                            OLED_DC_Clr()                                                         (Clr_Bit(P2OUT,OLED_SSD1306_DC_PIN_NUM))

//----------------------------------------------------------------------------------
//OLED SSD1306 片選CS
//#define                            OLED_SSD1306_CE_DIR                                                        (P1DIR)
//#define                            OLED_SSD1306_CE_OUT                                                        (P1OUT)
#define                            OLED_SSD1306_CE_PIN_NUM                                          (BIT3)

#define                            OLED_SSD1306_CE_IO_INIT                                          (Set_Bit(P2DIR,OLED_SSD1306_CE_PIN_NUM))
#define                            OLED_CS_Set()                                                        (Set_Bit(P2OUT,OLED_SSD1306_CE_PIN_NUM))
#define                            OLED_CS_Clr()                                                        (Clr_Bit(P2OUT,OLED_SSD1306_CE_PIN_NUM))

//----------------------------------------------------------------------------------
//OLED SSD1306 復(fù)位/RES
//#define                            OLED_SSD1306_RST_DIR                                          (P1DIR)
//#define                            OLED_SSD1306_RST_OUT                                          (P1OUT)
#define                            OLED_SSD1306_RST_PIN_NUM                            (BIT4)

#define                            OLED_SSD1306_RST_IO_INIT                            (Set_Bit(P2DIR,OLED_SSD1306_RST_PIN_NUM))
#define                            OLED_RST_Set()                                                        (Set_Bit(P2OUT,OLED_SSD1306_RST_PIN_NUM))
#define                            OLED_RST_Clr()                                                        (Clr_Bit(P2OUT,OLED_SSD1306_RST_PIN_NUM))

#define SIZE 16
#define XLevelL                            0x02
#define XLevelH                            0x10
#define Max_Column              128
#define Max_Row                            64
#define              Brightness              0xFF
#define X_WIDTH               128
#define Y_WIDTH               64                                                                                                      
//-----------------OLED端口定義----------------                                                                          

void delay_ms(unsigned int ms);


                                

//OLED控制用函數(shù)
void OLED_WR_Byte(u8 dat,u8 cmd);                 
void OLED_Display_On(void);
void OLED_Display_Off(void);                                                                                                                                                     
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);
void OLED_ShowString(u8 x,u8 y, u8 *p);            
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
#endif

測(cè)電壓函數(shù)
void ADC_unit()
{
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    WDTCTL = WDTPW + WDTHOLD; /* Stop WDT */
    ADC10CTL1 |= CONSEQ_2; //單通道重復(fù)采樣模式
    ADC10CTL0 |= SREF_1+REFON+REF2_5V;//選擇內(nèi)部參考源 2.5V,打開基準(zhǔn)源
    ADC10CTL0 |= ADC10SHT_3+MSC; //過采樣率設(shè)置為 64 個(gè)采樣周期,打開 AD 轉(zhuǎn)換
    ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2 分 頻 為 采 樣 時(shí) 鐘 , 用ADC10SC 觸發(fā)采集
    ADC10CTL1 |=INCH_3; //選擇通道 A3
    ADC10CTL0 |= ADC10ON; //開啟 ADC10
    ADC10AE0 |= BIT3; //開啟外部通道 A3
}

void readvoltage()
{
    Voltage=0;
    int i=0;
    ADC10_Result=0;
    for(;i<20;i++)
    {
     ADC10CTL0 |=ENC+ADC10SC; //開始轉(zhuǎn)換
     //while((ADC10CTL0 &ADC10IFG)==0); //等待 ADC10IFG 標(biāo)志變高(轉(zhuǎn)換完成)
     ADC10_Result+=ADC10MEM; //讀取采樣結(jié)果
     }
     ADC10_Result= ADC10_Result/20;
     Voltage=(ADC10_Result*2.5*4)/1023;
}

PWM波輸出函數(shù)
void sys_Clock_Init() //時(shí)鐘初始化為 1MHz;
{
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */
}
void PMW_OUT_Init () //PWM 輸出初始化
{
P3DIR |= BIT5;
P3SEL |= BIT5;
TA0CTL |= TASSEL_1+TACLR+MC_1;
TA0CCTL1 |= OUTMOD_7; //選擇高電平模式的 PWM 輸出
TA0CCR0=500; // TA1CCR0 寫入 2000(1MHZ/2000)輸出達(dá)到了 500HZ
}

2.2.2 程序編程的主要規(guī)范
1.程序起名望文知義;
2.變量、函數(shù)起名規(guī)范;
3.循環(huán)變量可以用i,j,k;
4.計(jì)數(shù)器、累加器,一定要先賦初值0,循環(huán)內(nèi)部循環(huán)變量需要變化;
5.注釋規(guī)范;
6.代碼縮進(jìn)對(duì)齊;
7.適當(dāng)空行,將不同功能程序段分開,每段的最前頭,有單獨(dú)的注釋;

以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便保存): word文檔.7z (987 KB, 下載次數(shù): 34)

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表