STM32 PWM输出控制步进电机-3000转每分钟串口显示+电位器调速

发布者:CelestialGarden最新更新时间:2019-10-15 来源: eefocus关键字:STM32  PWM输出  控制步进电机 手机看文章 扫描二维码
随时随地手机看文章

用电位器控制步进电机转速,可以控制正反转,在电位器中点停止;越往左翻转越快,越往右正转越快。速度均匀,包含滤波。付完整代码。全部测试正常。


单片机源程序:

#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);        




        

        }         

}


关键字:STM32  PWM输出  控制步进电机 引用地址:STM32 PWM输出控制步进电机-3000转每分钟串口显示+电位器调速

上一篇:stm32f103串口BootLoader
下一篇:STM32F103超极精简的OS

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved