|
這是根據(jù)輸入捕獲試驗(yàn)改的,可以實(shí)現(xiàn)方波測(cè)頻并且根據(jù)測(cè)量值輸出100倍頻的pwm波,按鍵可控制*1,*3,*5的關(guān)系。
項(xiàng)目用來(lái)做電賽的濾波芯片的時(shí)鐘信號(hào)的,測(cè)量基波頻率并用單片機(jī)輸出芯片的時(shí)鐘來(lái)測(cè)量基波,3次諧波和5次諧波的幅值。
源代碼注釋很詳細(xì),電賽2017年自適應(yīng)濾波器的發(fā)揮部分。
單片機(jī)源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "timer.h"
- #include "usart.h"
- #include "lcd.h"
- #include "adc.h"
- #include "key.h"
- extern u8 TIM2CH1_CAPTURE_STA;
- extern u16 TIM2CH1_CAPTURE_VAL
- int main(void)
- {
- static int t=1;
- u32 temp=0;
- u32 freq,cop,freq1,Ccr,psc1;
- float templ;
- u16 adcx,adcx1,adcdip,adccop=0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)
- delay_init();
- uart_init(9600);
- LCD_Init();
- Adc_Init();
- KEY_Init();
- TIM1_PWM_Init(65535,71);
- TIM2_Cap_Init(0xFFFF,72-1);
- POINT_COLOR=RED
- while(1)
- {
-
- if(TIM2CH1_CAPTURE_STA&0X80
- {
- temp=TIM2CH1_CAPTURE_STA&0X3F;
- temp*=65536;
- temp+=TIM2CH1_CAPTURE_VAL;
- freq=1000000/temp;
- TIM2CH1_CAPTURE_STA=0;
- }
-
- if((freq>=49)&&(freq<=200))
- {
- cop=freq;
- }
-
- if(KEY_Scan(1)==WKUP_PRES)
- {
- t=1;
- adcx=Get_Adc_Average(ADC_Channel_1,10);
- if(adccop<=adcx)
- {
- adccop=adcx;
- adcdip=adccop;
- }else
- adcdip=adccop;
- templ=(float)adcdip*(3.3/4096);
- adcx1=templ;
- templ-=adcx1;
- templ*=1000;
- delay_ms(250);
- }
- if(KEY_Scan(1)==KEY1_PRES)
- {
- t=3;
- adcx=Get_Adc_Average(ADC_Channel_1,10);
- if(adccop<=adcx)
- {
- adccop=adcx;
- adcdip=adccop;
- }else
- adcdip=adccop;
- templ=(float)adcdip*(3.3/4096);
- adcx1=templ;
- templ-=adcx1;
- templ*=1000;
- delay_ms(250);
- }
- if(KEY_Scan(1)==KEY0_PRES)
- {
- t=5;
- adcx=Get_Adc_Average(ADC_Channel_1,10);
- if(adccop<=adcx)
- {
- adccop=adcx;
- adcdip=adccop;
- }else
- adcdip=adccop;
- templ=(float)adcdip*(3.3/4096);
- adcx1=templ;
- templ-=adcx1;
- templ*=1000;
- delay_ms(250);
- }
- delay_ms(300);¨
- freq1=(10000/cop/t)-1;
- Ccr=(5000/cop/t)-1;
- TIM_SetAutoreload(TIM1,freq1)
- TIM_SetCompare1(TIM1,Ccr);
- delay_ms(200);
-
- printf("Frequency:%d HZ\r\n",cop);
- LCD_ShowString(60,60,200,16,16,"Frequency: HZ");
- LCD_ShowString(60,80,200,16,16,"Vrms:0.000 V");
- LCD_ShowString(60,100,200,16,16,"ARR: ");
- LCD_ShowxNum(140,100,freq1,4,16,0);
- LCD_ShowxNum(140,60,cop,4,16,0);
- LCD_ShowxNum(116,80,templ,3,16,0x80);
- LCD_ShowxNum(100,80,adcx1,1,16,0);
- delay_ms(500);
- LCD_Clear(WHITE);
-
- }
- }
復(fù)制代碼
全部程序51hei下載地址:
測(cè)方波頻率并輸出100倍頻.7z
(229.65 KB, 下載次數(shù): 45)
2019-7-28 18:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|