電源控制板軟件設計

電源控制板軟件設計

1 功能需求分析

電源控制板主要功能是控制電路輸出多路28V電源,在控制的同時能夠實時監測個電源輸出的電流大小,在電流過大時能夠及時切斷,並且反饋給主機。核心控制器是STM32F429單片機,該模塊與主機之間的通信採用RS422串口。根據電路分析可以知道其需要配置功能有:3路離散量輸出、5路電源控制輸出、1路RS422通信串口、1路RS232調試串口、5路電流傳感器實時監測採集、一路LED燈。

3路離散量輸出通過STM32的3個IO口驅動相應電路中光耦的通斷;

5路電源控制輸出通過STM32的5個IO口驅動相應電路中光耦的通斷;

1路LED燈通過STM32的1個IO口驅動;

1路RS422通道通過STM32的USART1實現;

5路電流傳感器使用STM32的5路SPI與電流傳感器進行數據採集;

整體框架如圖1.1所示。

圖1.1 電源控制板構成

2 管腳分配

1,IO口輸出引腳分配:

管腳功能

通道號

管腳號

高低電平含義

IO口驅動使能引腳

驅動使能引腳

PG0

低電平使能

離散量輸出

28V_0

PF11

低電平輸出/高電平斷開

28V_1

PF12

28V_2

PF13

電源控制輸出

Contrl_28V_1

PG1

低電平輸出/高電平斷開

Contrl_28V_2

PG2

Contrl_28V_3

PG3

Contrl_28V_4

PG4

Contrl_28V_5

PG5

LED燈控制引腳

LED_OUT

PI5

低電平亮/高電平滅

2,串口IO引腳分配

管腳功能

通道號

管腳號

高低電平含義

RS422串口

串口的RX0

PA10

 

串口的TX0

PA9

 

RS232串口

串口的RX0

PA3

 

串口的TX0

PA2

 

3,SPI的IO引腳分配:

管腳功能

通道號

管腳號

高低電平含義

第一路SPI

Spi1_sclk

PA5

Spi複用

Spi1_miso

PA6

 

Spi1_mosi

PA7

 

Spi1_nss

PA4

 

第二路SPI

Spi2_sclk

PI1

Spi複用

Spi2_miso

PI2

 

Spi2_mosi

PI3

 

Spi2_nss

PI0

 

第三路SPI

Spi6_sclk

PG13

Spi複用

Spi6_miso

PG12

 

Spi6_mosi

PG14

 

Spi6_nss

PG8

 

第四路SPI

Spi4_sclk

PE2

Spi複用

Spi4_miso

PE5

 

Spi4_mosi

PE6

 

Spi4_nss

PE4

 

第五路SPI

Spi5_sclk

PH6

Spi複用

Spi5_miso

PH7

 

Spi5_mosi

PF9

 

Spi5_nss

PH5

 

3 設計流程

流程中需要設計的模塊主要是三個部分:IO口驅動模塊,串口驅動模塊,SPI驅動模塊。離散量的輸出、電源控制輸出、LED燈都是由IO口驅動完成;與主機的通信接口由串口USART1完成;5路電流傳感器的數值通過5路SPI完成採集。

3.1 IO口驅動

3路離散量輸出和5路電源控制輸出由STM32的IO口連接驅動芯片74LVC244APW,然後去驅動開關電路,使得後端電路完成對應的輸出或斷開工作。LED燈直接由STM32的IO口輸出驅動。

GPIO操作流程:

  1. 使能PG與PF以及PI這三組GPIO口的時鐘;
  2. 初始化相關IO爲輸出(PG0- PG5;PF11- PF13;PI5);
  3. 將PG0設置爲低電平,使能驅動芯片74LVC244APW工作;
  4. 根據接收到的命令操作相關IO口去驅動電源輸出或者離散量輸出,若是接收到輸出第一路電源命令則將PG1設置爲低電平;

操作流程圖如圖3.1所示。

圖3.1 IO操作流程

3.2 串口驅動

1路RS422串口用來與主機通信,主機通過這1路串口發送離散量輸出指令、電源控制輸出指令以及獲取電流傳感器數據指令。若是收到離散量輸出指令,那麼STM32解析到相關指令會調用IO驅動函數輸出對應通道的離散量;若是收到電源控制指令,那麼STM32解析到相關指令會調用IO驅動函數輸出對應通道的電源輸出;若是收到主機獲取電流傳感器數據指令,那麼STM32解析到相關指令後會調用SPI驅動函數採集對應通道的電流傳感器的數據,然後通過RS422串口將此數據回傳給主機。

RS422驅動配置流程:

  1. 使能RS422串口的時鐘,使能RS422的GPIO口的時鐘;
  2. 初始化RS422串口的GPIO口爲串口功能IO口;
  3. 配置USART1的串口中斷組優先級;
  4. 配置USART1的串口波特率、配置全雙工模式、配置校驗位、配置停止位、配置數據位等屬性;
  5. 使能USART1的接收中斷;
  6. 使能USART1的串口功能;
  7. 在串口接收中斷中將數據緩存到隊列FIFO中;

RS422串口驅動配置流程圖如圖3.2所示。

圖3.2 RS422驅動配置流程

422與主機之間的通信協議有三個,一個是離散量輸出指令;一個是電源控制輸出指令;還有一個是電流傳感器回傳指令。

  1. 離散量輸出指令協議如表3.1所示:

字節號

類型

內容

備註

0、1

幀頭

6E6E

 

2

字節數

0x10

整幀字節數

3

交互類型

0x22

 

4

通道1

unsigned char

0x01表示高,0x00表示低

5

通道2

6

通道3

unsigned char

 

7

備份

8

備份

unsigned char

 

9

備份

10

備份

unsigned char

 

11

備份

12

備份

unsigned char

 

13

備份

14

備份

unsigned char

 

15

校驗和

 

對校驗和前所有字節求和,取低8位

2,電源控制輸出指令協議如表3.2所示:

字節號

類型

內容

備註

0、1

幀頭

6E6E

 

2

字節數

0x10

整幀字節數

3

交互類型

0x33

 

4

通道1

unsigned char

0x01表示高,0x00表示低

5

通道2

6

通道3

unsigned char

 

7

通道4

8

通道5

unsigned char

 

9

備份

10

備份

unsigned char

 

11

備份

12

備份

unsigned char

 

13

備份

14

備份

unsigned char

 

15

校驗和

 

對校驗和前所有字節求和,取低8位

3,回傳電流傳感器指令協議如表3.3所示:

字節號

類型

內容

備註

0、1

幀頭

6E6E

 

2

字節數

0x10

整幀字節數

3

交互類型

0x44/0x45

0x44表示下發指令(數據爲0)0x45表示返回數據

4

狀態位

unsigned char

0x01表示已切斷電源,0x00表示正常

5

數據1(L)

unsigned char

 

6

數據1(H)

7

數據2(L)

unsigned char

 

8

數據2(H)

9

數據3(L)

unsigned char

 

10

數據3(H)

11

數據4(L)

unsigned char

 

12

數據4(H)

13

數據5(L)

unsigned char

 

14

數據5(H)

15

校驗和

 

對校驗和前所有字節求和,取低8位

由於STM32的串口沒有FIFO,沒一次中斷只能接收一個字節數據,因而需要人爲去創建一個FIFO去緩存接收到的數據,在本次設計中採用隊列的形式作爲串口的接收FIFO,若有中斷產生,則將數據寄存器中的數據入隊,在主流程中每隔5ms去讀空一次隊列,完成數據的接收。在串口接收到這些指令的時候需要做數據解包操作。解包流程如下:

  1. 建立一個大緩存,大小能容納10幀數據以上,用該緩存去接收串口數據,用於做前一幀數據與後一幀數據的拼接;
  2. 尋找同步頭,若是找到了同步頭則剔除掉同步頭前面的無效數據;若是沒有找到同步頭則保留當前數據在緩存中;
  3. 找到同步頭後判斷大緩存中數據數量是否超過一幀數據的數據量,若是超過了一幀數據的數據量,則進行校驗和的計算;若是沒有超過一幀數據的數據量,則保留當前數據在緩存中;
  4. 若校驗和正確,則找到一幀有效數據,根據協議執行上位機發送的對應指令;若校驗和錯誤,則沒有找到有效的數據,則刪除找到的同步頭;
  5. 進行數據解析,若交互類型爲0x22則執行離散量的輸出;若交互類型爲0x33則執行電源輸出;若交互類型爲0x44則回傳電流傳感器的數據給主機;
  6. 處理完一幀數據後,將該幀數據從大緩存中刪除,進行下一次數據的解析,解析到數據小於一幀數據的大小;
  7. 輪詢進行3、4、5、6的操作,將當前所有的有效數據都解析出來,並進行相應的指令的執行;

數據解析流程圖如圖3.3所示。

圖3.3 數據解析流程圖

3.3 SPI驅動

5路SPI通信用來採集電流傳感器的值,通過STM32內部的SPI接口去讀取電流傳感器TLI4970-D025T4的數值。

TLI4970-D025T4特性如下:

  1. TLI4970-D025T4電流傳感器的測量範圍是-25A—25A;
  2. 輸出的數據是16bit數據(其中低13bit是電流數據);
  3. 計算電流的公式  ;
  4. TLI4970-D025T4與主控制器連接爲一個3-pin的SPI接口(sclk、cs、miso);
  5. 數據幀主要有兩種,當最高位爲0時,表示傳輸的是當前測量的電流數據;當最高位爲1時,表示傳輸的是當前電流傳感器的狀態值(一般發生錯誤的時候會傳輸狀態數據);數據幀格式如圖3.4與3.5所示。

圖3.4 電流數據幀格式

圖3.5 電流傳感器狀態值幀格式

  1. 其最高支持的SPI時鐘頻率爲5MHz,其時序如圖3.6所示,其時鐘在空閒時爲低電平,數據採樣發生在時鐘的第二個邊沿;

圖3.6 電流傳感器SPI時序圖

由STM32的SPI1、SPI2、SPI6、SPI4、SPI5這五路SPI控制器做主設備去去讀取電流傳感器的數據,SPI驅動的配置流程如下:

  1. 使能SPI的時鐘並且使能SPI的GPIO口的時鐘;
  2. 初始化SPI對應IO爲SPI功能IO口;
  3. 將5路SPI的片選線全部拉高,保證初始化後沒有片選;
  4. 初始化配置SPI的屬性,時鐘頻率:90/64=1.4MHz;工作模式:時鐘空閒時爲低電平,在時鐘的第二個邊沿採樣數據;數據傳輸模式:16bit,高位在前低位在後;傳輸方向:全雙工模式的主設備模式;
  5. 使能5路SPI外設功能;每隔5ms更新一次數據buffer和狀態buffer;
  6. 每隔5ms去判斷一次電流傳感器數據buffer中的數值是否大於最大的閾值數(15A),如果大於閾值,那麼通過電源控制切斷對應的那一路電源,並且更新回傳電流傳感器協議中的狀態位信息;如果小於閾值,那麼保留狀態位信息。

SPI驅動配置流程如圖3.7所示。

圖3.7 SPI驅動配置流程

3.4 定時器驅動

板子運行需要有時間基準,解析接收串口指令需要進行週期性操作,需要時間基準,更新電流傳感器的數據需要時間基準,本系統解析串口指令的週期定爲20ms一次;更新電流傳感器的數據的週期定爲5ms一次;判斷電流傳感器數值是否大於閾值的操作週期定爲5ms一次。保證整個流程能夠週期性的運行。定時器驅動配置流程如下:

  1. 配置定時器驅動組優先級;
  2. 使能定時器驅動的時鐘;
  3. 配置定時器分頻係數:定時器時鐘源clk = 2 * pclk1 TIMCLK = 180M / 2 = 90M 定時器頻率 = TIMCLK / (TIM_Prescaler + 1) 1M = 90 / (90 - 1);
  4. 配置定時週期數;
  5. 使能定時器中斷和定時器外設;
  6. 定時器中斷中設置定時標識,每次觸發中斷將定時標識置1;

定時器驅動配置流程如圖3.8所示:

      

圖3.8 定時器驅動配置流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章