當前位置: 華文頭條 > 推薦

STM32F103替換TMS320F28335的可行性分析

2024-03-12推薦

對於在高頻靜電除塵電源控制器中,用STM32F103VCT6處理器替代TI的DSP TMS320F28335核心板的可行性,我是這樣考慮的:

CPU計算能力

28335的CPU執行主頻為150MHz,一秒鐘可以執行150MHz的單時間周期指令,

有高效的硬體浮點數運算單元,64位元整數除以32位元整數運算耗時1條指令周期;

32位元整數乘以32位元整數運算耗時1條指令周期;

如果STM32F103處理器的主頻為72MHz,

32位元整數乘以32位元整數運算耗時2條指令周期;

64位元整數除以32位元整數運算最長耗時為8條指令周期,

32位元整數加、減運算耗時為1條指令周期;

因為之前設計程式碼時就考慮到浮點數運算比較耗時,沒有硬體浮點數運算單元時,單次的浮點數乘除法操作可能就耗時幾十us,

所以,特意把程式碼中需要用到的浮點數運算轉換為整數運算,乘以大於1的數,轉為*65535除以小於65535的數,乘以小於1的數,轉為乘以小於65535的數再除以65535;

從而把浮點數運算轉為32位元整數乘除法運算,

比如*0.35=22937/65535; *2.5=65535/26241等等;

資源對比

CPU負荷率

控制器程式碼中即時性要求高的任務主要包括:

周期為156.25us的14路ADC DMA完成中斷,在該中斷程式中,將ADC轉換數值加入到累加和中,如果ADC采樣累計次數達到了128次,即對應20ms,則對累加和除以次數,得到ADC的平均值,並在主迴圈中對平均值進行標定,得到測量值,與此同時,還根據單次采樣數值進行電場的閃絡判斷以及保護;

預計在累計次數達到128次,中斷程式需要執行大約1000條指令,耗時約1000/72MHz=13us;

RS485通訊的串口接收中斷以及發送,當前的程式是每接收或者發送一個字節就執行中斷程式,進行發送數據的準備以及接收數據緩存以及RS485的收發時間間隔的判斷,

兩個RS485通訊的串口中斷總執行了大約100條指令,耗時約1.25us,而如果采用19200bps的波特性,一個字節的時間間隔即串口中斷程式執行的周期為520us;

systick中斷,用於產生系統時基,在systick中斷時間間隔為500us,在中斷程式中主要是定時標誌位置位,以及MODBUS通訊字節間隔的判斷,用於完成接收以及啟動發送。

執行了大約300條指令,耗時約4us;

實測如下:

ADC中斷執行時間:22us;

systick中斷運時間:5us;

MODBUS串口中斷執行時間:2us;

因為,所有中斷都是同一優先級,在所有中斷同時發生的最壞情況下,總的中斷執行時間為29us;

最短任務的周期為156.25us;

CPU的負荷率為18%;

遠遠小於負荷率小於30%的要求;

對於即時性要求最高的電場閃絡檢測及其輸出關斷保護,最壞情況下可能會有29us的延時,並不會導致檢測以及關斷不及時;

采用STM32F103處理器設計的核心板

其它資源的考慮

一路UART用於連線CAT1模組,用於將裝置透過4G網路連線到雲伺服器,實作控制器的遠端狀態檢視、操作和固件升級;

兩路UART實作MODBUS從模式,其中一路MODBUS從模式用於連線工控屏,另一種用於數據遠傳;

DMA1的Channel1用於自動保存14路ADC的轉換數值;

DMA1的Channel5用於自動接收來自於CAT1模組的串口數據,Chanel4用於自動發送數據到CAT1模組;

定時器TIM1以及TIM2用於產生IGBT的驅動波形,使用TIM1的PWM通道1以及TIM2的PWM通道2輸出頻率、占空比以及死區時間均可以調節的IGBT驅動波形;

定時器TIM8的若幹個PWM通路用於輸出母線電壓、電流,二次電壓、電流,濾成直流驅動電壓、電流表顯示數值。

定時器TIM4用於觸發ADC啟動組采樣,溢位周期設定為156.25us,一個市電周期20ms可以采樣128個數據;

由於STM32F103處理器內建的FLASH在進行擦除操作時,CPU會被掛起,使得閃絡判斷,IGBT驅動波形輸出等的中斷,會導致嚴重的問題,因為使用外接的spi flash芯片用於儲存設定參數;

ADC初始化函式

ROM和RAM的使用情況如下:

Total RO Size (Code + RO Data) 35868 ( 35.03kB)

Total RW Size (RW Data + ZI Data) 19000 ( 18.55kB)

Total ROM Size (Code + RO Data + RW Data) 36156 ( 35.31kB)

用於4G遠端通訊的串口通訊程式碼使用了比較大的RAM空間,接收和發送的DMA緩存各自占用了4KByte的RAM空間;