|
以STM32Z8T6戰(zhàn)艦版為主控板,通過時(shí)鐘的輸入捕獲功能來測算輸入PWM的高低電平脈寬以及占空比,并通過串口將有關(guān)PWM的數(shù)據(jù)發(fā)送至電腦
PC6口為PWM輸入端口,串口一為串口通訊位。
單片機(jī)源程序如下:
- #include "led.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
-
- //PC6
- extern u8 TIM5CH1_CAPTURE_STA; //輸入捕獲狀態(tài)
- extern u16 TIM5CH1_CAPTURE_VAL; //輸入捕獲值
- extern u8 TIM3CH1_CAPTURE_STA; //輸入捕獲狀態(tài)
- extern u16 TIM3CH1_CAPTURE_VAL; //輸入捕獲值
- int main(void)
- {
- u32 HIGH,LOW,high,low;
- //delay_init(); //延時(shí)函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- uart_init(115200); //串口初始化為115200
- LED_Init(); //LED端口初始化
-
- TIM3_Cap_Init(0XFFFF,71); //不分頻。PWM頻率=72M/360000=200Hz 2000Hz 500us 166 333 50us 16 33 5000Hz 200 66 133
- //72000000/1440=50000Hz 72000000/36000/40=50Hz 20ms
- TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計(jì)數(shù) 72/(71+1) 1us 5000us 1666 3333
- /* 分頻數(shù) arr psc frequency period(us)
- 71 9 100000 10
- 144 9 50000 20
- 14400 9 500 2000
- */
- while(1)//驗(yàn)證基本正確
- {
- TIM_SetCompare2(TIM3,2700); //72000000/144 500000 2us 10 10
- if(TIM3CH1_CAPTURE_STA&0X80) //成功捕獲到了一次電平寬度
- {
- if(TIM3CH1_CAPTURE_STA&0X40) //得到的是高電平
- {
- high=TIM3CH1_CAPTURE_STA&0X1F;
- high*=65536; //溢出時(shí)間總和
- high+=TIM3CH1_CAPTURE_VAL; //得到總的高電平時(shí)間
- TIM3CH1_CAPTURE_STA=0X20; //開啟下一次捕獲,標(biāo)記已捕獲到下降沿
- }
- else
- {
- if(TIM3CH1_CAPTURE_STA&0X20) //得到的是低電平
- {
- low=TIM3CH1_CAPTURE_STA&0X1F;
- low*=65536; //溢出時(shí)間總和
- low+=TIM3CH1_CAPTURE_VAL; //得到總的低電平時(shí)間
- printf("TIM3:HIGH:%d us\r\n",high); //打印總的高點(diǎn)平時(shí)間
- printf("TIM3:LOW :%d us\r\n",low); //打印總的低點(diǎn)平時(shí)間
- printf("TIM3:PWM :%d\r\n",(int)(high*100/(high+low))); //不能放在下面那個(gè)語句的下面
- TIM3CH1_CAPTURE_STA=0; //開啟下一次捕獲,不連續(xù)捕獲
- }
- } //目前最高可測頻率 100,000 Hz 10us 5 5
- }
- if(TIM5CH1_CAPTURE_STA&0X80) //成功捕獲到了一次電平寬度
- {
- if(TIM5CH1_CAPTURE_STA&0X40) //得到的是高電平
- {
- HIGH=TIM5CH1_CAPTURE_STA&0X1F;
- HIGH*=65536; //溢出時(shí)間總和
- HIGH+=TIM5CH1_CAPTURE_VAL; //得到總的高電平時(shí)間
- TIM5CH1_CAPTURE_STA=0X20; //開啟下一次捕獲,標(biāo)記已捕獲到下降沿
- }
- else
- {
- if(TIM5CH1_CAPTURE_STA&0X20) //得到的是低電平
- {
- LOW=TIM5CH1_CAPTURE_STA&0X1F;
- LOW*=65536; //溢出時(shí)間總和
- LOW+=TIM5CH1_CAPTURE_VAL; //得到總的低電平時(shí)間
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
cal PWM.rar
(284 KB, 下載次數(shù): 9)
2017-11-4 22:31 上傳
點(diǎn)擊文件名下載附件
PWM波測試程序 下載積分: 黑幣 -5
|
|