這是一個用編碼器控制頻率的正弦波發生器,頻率范圍0-2khz。最重要的是波形是連續的,比使用專業的波形發生器模塊要好用。波形也可以自己通過改變數組來改變波形。里面一些程序也是集成采用了網友的。
Screenshot_20180711-164545.png (3.34 MB, 下載次數: 56)
下載附件
波形照片
2018-7-11 16:47 上傳
單片機源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
- #include "adc.h"
- #include "exti.h"
- #include "encode.h"
- #include "DAC.h"
- #include "DMA.h"
- #include "TIM.h"
-
- int main(void)
- { u16 adcx;
- float temp;
- int a=359,b;
-
- u16 count;//編碼器計數
- delay_init(); //延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- uart_init(115200); //串口初始化為115200
- // Adc_Init();
- LED_Init(); //LED端口初始化
-
- TIM4_Init();//定時器編碼器接口初始化
- a=9999-a;
- TIM3_PWM_Init(a,7199); //不分頻。PWM頻率=72000000/900=80Khz 88
-
- GPIO_Config();
- DMA_Config();
- DAC_Config();
- TIM_Config();
- while(1)
- {
- b= TIM4->CNT/4;
- if( b<282)b=282;
- b=28235/b;
- // printf("編碼器值 = %d\t\n",b);
- TIM3->PSC=b;
- TIM6->ARR=b;
- //// if (a<50) a=50;
- //// a=50000/a;
- // if (a<40)a=40;
- // else if(a>900)a=900;
- //
- // b=65535/a;
- //
- // TIM3->ARR=b;
- //
- // TIM3->CCR2=b/32;
- // printf("b = %d\n",b);
- //// printf("ARR = %d\n",b);
- //// TIM3_PWM_Init(a,7199);
-
-
-
- if((TIM4->CR1 & TIM_CounterMode_Down) != TIM_CounterMode_Down)//判斷編碼器正反轉
- {
- LED2=0;}
- else LED2=1;
-
- }
- }
復制代碼
所有資料51hei提供下載:
編碼器+正玄波-實驗 成功 -調共振環10-1000hz.rar
(317.64 KB, 下載次數: 84)
2018-7-11 17:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|