用电位器控制步进电机转速,可以控制正反转,在电位器中点停止;越往左翻转越快,越往右正转越快。速度均匀,包含滤波。付完整代码。全部测试正常。
单片机源程序:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "adc.h"
int main(void)
{ u16 adcx;
float temp;
int a=3999;
//int b=0
u16 led0pwmval=200;
u8 dir=1;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
TIM3_PWM_Init(a,71); //不分频。PWM频率=72000000/900=80Khz
Adc_Init();
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
// adcx=2100;
delay_ms(8);
// temp=(float)adcx*(3.3/4096);
// adcx=temp;
printf("adcx=%d;", adcx);
a=adcx;
a=a-2000;
//a=a*1000;
//if (-1000>a>1000) a=1;
//
//a=a*1000;
a=100000/a;
if(a > 0)
{
LED1=1;
//sl = speed_l;
}
else
{
LED1=0;
a = a * (-1);
}
//a=1000000/a;
// if (a<1000) a=1000;
// if (a>100000) a=100000;
// a=1000/a;
//if (a<0) LED1=0;
//if (a>0) LED1=1;
TIM3_PWM_Init(a,71); //不分频。PWM频率=72000000/900=80Khz 最高=72000000/A*6=600000,,转速=6000000/800*60=4500
//printf("arn");
//printf("count = %dn",count);
printf("a=%dn;", a);
delay_ms(8);
// if(dir)led0pwmval++;
// else led0pwmval--;
// if(led0pwmval>300)dir=0;
// if(led0pwmval==0)dir=1;
//TIM_SetCompare2(TIM3,led0pwmval);
}
}
上一篇:stm32f103串口BootLoader
下一篇:STM32F103超极精简的OS
- 热门资源推荐
- 热门放大器推荐