这是一个用编码器控制频率的正弦波发生器,频率范围0-2khz。最重要的是波形是连续的,比使用专业的波形发生器模块要好用。波形也可以自己通过改变数组来改变波形。里面一些程序也是集成采用了网友的。
单片机源程序如下:
- #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)
|