2023年11月30日 星期四

STM32於IAR 9.3以後的版本將uart導向至printf

首先,請先參考如以下IAR提供的"在IAR Embedded Workbench中实现打印输出技術資料"

https://www.iar.com/cn/knowledge/support/technical-notes/general/implementing-printf-output/

本文要說明的是重新定向到MCU的周邊(UART)



STM32在IAR9.2以前的版本printf時,在main.c的主程式之前通常會加入如以下的程式

#ifdef __GNUC__

/* With GCC, small printf (option LD Linker->Libraries->Small printf

   set to 'Yes') calls __io_putchar() */

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif /* __GNUC__ */


並執行以下宣告如於主程式之後

/**

  * @brief  Retargets the C library printf function to the USART.

  * @param  None

  * @retval None

  */

PUTCHAR_PROTOTYPE

{

  /* Place your implementation of fputc here */

  /* e.g. write a character to the USART2 and Loop until the end of transmission */

  HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;

}

但是在IAR9.32以後,已經不支援此方式了,因此在這邊大致上來記錄一下我查到的資訊與方法跟同樣遇到問題的人分享,

1.先到IAR安裝後的資料夾找出write.c,下圖是write.c原始的內容


2.COPY write.c到自行設定的專案資料夾內

3.在您的IAR專案內加入write.c

4.修改write.c以下內容,把main.h這個head file include進來,然後把您的UART底層驅動的函式放在MyLowLevelPutChar內,大致上就可以了,記住您的main.h裡面必須include stdio.h進來,才會有printf相關的函式,由於我用的底層選擇為STM32K的LL,您也可以換成STM32 HAL或是Standard Peripheral Libraries的底層函式








2023年11月20日 星期一

如何透過示波器存下來的波形檔案進行類比電路模擬

在設計電路的時候,常常會遇到雜訊問題,於是我們就會在電路板上進行跳線修改,增加元件增加電容之類的工作,但如果是要增加一個n階的濾波器,有可能因為手工難以修改或增加,而且也無法確定增加的電路是否能正常工作,因此我會藉由電路模擬軟體來協助分析,但是特定的雜訊可能無法在模擬軟體中生成,怎麼辦??

我們可以透過在示波器錄下來波形的圖檔,轉存成.csv/.xls/.txt/.dat或是ASCII files, 然後存在電腦另存.txt file, 其實裡面的內容不外乎是time(second)與amplitude(volt),也就是時域裡的時間跟振福!

有了這個波形檔案我們就可以透過模擬軟體來實現雜訊濾波器電路的模擬了,首先將示波器存好的檔案轉到電腦中存成.txt,去除檔案中的文字,例如time(second)與amplitude(volt)之類的相關文字,只留示波器X/Y兩軸所錄下來的數字,該數字可能有科學符號,例如E-02,代表是10^-2次方,這必須保留以免,數值不正確!

我所使用的模擬軟體是Microchip授權給使用者免費使用的MINDI, 屬於Simetrix/Simplis這類的模擬軟體,首先需要設計濾波器,這部分有兩種方法,一是照濾波器公式計算,二是用類比濾波器軟體幫你設計,建議可以使用Analog Filter Wizard網頁版,假設預計設計的是High Pass Filter,就選擇如下圖對應的Filter type


然後進入Specification之後選擇填入Passband與Stopband,並選擇Filter Response, Filter Response與電路複雜度跟濾波器效果有很大的關係,當然成本也會有所增加



接下來進入Components選擇電壓,就會跳出濾波器電路+參考電壓的電路,然後把電路記下來繪製到慣用的模擬軟體,可以是CADENCE ORCAD PSPICE / SIMETRIX / ADI LTSPICE / MICROCHIP MINDI / TI TINA等等之類的軟體,我用的是MICROCHIP MINDI, 因為免費且容易使用,但有元件數量的限制,使用者自行斟酌!



以下是我的波形.txt檔, 用來放進去MINDI模擬軟體的PWLFILE



設定好模擬的選項(暫態Transient),我的雜訊加訊號是100ms這麼長,因此時間設100ms,就可以開始模擬了!
如下圖可以看到紅色波形是示波器從實際的電路板電路中錄下來的波形加雜訊,經過濾波之後是綠色的波形,雖然訊號變小了,但很明顯的SNR變得好很多,若再經過下一級放大就可以得到足夠大的訊號了!
整個電路方塊大約是這樣:
Input --> HPF --> Amplifier output







二維陣列指標的表示方法