基于arduino控制带编码器直流电机速度
基于arduino控制带编码器直流电机速度
模块:带减速的直流电机(减速比1:120),霍尔编码器(每圈13个信号单相)arduino UNO,TB6612FNG,3.7V电源
编码器连接在直流电机输入端,输出一圈单相有(13*120)个脉冲
#define AIN1 3 #define AIN2 4 #define PWMA 5 #define AA 2 int valA=0; float n; int flag=0; int pwm=70; unsigned long starttime,stoptime; void timer() { valA++; stoptime=millis(); if((stoptime-starttime)>100) { detachInterrupt(0); flag=1; } } void setup() { pinMode(AIN1,OUTPUT); pinMode(AIN2,OUTPUT); pinMode(PWMA,OUTPUT); pinMode(AA,INPUT); Serial.begin(9600); attachInterrupt(0,timer,RISING); starttime=millis(); Serial.println(starttime); } void loop() { digitalWrite(AIN1,HIGH); digitalWrite(AIN2,LOW); analogWrite(PWMA,pwm); if(flag==1) //if()前面加while(1)不行 { n=valA*100/156.000; //放大一百倍串口绘图 Serial.println(n,3); valA=0; flag=0; pwm=pwm+60-n; //speed 为60/100 r/s if(pwm>255) pwm=255; if(pwm<0) pwm=0; delay(0); starttime=millis(); attachInterrupt(0,timer,RISING); } }
电机控制为PID中的简单的P控制,可以调整参数从而改变调整速度和超调量 编写代码遇到的问题: 1.中断里面不能加 Serial.println()函数,否则速度快时会丢脉冲。 2.主函数里计算速度时,需停止中断,否则容易出错。