性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

【我的畢設(shè)作品】電動(dòng)自行車BLDC無(wú)刷電機(jī)控制保護(hù)的模擬仿真

感謝電源網(wǎng)給我們提供這樣一個(gè)平臺(tái),下面介紹一下我的畢設(shè)作品設(shè)計(jì)主要設(shè)計(jì)要求

主要指標(biāo):

1.對(duì)于無(wú)刷直流電機(jī)進(jìn)行實(shí)物仿真搭建并通過(guò)模擬控制器采集主要參數(shù)信息

2.模擬控制器能夠?qū)?shù)據(jù)傳輸出去并在主控面板上實(shí)時(shí)顯示

3.主控制器和模擬控制可以進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸模式不限

4.主控制模塊實(shí)現(xiàn)對(duì)采樣數(shù)據(jù)的處理并顯示

5.當(dāng)電動(dòng)自行車電機(jī)失壓、負(fù)載過(guò)輕、超額定轉(zhuǎn)速后控制器執(zhí)行相應(yīng)動(dòng)作并讓模擬器執(zhí)行相應(yīng)機(jī)構(gòu)

下附原理圖

全部回復(fù)(29)
正序查看
倒序查看
2019-08-24 17:20
楠楠好棒!
0
回復(fù)
薄浩楠
LV.5
3
2019-08-24 23:20
@電源網(wǎng)-璐璐
[圖片]楠楠好棒!
馬上更新
0
回復(fù)
薄浩楠
LV.5
4
2019-08-24 23:25

本次畢業(yè)設(shè)計(jì)在電動(dòng)自行車bldc直流電機(jī)的控制的基礎(chǔ)上,主要利用BLDC無(wú)刷直流電機(jī)建立對(duì)電動(dòng)自行車電機(jī)的仿真;通過(guò)各類傳感器、信號(hào)調(diào)理電路以及AD轉(zhuǎn)換電路等將采集量轉(zhuǎn)換成數(shù)字量并送至模擬控制器中;模擬控制器將采集量記錄并保存在EEPROM中并通過(guò)異步串口協(xié)議將采集量傳輸至終端控制器中;終端控制器處理模擬調(diào)節(jié)器發(fā)來(lái)的信息并下達(dá)保護(hù)控制信號(hào),完成對(duì)發(fā)電機(jī)的控制檢測(cè)顯示和保護(hù)。

搭建模型如圖所示

1
回復(fù)
薄浩楠
LV.5
5
2019-08-24 23:30
@薄浩楠
本次畢業(yè)設(shè)計(jì)在電動(dòng)自行車bldc直流電機(jī)的控制的基礎(chǔ)上,主要利用BLDC無(wú)刷直流電機(jī)建立對(duì)電動(dòng)自行車電機(jī)的仿真;通過(guò)各類傳感器、信號(hào)調(diào)理電路以及AD轉(zhuǎn)換電路等將采集量轉(zhuǎn)換成數(shù)字量并送至模擬控制器中;模擬控制器將采集量記錄并保存在EEPROM中并通過(guò)異步串口協(xié)議將采集量傳輸至終端控制器中;終端控制器處理模擬調(diào)節(jié)器發(fā)來(lái)的信息并下達(dá)保護(hù)控制信號(hào),完成對(duì)發(fā)電機(jī)的控制檢測(cè)顯示和保護(hù)。搭建模型如圖所示[圖片]

為保障電動(dòng)自行車電機(jī)性能的實(shí)時(shí)監(jiān)測(cè)與維護(hù),因此搭建模擬電動(dòng)自行車的BLDC電機(jī),模擬電動(dòng)自行車電機(jī)模型如下圖所示。

0
回復(fù)
薄浩楠
LV.5
6
2019-08-24 23:31
@薄浩楠
為保障電動(dòng)自行車電機(jī)性能的實(shí)時(shí)監(jiān)測(cè)與維護(hù),因此搭建模擬電動(dòng)自行車的BLDC電機(jī),模擬電動(dòng)自行車電機(jī)模型如下圖所示。[圖片]
型號(hào)是A2212航模BLDC無(wú)刷電機(jī)
0
回復(fù)
薄浩楠
LV.5
7
2019-08-24 23:37
@薄浩楠
型號(hào)是A2212航模BLDC無(wú)刷電機(jī)

介紹一下電動(dòng)自行車無(wú)刷直流電機(jī)仿真采樣的硬件電路和具體實(shí)施方案

1.本系統(tǒng)需要對(duì)汽車車載三相發(fā)電機(jī)的電壓、電流以及轉(zhuǎn)速進(jìn)行實(shí)時(shí)在線采集。針對(duì)此系統(tǒng)三相交流電壓的采集,可通過(guò)DL-PT202G型電壓互感器將電壓變?yōu)榈蛪嚎蓽y(cè)的范圍之內(nèi),將電壓互感器二次側(cè)得到的電壓經(jīng)過(guò)整流橋以及電解電容的整流濾波之后輸出一個(gè)脈動(dòng)較小的直流電壓,這個(gè)直流電壓由于在0~5V可被STC12C5A60S2單片機(jī)AD采樣模塊準(zhǔn)確檢測(cè)到。

2.針對(duì)此系統(tǒng)電流的采樣,采用微電阻壓降放大的間接采樣法,主要原因是因?yàn)镾TC12C5A60S2單片機(jī)AD采樣模只識(shí)別電壓信號(hào)不識(shí)別電流等其他類型的信號(hào)。其具體做法是在系統(tǒng)主功率回路中串入一個(gè)阻值較小的康銅絲或者水泥電阻,在功率電流流向這個(gè)阻值較小的電阻時(shí)會(huì)產(chǎn)生一個(gè)微小的壓降,通過(guò)類似LM358之類的運(yùn)算放大器將其電壓放大再送至STC12C5A60S2單片機(jī)AD采樣模塊,來(lái)實(shí)現(xiàn)對(duì)系統(tǒng)主回路電流的測(cè)量。

3.針對(duì)此系統(tǒng)汽車三相交流發(fā)電機(jī)的轉(zhuǎn)速測(cè)量,在考慮到安裝體積以及其他綜合因素情況之下,本次采集選用電機(jī)碼輪以及以LM393為核心的光電門檢測(cè)模塊作為檢測(cè)發(fā)電機(jī)轉(zhuǎn)速的傳感器,通過(guò)間接測(cè)量光電門測(cè)速模塊的下降沿頻率來(lái)進(jìn)一步測(cè)出發(fā)電機(jī)的轉(zhuǎn)速。

0
回復(fù)
薄浩楠
LV.5
8
2019-08-24 23:38
@薄浩楠
型號(hào)是A2212航模BLDC無(wú)刷電機(jī)

此圖是當(dāng)時(shí)測(cè)得電機(jī)的兩相波形

0
回復(fù)
薄浩楠
LV.5
9
2019-08-24 23:41
@薄浩楠
此圖是當(dāng)時(shí)測(cè)得電機(jī)的兩相波形

總體設(shè)計(jì)方案

本系統(tǒng)利用DL-PT202G型電壓互感器作為電動(dòng)自行車電機(jī)電壓采樣傳感器,采用碼盤和基于寬電壓比較器LM393的電機(jī)測(cè)速模塊來(lái)實(shí)現(xiàn)對(duì)電機(jī)速度的測(cè)量。保護(hù)電路采用JQC-3F(T73)5VDC型繼電器作為保護(hù)器件。顯示報(bào)警電路由液晶顯示屏LCD1604、LED發(fā)光二極管和有源蜂鳴器組成。模擬控制模塊擬采用STC12C5A60S2作為電壓調(diào)節(jié)電路的主控核心芯片并將采樣回來(lái)的電機(jī)、電壓、電流和速度參數(shù)進(jìn)行數(shù)字化處理通過(guò)異步串口通信發(fā)送給主控制器。主控制電路核心控制芯片采用PIC18F2580單片機(jī),通過(guò)PIC18F2580單片機(jī)將采樣值進(jìn)行處理并發(fā)出相應(yīng)執(zhí)行命令給相應(yīng)被控元件。由于本系統(tǒng)需要模擬發(fā)電機(jī)以及要求負(fù)載三相相對(duì)對(duì)稱的特殊性,現(xiàn)采用A2212無(wú)刷直流電機(jī)模擬電動(dòng)自行車電機(jī),通過(guò)簡(jiǎn)易電子負(fù)載電路實(shí)現(xiàn)負(fù)載的三相對(duì)稱要求。

電子負(fù)載電路通過(guò)三相全橋整流電路和濾波電路將三相交流電壓轉(zhuǎn)化為直流電壓,通過(guò)簡(jiǎn)易負(fù)載電路調(diào)節(jié)一路負(fù)載便可實(shí)現(xiàn)三相電流的均衡調(diào)節(jié)。

模擬電子負(fù)載電路是下圖

0
回復(fù)
薄浩楠
LV.5
10
2019-08-24 23:55
@薄浩楠
總體設(shè)計(jì)方案本系統(tǒng)利用DL-PT202G型電壓互感器作為電動(dòng)自行車電機(jī)電壓采樣傳感器,采用碼盤和基于寬電壓比較器LM393的電機(jī)測(cè)速模塊來(lái)實(shí)現(xiàn)對(duì)電機(jī)速度的測(cè)量。保護(hù)電路采用JQC-3F(T73)5VDC型繼電器作為保護(hù)器件。顯示報(bào)警電路由液晶顯示屏LCD1604、LED發(fā)光二極管和有源蜂鳴器組成。模擬控制模塊擬采用STC12C5A60S2作為電壓調(diào)節(jié)電路的主控核心芯片并將采樣回來(lái)的電機(jī)、電壓、電流和速度參數(shù)進(jìn)行數(shù)字化處理通過(guò)異步串口通信發(fā)送給主控制器。主控制電路核心控制芯片采用PIC18F2580單片機(jī),通過(guò)PIC18F2580單片機(jī)將采樣值進(jìn)行處理并發(fā)出相應(yīng)執(zhí)行命令給相應(yīng)被控元件。由于本系統(tǒng)需要模擬發(fā)電機(jī)以及要求負(fù)載三相相對(duì)對(duì)稱的特殊性,現(xiàn)采用A2212無(wú)刷直流電機(jī)模擬電動(dòng)自行車電機(jī),通過(guò)簡(jiǎn)易電子負(fù)載電路實(shí)現(xiàn)負(fù)載的三相對(duì)稱要求。電子負(fù)載電路通過(guò)三相全橋整流電路和濾波電路將三相交流電壓轉(zhuǎn)化為直流電壓,通過(guò)簡(jiǎn)易負(fù)載電路調(diào)節(jié)一路負(fù)載便可實(shí)現(xiàn)三相電流的均衡調(diào)節(jié)。模擬電子負(fù)載電路是下圖

保護(hù)電路是由JQC-3F(T73)5VDC型繼電器作為主要器件構(gòu)成的,繼電器在高壓高功率場(chǎng)合下可起到對(duì)控制回路以及單片機(jī)之間的隔離和驅(qū)動(dòng)保護(hù),其在125V交流電壓條件下可承受10A的電流、在240V交流電壓條件下可承受7A的電流,可滿足本次畢業(yè)設(shè)計(jì)的需求。

下圖保護(hù)電路

0
回復(fù)
薄浩楠
LV.5
11
2019-08-24 23:57
@薄浩楠
保護(hù)電路是由JQC-3F(T73)5VDC型繼電器作為主要器件構(gòu)成的,繼電器在高壓高功率場(chǎng)合下可起到對(duì)控制回路以及單片機(jī)之間的隔離和驅(qū)動(dòng)保護(hù),其在125V交流電壓條件下可承受10A的電流、在240V交流電壓條件下可承受7A的電流,可滿足本次畢業(yè)設(shè)計(jì)的需求。下圖保護(hù)電路[圖片]

顯示模塊采用lcd1604,用法和1602類似但是比之前多了倆行

原理圖如下

報(bào)警電路采用有源蜂鳴器來(lái)作為主要報(bào)警器件,有源蜂鳴器配合一個(gè)NPN型三極管實(shí)現(xiàn)了單片機(jī)控制電路與蜂鳴器電路的隔離,等效增大了單片機(jī)的驅(qū)動(dòng)能力。值得一提是單片機(jī)I/O接口與三極管基極之間一般需要增設(shè)一個(gè)1K左右的電阻,否則基極電流過(guò)大會(huì)影響單片機(jī)的正常工作。這主要是由于單片機(jī)I/O輸出口灌電流比較弱的原因驅(qū)動(dòng)不了較大負(fù)載,這也是在單片機(jī)和有源蜂鳴器之間需要三極管的主要原因。另外在此基礎(chǔ)上加了綠、藍(lán)、紅色三路指示燈,所選LED發(fā)光二極管由于通過(guò)電流較分別在電小可用單片機(jī)直接進(jìn)行控制。報(bào)警電路如圖所示。

實(shí)物如下

0
回復(fù)
薄浩楠
LV.5
12
2019-08-25 00:07
@薄浩楠
顯示模塊采用lcd1604,用法和1602類似但是比之前多了倆行原理圖如下[圖片]報(bào)警電路采用有源蜂鳴器來(lái)作為主要報(bào)警器件,有源蜂鳴器配合一個(gè)NPN型三極管實(shí)現(xiàn)了單片機(jī)控制電路與蜂鳴器電路的隔離,等效增大了單片機(jī)的驅(qū)動(dòng)能力。值得一提是單片機(jī)I/O接口與三極管基極之間一般需要增設(shè)一個(gè)1K左右的電阻,否則基極電流過(guò)大會(huì)影響單片機(jī)的正常工作。這主要是由于單片機(jī)I/O輸出口灌電流比較弱的原因驅(qū)動(dòng)不了較大負(fù)載,這也是在單片機(jī)和有源蜂鳴器之間需要三極管的主要原因。另外在此基礎(chǔ)上加了綠、藍(lán)、紅色三路指示燈,所選LED發(fā)光二極管由于通過(guò)電流較分別在電小可用單片機(jī)直接進(jìn)行控制。報(bào)警電路如圖所示。[圖片]實(shí)物如下[圖片]

掉電儲(chǔ)存模塊

AT24C02作為掉電記憶8端口芯片,有2048bit的記憶容量。其可通過(guò)端口A0、A1、A2三個(gè)電平狀態(tài)檢測(cè)引腳組合成8種地址,可以讓模擬電壓調(diào)節(jié)模塊最大識(shí)別8個(gè)AT24C02芯片。AT24C02記憶芯片通過(guò)IIC總線通信協(xié)議與模擬電壓調(diào)節(jié)器進(jìn)行同步通信,其供電電源可由系統(tǒng)輔助電源模塊的5V供電。AT24C02外圍電路電路如圖所示。

0
回復(fù)
薄浩楠
LV.5
13
2019-08-25 00:12
@薄浩楠
掉電儲(chǔ)存模塊AT24C02作為掉電記憶8端口芯片,有2048bit的記憶容量。其可通過(guò)端口A0、A1、A2三個(gè)電平狀態(tài)檢測(cè)引腳組合成8種地址,可以讓模擬電壓調(diào)節(jié)模塊最大識(shí)別8個(gè)AT24C02芯片。AT24C02記憶芯片通過(guò)IIC總線通信協(xié)議與模擬電壓調(diào)節(jié)器進(jìn)行同步通信,其供電電源可由系統(tǒng)輔助電源模塊的5V供電。AT24C02外圍電路電路如圖所示。[圖片][圖片]

控制模塊的硬件電路主要是針對(duì)通信協(xié)議選定的

STC12C5A60S2采用11.0592mhz晶振。

PIC18F2580采用22.1184mhz晶振

下圖是硬件原理圖

下圖是實(shí)物圖

0
回復(fù)
薄浩楠
LV.5
14
2019-08-25 00:17
@薄浩楠
控制模塊的硬件電路主要是針對(duì)通信協(xié)議選定的STC12C5A60S2采用11.0592mhz晶振。PIC18F2580采用22.1184mhz晶振下圖是硬件原理圖[圖片][圖片]下圖是實(shí)物圖[圖片]

通信選擇選異步串口通信主要是由于異步串口通信建立過(guò)程簡(jiǎn)便便于實(shí)施

核心:串口通信

串口通信的硬件聯(lián)調(diào),

介于對(duì)系統(tǒng)參數(shù)采樣穩(wěn)定的要求,本系統(tǒng)采用9600bps波特率的串口通信速率,最大可傳輸76米的直線距離。硬件需要外接11.0592MHz的外部無(wú)源晶振,由于無(wú)源晶振需要起振電容,故選30pF的瓷片電容作為起振電容。由于模擬電壓調(diào)節(jié)器內(nèi)部沒(méi)有專用波特率生成的寄存器,因此,需要通過(guò)軟件算法配置T1定時(shí)器和TMOD寄存器。

終端控制器主要是由PIC18F2580單片機(jī)組成,由于終端控制器僅有一個(gè)異步串口通信接口引腳,因此其終端控制器的工作僅負(fù)責(zé)對(duì)模擬電壓調(diào)節(jié)器的信號(hào)進(jìn)行處理,并控制顯示和發(fā)出控制命令。終端控制器有內(nèi)部自帶的增強(qiáng)型USART模塊,增強(qiáng)型USART的操作主要由三個(gè)寄存器控制,分別是傳輸狀態(tài)和控制寄存器、接收狀態(tài)和控制寄存器、波特率控制寄存器。EUSART串口控件將根據(jù)需要自動(dòng)將引腳從輸入端配置到輸出端。

0
回復(fù)
薄浩楠
LV.5
15
2019-08-25 00:22
@薄浩楠
通信選擇選異步串口通信主要是由于異步串口通信建立過(guò)程簡(jiǎn)便便于實(shí)施核心:串口通信串口通信的硬件聯(lián)調(diào),介于對(duì)系統(tǒng)參數(shù)采樣穩(wěn)定的要求,本系統(tǒng)采用9600bps波特率的串口通信速率,最大可傳輸76米的直線距離。硬件需要外接11.0592MHz的外部無(wú)源晶振,由于無(wú)源晶振需要起振電容,故選30pF的瓷片電容作為起振電容。由于模擬電壓調(diào)節(jié)器內(nèi)部沒(méi)有專用波特率生成的寄存器,因此,需要通過(guò)軟件算法配置T1定時(shí)器和TMOD寄存器。終端控制器主要是由PIC18F2580單片機(jī)組成,由于終端控制器僅有一個(gè)異步串口通信接口引腳,因此其終端控制器的工作僅負(fù)責(zé)對(duì)模擬電壓調(diào)節(jié)器的信號(hào)進(jìn)行處理,并控制顯示和發(fā)出控制命令。終端控制器有內(nèi)部自帶的增強(qiáng)型USART模塊,增強(qiáng)型USART的操作主要由三個(gè)寄存器控制,分別是傳輸狀態(tài)和控制寄存器、接收狀態(tài)和控制寄存器、波特率控制寄存器。EUSART串口控件將根據(jù)需要自動(dòng)將引腳從輸入端配置到輸出端。

這是當(dāng)時(shí)對(duì)串口數(shù)據(jù)傳輸?shù)恼{(diào)試照片

0
回復(fù)
薄浩楠
LV.5
16
2019-08-25 00:35
@薄浩楠
這是當(dāng)時(shí)對(duì)串口數(shù)據(jù)傳輸?shù)恼{(diào)試照片[圖片][圖片]

接下來(lái)是介紹一下主要軟件設(shè)計(jì),

0
回復(fù)
薄浩楠
LV.5
17
2019-08-25 00:38
@薄浩楠
接下來(lái)是介紹一下主要軟件設(shè)計(jì),
這是數(shù)據(jù)采樣的程序
#include   
#include 
#include 
#define uint unsigned int
#define uchar unsigned char	  
#define ADC_FLAG      0X10

 #define VCC    220		
uchar code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};		//數(shù)碼管位選碼
uchar code SMGwei[] = {0xfe, 0xfd, 0xfb};

unsigned char pdata bufRxd[64];  //接收字節(jié)緩沖區(qū)




/***********************延時(shí)函數(shù)*******************************/
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
} 



/************************采用器初始化******************************/
void InitADC(void) 
{
	
	P1M1=0xff;					//1^012開(kāi)啟高阻態(tài)
	P1M0=0x00;					//其余端口當(dāng)普通端口使用
	P1ASF=0Xff;					//P^1 DC_V
	ADC_RES=0;
	ADC_CONTR=0X80;	   	//1000 0000	  開(kāi)電源,最低速
	delay(50);	
}
/**************************采樣函數(shù)******************************/
uint GetADC(uchar ch)
{
	uint result=0;
	ADC_CONTR=0x88|ch;	  		  			//選擇通道	開(kāi)始AD轉(zhuǎn)換e8 ADC最快,88,ADC最慢
	_nop_();  _nop_();  
	_nop_();  _nop_(); 
	while(!(ADC_CONTR&ADC_FLAG)); 			//查詢ADC_FLOG是否置位1  轉(zhuǎn)換結(jié)束
    ADC_CONTR&=!ADC_FLAG; 		  			//清除ADC中斷標(biāo)志
	result=ADC_RES;	 						//(ADC_RES<<2)+ADC_RESL		(<<2)+ADC_RESL;
	aa[ss++]=	ADC_RES;
	if(ss==6)ss=2;	
	return(result);
}

/**********************定時(shí)器0初始化****************************/
void timer0Init()
{
	EA = 1;	//打開(kāi)總中斷
	ET0 = 1;//打開(kāi)定時(shí)器0中斷
	TR0 = 1;	 //啟動(dòng)定時(shí)器0
	REN = 1;//允許串口接收
	TMOD |= 0X01; //定時(shí)器工作模式1,16位定時(shí)模式
	TH0 = 0xED;
	TL0 = 0xFF; //定時(shí)5ms
}	



/***********************串口初始化*********************************/
void UARTInit()
{
	EA = 1;	//打開(kāi)總中斷
	ES = 1; //打開(kāi)串口中斷
	SM0 = 0;	SM1 = 1;//串口工作方式1,8位UART波特率可變
	
}








void main()//main函數(shù)自身會(huì)循環(huán)
{
	InitADC();	  //采樣初始化
	timer0Init();//定時(shí)器0初始化
	UARTInit();//串口初始化
	bb=0;
	while(mode)
	{	 
	
		
		}	
    }
	while(mode==0)
	{
		EA=0;	 //關(guān)總中斷
		bb=0;
		while(sw_up==1&sw_down==1&sw_mune0==1&sw_mune1==1&sw_mune2==1)if(mode)break;
		
		if(sw_mune1==0)			aa[9]=4;
		if(sw_mune2==0)			aa[9]=5;
		while(sw_up==0|sw_down==0|sw_mune0==0|sw_mune1==0|sw_mune2==0)if(mode)break;
		if(mode)break;
		else
			EA=1;     //開(kāi)總中斷
		delay(300);
	}
} 





/****************************串口通信中斷*****************************/
void UART() interrupt 4
{	
	

   				 SBUF=0xff; 
	if(TI)//判斷是否發(fā)送完成
	{
		
		bb++;
	
		if(bb>=10&&aa[9]==0xff)	
		{	bb=0; 	 delay(1000);		   }
	}	
	if(RI==1)//判斷接收是否完成
	{
	  
	  	  int nu;
	 	nu =SBUF	;//讀SBUF,讀出串口接收到的數(shù)據(jù)
		   	   //第0號(hào)數(shù)據(jù)不是幀頭,跳過(guò)
		switch(nu)
			{
				case 1:{LED2=1;LED1=0;LED0=1;wmq=0;JDQ=0;}break;	 //過(guò)壓
				case 2:{LED2=1;LED1=0;LED0=1;wmq=0;JDQ=0;}break;	 //過(guò)流
				case 3:{LED2=0;LED1=1;LED0=1;wmq=1;JDQ=1;}break;	 //低速
				case 0:{LED2=1;LED1=1;LED0=0;wmq=1;JDQ=1;}break;	 //正常
			}
		RI = 0;//軟件清零接收標(biāo)志位
		cc++;														
		if(cc==1)cc=0;
	}
}
0
回復(fù)
薄浩楠
LV.5
18
2019-08-25 00:42
@薄浩楠
這是數(shù)據(jù)采樣的程序#include#include#include#defineuintunsignedint#defineucharunsignedchar#defineADC_FLAG0X10#defineVCC220ucharcodeSMGduan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};//數(shù)碼管位選碼ucharcodeSMGwei[]={0xfe,0xfd,0xfb};unsignedcharpdatabufRxd[64];//接收字節(jié)緩沖區(qū)/***********************延時(shí)函數(shù)*******************************/voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=114;y>0;y--);}/************************采用器初始化******************************/voidInitADC(void){P1M1=0xff;//1^012開(kāi)啟高阻態(tài)P1M0=0x00;//其余端口當(dāng)普通端口使用P1ASF=0Xff;//P^1DC_VADC_RES=0;ADC_CONTR=0X80;//10000000開(kāi)電源,最低速delay(50);}/**************************采樣函數(shù)******************************/uintGetADC(ucharch){uintresult=0;ADC_CONTR=0x88|ch;//選擇通道開(kāi)始AD轉(zhuǎn)換e8ADC最快,88,ADC最慢_nop_();_nop_();_nop_();_nop_();while(!(ADC_CONTR&ADC_FLAG));//查詢ADC_FLOG是否置位1轉(zhuǎn)換結(jié)束ADC_CONTR&=!ADC_FLAG;//清除ADC中斷標(biāo)志result=ADC_RES;//(ADC_RES
這是終端做顯示,控制功能的程序

#include 
#include "pic18.h" /* PIC18系列的頭文件 */


#define MAIN_Fosc		22118400L	//定義主時(shí)鐘
#define  e 	RC5			//LCD使能IO
#define  rs  	 RC3			//LCD寫數(shù)據(jù)或命令控制IO
#define  rw 	 RC4			//LCD讀寫控制IO
#define AT24C02_ADDR  0xa0	//AT24C02地址
#define PCF8591_ADDR  0x90	//PCF8591地址
#define VCC  500
unsigned char  CXPOS;               //列方向地址指針(用于CHARLCDPOS子程序)
unsigned char  CYPOS;               //行方向地址指針(用于CHARLCDPOS子程序) 
unsigned char receive232[10]={0xfc,0xfc,3,4,5,6,7,8}; /* 接收數(shù)據(jù)數(shù)組 */
unsigned char send232[10]={0xfc,0xfc,3,4,5,6,7,8}; /* 發(fā)送數(shù)據(jù)數(shù)組 */
unsigned char receive_count=0; /* 接收數(shù)據(jù)個(gè)數(shù)計(jì)數(shù) */
unsigned char send_count=1; /* 發(fā)送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù) */
unsigned char *pointer; /* 發(fā)送數(shù)據(jù)指針 */
unsigned char i; /* 程序中用到的循環(huán)變量 */
unsigned char SciReceiveFlag; /* =1,接收到8個(gè)數(shù)據(jù) */
unsigned char Send_Mode=1; /* 不為0,中斷方式發(fā)送;=0,非中斷方式發(fā)送 */

//#define key RC0
typedef unsigned char uchar;
typedef unsigned int uint;

//------變量定義

uchar nu[6]={34,06,52,44,66,66,} ;	
uchar  aa[11];               //數(shù)字量接收數(shù)組
uchar  aa1[11];              //數(shù)字量溢出標(biāo)志位
uchar  bc[9];uchar xc=0;	//={34,06,52,44,66,66,44,66,66,} 
uchar a=0;	 uchar bb=0;
char web[] = {"Ua"};
uchar U[] = {"****Voltage*****"};
uchar Uv[] = {"V"};
uchar Ua[] = {"Ua="};
uchar Ub[] = {"Ub="};
uchar Uc[] = {"Uc="};
int iu;
int result=0x38;
int Ucc=500;
int Scc=200;
int Icc=500;
int xz;
int pd;



void WriteDataLCD(unsigned char WDLCD)
{
        
        PORTB = WDLCD;
        RC3 = 1;
        RC4 = 0;
        RC5 = 0;                 //若晶振速度太高可以在這后加小的延時(shí)
        
        RC5 = 0;                 //延時(shí)
        RC3 = 1;
}*/
void sciinitial() /* 串行通訊初始化子程序 */
{
TXSTA=0x04; /* 選擇異步高速方式傳輸8位數(shù)據(jù) */
RCSTA=0x80; /* 允許串行口工作使能 */
TRISC=TRISC|0X80; /* :將RC7(RX)設(shè)置為輸入方式 */
TRISC=TRISC&0Xbf; /* RC6(TX)設(shè)置為輸出 */
SPBRG=143; /* 4M晶振且波特率為9600時(shí),SPBRG設(shè)置值為25 */
PIR1=0x00; /* 清中斷標(biāo)志 */
PIE1=PIE1|0x20; /* 允許串行通訊接口接收中斷使能 */
RCIP=0; /* 設(shè)置SCI接收中斷為低優(yōu)先級(jí)中斷 */
CREN=1; /* 允許串口連續(xù)接收數(shù)據(jù) */
if(0==Send_Mode) TXEN=1; /* Send_Mode=0,非中斷方式發(fā)送,串口發(fā)送數(shù)據(jù)使能 */
else /* Send_Mode=1,中斷方式發(fā)送 */
{
PIE1=PIE1|0x10; /* 允許中斷發(fā)送 */
TXIP=0; /* 發(fā)送低優(yōu)先級(jí)中斷 */
}
}
void interrupt low_priority LOW_ISR() /* 低優(yōu)先級(jí)中斷子程序 */
{
if(RCIF==1) /* RS232接收中斷 */
{
RCIF=0; /* 清中斷標(biāo)志 */
receive232[receive_count]=RCREG;
send232[receive_count]=RCREG; /* 接收數(shù)據(jù)存放到發(fā)送緩沖數(shù)組 */




receive_count++; /* 接收計(jì)數(shù)器加1 */

if(receive232[0]==0xfc&&receive232[1]==0xfc);//前兩位是否為0xfc
else {receive_count=0;return;}//不是則重新加載數(shù)據(jù)


if(receive_count==10) /* 如果已經(jīng)接收到8個(gè)數(shù)據(jù) */
{
receive_count=0; /* 接收計(jì)數(shù)器清0 */
SciReceiveFlag=1; /* 置接收到8個(gè)數(shù)據(jù)標(biāo)志 */
}
}
else if((0!=Send_Mode)&&(TXIF==1)) /* 中斷發(fā)送數(shù)據(jù)方式且為發(fā)送中斷 */
{
if(send_count==1) /* 已經(jīng)發(fā)送完8個(gè)數(shù) */
{
TXEN=0; /* 發(fā)送不使能 */
return;
}
else
{
TXREG=pd; /* 發(fā)送當(dāng)前應(yīng)發(fā)送數(shù)據(jù),發(fā)送指針加1 */
send_count++; /* 發(fā)送計(jì)數(shù)器加1 */
}
}
}
void init()
{
    
    TRISC3=0;TRISB=0x00; TRISA=0xFF;
   TRISC4=0; TRISC5=0;
    PORTB=0x00;//LATA=0xFF;
    RCSTA=0X90;
    
}
void UartInit(void)//初始化函數(shù)
{


INTCONbits.GIEL = 1; //使能外設(shè)中斷
}
 void lcdwc(unsigned char c)             //送控制字到液晶顯示控制器子程序
{
    lcdwaitidle();                       //HD44780液晶顯示控制器忙檢測(cè)
    RC3=0;                             //RS=0 RW=0 E=高電平
     RC4=0;
    PORTB=c;
    RC5=1;
    
   RC5=0;
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdwd(unsigned char d).
//功能:送數(shù)據(jù)到液晶顯示控制器.
//修改日期:2009.08.12
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwd(unsigned char d)             //送控制字到液晶顯示控制器子程序
{
    lcdwaitidle();                       //HD44780液晶顯示控制器忙檢測(cè)
     RC3=1;                             //RS=1 RW=0 E=高電平
    RC4=0;
    PORTB=d;
    RC5=1;
    
   RC5=0;
}
//-------------------------------------------------------------------------------
//子程序名稱:unsigned char lcdrd(void).
//功能:讀數(shù)據(jù)到液晶顯示控制器.

//-------------------------------------------------------------------------------
unsigned char lcdrd(void)               //讀數(shù)據(jù)子程序
{   unsigned char d;
    lcdwaitidle();                       //HD44780液晶顯示控制器忙檢測(cè)
    PORTB=0xff;
     RC3=1;                             //RS=1 RW=1 E=高電平
    RC4=1;
   RC5=1;
    
    d=PORTB;
  RC5=0;
    return d;
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdwaitidle(void).
//功能:忙檢測(cè).

//-------------------------------------------------------------------------------
void lcdwaitidle(void)                  //忙檢測(cè)子程序
{   unsigned char i;
    PORTB=0xff;
     RC3=0;                            //RS=0 RW=1 E=高電平
    RC4=1;
   RC5=1;
    for(i=0;i<20;i++)
        if((PORTB&0x80) == 0) break;       //D7=0 表示LCD控制器空閑,則退出檢測(cè)
   RC5=0;
}

void Delay_Ms(unsigned int ms)
{
     unsigned int i;
	 do{
	      i = MAIN_Fosc / 96000;
		
          while(--i)	;   //96T per loop
     }while(--ms);
}

void delay()
{
    int i;
    for (i=0;i<5000;i++);
}


void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
    X&=0X0f;                        //X位置范圍(0到15)
    Y&=0X03;                        //Y位置范圍(0到1)
    if(Y==0)                        //(第一行)X: 第0----15個(gè)字符
        lcdwc(X|0x80);              //    DDRAM:   0----0FH
    else if (Y==1)                  //(第二行)X: 第0----15個(gè)字符
        lcdwc(X|0xC0);              //    DDRAM:  40----4FH
    else if (Y==2)                  //(第三行)X: 第0----15個(gè)字符
        lcdwc(X|0x90);              //    DDRAM:  10----1FH
    else                                //(第四行)X: 第0----15個(gè)字符
        lcdwc(X|0xD0);       
    
   
        lcdwd(DData);
}

0
回復(fù)
薄浩楠
LV.5
19
2019-08-25 00:43
@薄浩楠
這是終端做顯示,控制功能的程序#include#include"pic18.h"/*PIC18系列的頭文件*/#defineMAIN_Fosc22118400L//定義主時(shí)鐘#defineeRC5//LCD使能IO#definersRC3//LCD寫數(shù)據(jù)或命令控制IO#definerwRC4//LCD讀寫控制IO#defineAT24C02_ADDR0xa0//AT24C02地址#definePCF8591_ADDR0x90//PCF8591地址#defineVCC500unsignedcharCXPOS;//列方向地址指針(用于CHARLCDPOS子程序)unsignedcharCYPOS;//行方向地址指針(用于CHARLCDPOS子程序)unsignedcharreceive232[10]={0xfc,0xfc,3,4,5,6,7,8};/*接收數(shù)據(jù)數(shù)組*/unsignedcharsend232[10]={0xfc,0xfc,3,4,5,6,7,8};/*發(fā)送數(shù)據(jù)數(shù)組*/unsignedcharreceive_count=0;/*接收數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)*/unsignedcharsend_count=1;/*發(fā)送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)*/unsignedchar*pointer;/*發(fā)送數(shù)據(jù)指針*/unsignedchari;/*程序中用到的循環(huán)變量*/unsignedcharSciReceiveFlag;/*=1,接收到8個(gè)數(shù)據(jù)*/unsignedcharSend_Mode=1;/*不為0,中斷方式發(fā)送;=0,非中斷方式發(fā)送*///#definekeyRC0typedefunsignedcharuchar;typedefunsignedintuint;//------變量定義ucharnu[6]={34,06,52,44,66,66,};ucharaa[11];//數(shù)字量接收數(shù)組ucharaa1[11];//數(shù)字量溢出標(biāo)志位ucharbc[9];ucharxc=0;//={34,06,52,44,66,66,44,66,66,}uchara=0;ucharbb=0;charweb[]={"Ua"};ucharU[]={"****Voltage*****"};ucharUv[]={"V"};ucharUa[]={"Ua="};ucharUb[]={"Ub="};ucharUc[]={"Uc="};intiu;intresult=0x38;intUcc=500;intScc=200;intIcc=500;intxz;intpd;voidWriteDataLCD(unsignedcharWDLCD){PORTB=WDLCD;RC3=1;RC4=0;RC5=0;//若晶振速度太高可以在這后加小的延時(shí)RC5=0;//延時(shí)RC3=1;}*/voidsciinitial()/*串行通訊初始化子程序*/{TXSTA=0x04;/*選擇異步高速方式傳輸8位數(shù)據(jù)*/RCSTA=0x80;/*允許串行口工作使能*/TRISC=TRISC|0X80;/*:將RC7(RX)設(shè)置為輸入方式*/TRISC=TRISC&0Xbf;/*RC6(TX)設(shè)置為輸出*/SPBRG=143;/*4M晶振且波特率為9600時(shí),SPBRG設(shè)置值為25*/PIR1=0x00;/*清中斷標(biāo)志*/PIE1=PIE1|0x20;/*允許串行通訊接口接收中斷使能*/RCIP=0;/*設(shè)置SCI接收中斷為低優(yōu)先級(jí)中斷*/CREN=1;/*允許串口連續(xù)接收數(shù)據(jù)*/if(0==Send_Mode)TXEN=1;/*Send_Mode=0,非中斷方式發(fā)送,串口發(fā)送數(shù)據(jù)使能*/else/*Send_Mode=1,中斷方式發(fā)送*/{PIE1=PIE1|0x10;/*允許中斷發(fā)送*/TXIP=0;/*發(fā)送低優(yōu)先級(jí)中斷*/}}voidinterruptlow_priorityLOW_ISR()/*低優(yōu)先級(jí)中斷子程序*/{if(RCIF==1)/*RS232接收中斷*/{RCIF=0;/*清中斷標(biāo)志*/receive232[receive_count]=RCREG;send232[receive_count]=RCREG;/*接收數(shù)據(jù)存放到發(fā)送緩沖數(shù)組*/receive_count++;/*接收計(jì)數(shù)器加1*/if(receive232[0]==0xfc&&receive232[1]==0xfc);//前兩位是否為0xfcelse{receive_count=0;return;}//不是則重新加載數(shù)據(jù)if(receive_count==10)/*如果已經(jīng)接收到8個(gè)數(shù)據(jù)*/{receive_count=0;/*接收計(jì)數(shù)器清0*/SciReceiveFlag=1;/*置接收到8個(gè)數(shù)據(jù)標(biāo)志*/}}elseif((0!=Send_Mode)&&(TXIF==1))/*中斷發(fā)送數(shù)據(jù)方式且為發(fā)送中斷*/{if(send_count==1)/*已經(jīng)發(fā)送完8個(gè)數(shù)*/{TXEN=0;/*發(fā)送不使能*/return;}else{TXREG=pd;/*發(fā)送當(dāng)前應(yīng)發(fā)送數(shù)據(jù),發(fā)送指針加1*/send_count++;/*發(fā)送計(jì)數(shù)器加1*/}}}voidinit(){TRISC3=0;TRISB=0x00;TRISA=0xFF;TRISC4=0;TRISC5=0;PORTB=0x00;//LATA=0xFF;RCSTA=0X90;}voidUartInit(void)//初始化函數(shù){INTCONbits.GIEL=1;//使能外設(shè)中斷}voidlcdwc(unsignedcharc)//送控制字到液晶顯示控制器子程序{lcdwaitidle();//HD44780液晶顯示控制器忙檢測(cè)RC3=0;//RS=0RW=0E=高電平RC4=0;PORTB=c;RC5=1;RC5=0;}//-------------------------------------------------------------------------------//子程序名稱:voidlcdwd(unsignedchard).//功能:送數(shù)據(jù)到液晶顯示控制器.//修改日期:2009.08.12//修改人:chujianjun@sunman.cn,tanchao@sunman.cn//-------------------------------------------------------------------------------voidlcdwd(unsignedchard)//送控制字到液晶顯示控制器子程序{lcdwaitidle();//HD44780液晶顯示控制器忙檢測(cè)RC3=1;//RS=1RW=0E=高電平RC4=0;PORTB=d;RC5=1;RC5=0;}//-------------------------------------------------------------------------------//子程序名稱:unsignedcharlcdrd(void).//功能:讀數(shù)據(jù)到液晶顯示控制器.//-------------------------------------------------------------------------------unsignedcharlcdrd(void)//讀數(shù)據(jù)子程序{unsignedchard;lcdwaitidle();//HD44780液晶顯示控制器忙檢測(cè)PORTB=0xff;RC3=1;//RS=1RW=1E=高電平RC4=1;RC5=1;d=PORTB;RC5=0;returnd;}//-------------------------------------------------------------------------------//子程序名稱:voidlcdwaitidle(void).//功能:忙檢測(cè).//-------------------------------------------------------------------------------voidlcdwaitidle(void)//忙檢測(cè)子程序{unsignedchari;PORTB=0xff;RC3=0;//RS=0RW=1E=高電平RC4=1;RC5=1;for(i=0;i
明天發(fā)一下此次畢業(yè)設(shè)計(jì)完成的狀態(tài),和感想吧
0
回復(fù)
2019-08-25 14:12
@薄浩楠
明天發(fā)一下此次畢業(yè)設(shè)計(jì)完成的狀態(tài),和感想吧
挺厲害的
0
回復(fù)
薄浩楠
LV.5
21
2019-08-25 15:01
@不可說(shuō)
挺厲害的
謝謝夸獎(jiǎng)
0
回復(fù)
薄浩楠
LV.5
22
2019-08-25 15:13
自我感覺(jué)我的畢業(yè)設(shè)計(jì)難度適中,主要難點(diǎn)是學(xué)習(xí)pic單片機(jī),尤其是他的配置位,設(shè)置錯(cuò)誤程序根本不運(yùn)行的。還有就是針對(duì)pic和stc一種哈佛結(jié)構(gòu)另一種馮諾依曼結(jié)構(gòu)的單片機(jī)進(jìn)行數(shù)據(jù)的互傳問(wèn)題,涉及到硬件軟件互相配合互相協(xié)調(diào),盡管還是有幾率會(huì)報(bào)錯(cuò),但是已經(jīng)做的把數(shù)據(jù)誤差降到最低了。
0
回復(fù)
薄浩楠
LV.5
23
2019-08-25 15:13
通過(guò)對(duì)pic單片機(jī)的學(xué)習(xí),你會(huì)真正體會(huì)到stc所比不上的優(yōu)勢(shì),pic型號(hào)各異各有各的功能,而且程序不容易被盜取,硬件功能豐富簡(jiǎn)化了許多不必要的麻煩。其次針對(duì)無(wú)刷電機(jī)的控制保護(hù)我也是頭一次做,采樣電路,顯示報(bào)警電路以及簡(jiǎn)易負(fù)載電路都是靠著自己的一些經(jīng)驗(yàn)做的,有不對(duì)的地方希望大佬們提出寶貴意見(jiàn),批評(píng)指正。
0
回復(fù)
薄浩楠
LV.5
24
2019-08-27 00:06
@薄浩楠
通過(guò)對(duì)pic單片機(jī)的學(xué)習(xí),你會(huì)真正體會(huì)到stc所比不上的優(yōu)勢(shì),pic型號(hào)各異各有各的功能,而且程序不容易被盜取,硬件功能豐富簡(jiǎn)化了許多不必要的麻煩。其次針對(duì)無(wú)刷電機(jī)的控制保護(hù)我也是頭一次做,采樣電路,顯示報(bào)警電路以及簡(jiǎn)易負(fù)載電路都是靠著自己的一些經(jīng)驗(yàn)做的,有不對(duì)的地方希望大佬們提出寶貴意見(jiàn),批評(píng)指正。

這是當(dāng)時(shí)測(cè)試系統(tǒng)采樣電路和電子負(fù)載

0
回復(fù)
薄浩楠
LV.5
25
2019-08-27 00:08
@薄浩楠
這是當(dāng)時(shí)測(cè)試系統(tǒng)采樣電路和電子負(fù)載[圖片]

當(dāng)時(shí)進(jìn)行雙機(jī)的串口通信時(shí)候利用開(kāi)發(fā)板做的測(cè)試試驗(yàn)

0
回復(fù)
薄浩楠
LV.5
26
2019-08-27 00:09
@薄浩楠
當(dāng)時(shí)進(jìn)行雙機(jī)的串口通信時(shí)候利用開(kāi)發(fā)板做的測(cè)試試驗(yàn)[圖片]

顯示電路寫照,當(dāng)時(shí)拍下做畢業(yè)答辯時(shí)候用的

0
回復(fù)
薄浩楠
LV.5
27
2019-08-27 00:12
@薄浩楠
顯示電路寫照,當(dāng)時(shí)拍下做畢業(yè)答辯時(shí)候用的[圖片]

系統(tǒng)聯(lián)合測(cè)試,利用串口助手可以看到很細(xì)微的數(shù)據(jù)變化

0
回復(fù)
薄浩楠
LV.5
28
2019-08-30 22:28
@薄浩楠
系統(tǒng)聯(lián)合測(cè)試,利用串口助手可以看到很細(xì)微的數(shù)據(jù)變化[圖片]

 仿真系統(tǒng)搭建

當(dāng)時(shí)搭建的顯示仿真

通過(guò)查閱大量資料,最終確定了以PIC18F2580單片機(jī)為核心的汽車發(fā)電機(jī)智能控制系統(tǒng)的實(shí)施方案。由于之前對(duì)PIC18F2580單片機(jī)了解接觸的較少,為研究其使用方法以及實(shí)現(xiàn)基礎(chǔ)顯示和數(shù)據(jù)傳輸。對(duì)終端控制器的顯示以及數(shù)據(jù)傳輸做了如下仿真。圖為PIC18F2580單片機(jī)顯示仿真圖,

圖為數(shù)據(jù)傳輸結(jié)果。

1
回復(fù)
薄浩楠
LV.5
29
2019-08-30 22:32
@薄浩楠
 仿真系統(tǒng)搭建當(dāng)時(shí)搭建的顯示仿真通過(guò)查閱大量資料,最終確定了以PIC18F2580單片機(jī)為核心的汽車發(fā)電機(jī)智能控制系統(tǒng)的實(shí)施方案。由于之前對(duì)PIC18F2580單片機(jī)了解接觸的較少,為研究其使用方法以及實(shí)現(xiàn)基礎(chǔ)顯示和數(shù)據(jù)傳輸。對(duì)終端控制器的顯示以及數(shù)據(jù)傳輸做了如下仿真。圖為PIC18F2580單片機(jī)顯示仿真圖,[圖片]圖為數(shù)據(jù)傳輸結(jié)果。[圖片]

系統(tǒng)調(diào)試下載工具‘

0
回復(fù)
薄浩楠
LV.5
30
2019-09-10 09:50
當(dāng)時(shí)做畢設(shè)時(shí),遇到最主要的問(wèn)題就是單片機(jī)的操作問(wèn)題。由于題目要求指定PIC型號(hào)單片機(jī)然后就從網(wǎng)上各個(gè)方面了解和學(xué)習(xí),通過(guò)不斷的嘗試終于調(diào)通。遇到最麻煩的就是他的配置位,沒(méi)有配置位程序即使燒錄進(jìn)去也不能用。之后就剩下另一個(gè)難點(diǎn)了,串口通信。串口簡(jiǎn)易通信較容易實(shí)現(xiàn)但是互發(fā)數(shù)組又的保證不出錯(cuò)誤就比較難。在此我利用串口助手的功能分別對(duì)倆個(gè)主控模塊進(jìn)行串口的數(shù)據(jù)調(diào)試,這樣出來(lái)的程序基本就是可用的。本次畢設(shè)最終基本完成,有點(diǎn)瑕疵地方就是在進(jìn)行通信時(shí)仍會(huì)出現(xiàn)小幾率的錯(cuò)誤使得執(zhí)行機(jī)構(gòu)誤動(dòng)作。主要是由于硬件部分仍會(huì)有一點(diǎn)不匹配造成的,軟件在串口助手上面已經(jīng)調(diào)試到完美了,,這點(diǎn)仍待解決
0
回復(fù)
發(fā)