如何無(wú)冒險更新PWM數值?
一、前言
本文引用地址:http://dyxdggzs.com/article/202501/466097.htm在剛才的實(shí)驗中,使用 GP8500,將STC32G單片機發(fā)送的PWM波形轉換成模擬信號。在這個(gè)過(guò)程中,會(huì )發(fā)現輸出有一些毛刺。信號中的毛刺主要是因為輸出PWM的波形出現了抖動(dòng)??梢钥吹?,在抖動(dòng)前面和后面的PWM占空比不同。由此可以知道,在這中間,單片機對PWM的比較單元進(jìn)行了數值更新。更新前后,GP8500輸出的電壓不同。那么問(wèn)題來(lái)了,如何能夠避免PWM中寄存器更新的過(guò)程中,出現輸出脈沖抖動(dòng)的情況呢?下面討論一下這個(gè)問(wèn)題的解決方案。
▲ 圖1.1.1 輸出信號中的毛刺
二、解決方案
在 STC32G數據手冊中,對于更新PWM模塊中 CCR寄存器有相應的說(shuō)明。需要對 CCMR寄存器中的 OCnPE位進(jìn)行設置。如果設置為0,則更新后的數值會(huì )立即生效。否則,只有當PWM模塊出現更新事件之后,CCR寄存器才會(huì )更新寫(xiě)入的數據??梢钥吹?,在程序中,之前對于比較寄存器預裝使能位沒(méi)有置1,疏忽了?,F在將它修改過(guò)來(lái),重新測試,就會(huì )發(fā)現,前面遇到的輸出毛刺信號就消失的無(wú)影無(wú)蹤了。
▲ 圖1.2.1 修改之后,輸出波形就沒(méi)有毛刺了
※ 總??結 ※
本文記錄了 STC32G單片機中 PWM 比較寄存器更新的問(wèn)題。如果使能比較寄存器預存功能,可以避免輸出PWM波形出現抖動(dòng)現象。這就會(huì )讓 GP8500 這顆PCA芯片的輸出信號中不會(huì )出現毛刺。那么問(wèn)題來(lái)了,既然PWM 比較寄存器的預存功能如此重要,為何還會(huì )存在一種設置,來(lái)取消這種預存功能呢? 這種預存功能取消之后,會(huì )適合應用在什么情況下呢?
參考資料
[1]利用PWM輸出模擬電壓:STC32G 驅動(dòng) GP8500: https://zhuoqing.blog.csdn.net/article/details/144979365
評論