电机使用电位器进行速度调节

Dependencies:   mbed QEI

Committer:
YYL5213
Date:
Thu Mar 24 03:24:16 2022 +0000
Revision:
1:350bf501d1af
Parent:
0:ad5e5d970dd9
update note

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YYL5213 0:ad5e5d970dd9 1 #include "mbed.h"
YYL5213 0:ad5e5d970dd9 2 #include "QEI.h"
YYL5213 0:ad5e5d970dd9 3
YYL5213 0:ad5e5d970dd9 4 Serial pc(SERIAL_TX, SERIAL_RX);//电脑串口通讯
YYL5213 0:ad5e5d970dd9 5
YYL5213 0:ad5e5d970dd9 6 QEI EnA(PB_3,PA_4,NC,20);//编码器
YYL5213 0:ad5e5d970dd9 7 QEI EnB(PA_5,PA_6,NC,20);//编码器
YYL5213 0:ad5e5d970dd9 8 DigitalOut M1INA(PA_12);//方向1
YYL5213 0:ad5e5d970dd9 9 DigitalOut M1INB(PB_7);//方向2
YYL5213 0:ad5e5d970dd9 10 DigitalOut M2INA(PB_0);//方向1
YYL5213 0:ad5e5d970dd9 11 DigitalOut M2INB(PB_6);//方向2
YYL5213 0:ad5e5d970dd9 12 PwmOut M1PWM(PB_1);//pwm速度
YYL5213 0:ad5e5d970dd9 13 PwmOut M2PWM(PA_8);//pwm速度
YYL5213 0:ad5e5d970dd9 14 DigitalIn M1Iln(PA_11);//方向1
YYL5213 0:ad5e5d970dd9 15 DigitalIn M2Iln(PB_5);//方向2
YYL5213 0:ad5e5d970dd9 16 AnalogIn MI1(PA_0);//读电流
YYL5213 0:ad5e5d970dd9 17 AnalogIn MI2(PA_1);//读电流
YYL5213 0:ad5e5d970dd9 18 AnalogIn adj(PA_3);//读电流
YYL5213 0:ad5e5d970dd9 19
YYL5213 1:350bf501d1af 20 Ticker Velo; //固定频率读电机速度
YYL5213 0:ad5e5d970dd9 21 int VA=0,sttA=0,stpA=0,VB=0,sttB=0,stpB=0;
YYL5213 0:ad5e5d970dd9 22
YYL5213 1:350bf501d1af 23 float adj_point=0.0f; //电位计设定值
YYL5213 0:ad5e5d970dd9 24
YYL5213 1:350bf501d1af 25 void motor_run(int M,float pwr,int drc) //控制电机控制信号输出
YYL5213 0:ad5e5d970dd9 26 {
YYL5213 0:ad5e5d970dd9 27 if(M==1) {
YYL5213 0:ad5e5d970dd9 28 if(drc==0) {
YYL5213 0:ad5e5d970dd9 29 M1INA=1;
YYL5213 0:ad5e5d970dd9 30 M1INB=0;
YYL5213 0:ad5e5d970dd9 31 } else {
YYL5213 0:ad5e5d970dd9 32 M1INA=0;
YYL5213 0:ad5e5d970dd9 33 M1INB=1;
YYL5213 0:ad5e5d970dd9 34 }
YYL5213 0:ad5e5d970dd9 35 M1PWM.period_us(100);
YYL5213 0:ad5e5d970dd9 36 M1PWM.write(pwr);}
YYL5213 0:ad5e5d970dd9 37 else{
YYL5213 0:ad5e5d970dd9 38 if(drc==0) {
YYL5213 0:ad5e5d970dd9 39 M2INA=1;
YYL5213 0:ad5e5d970dd9 40 M2INB=0;
YYL5213 0:ad5e5d970dd9 41 } else {
YYL5213 0:ad5e5d970dd9 42 M2INA=0;
YYL5213 0:ad5e5d970dd9 43 M2INB=1;
YYL5213 0:ad5e5d970dd9 44 }
YYL5213 0:ad5e5d970dd9 45 M2PWM.period_us(100);
YYL5213 0:ad5e5d970dd9 46 M2PWM.write(pwr);
YYL5213 0:ad5e5d970dd9 47 }
YYL5213 0:ad5e5d970dd9 48
YYL5213 0:ad5e5d970dd9 49 }
YYL5213 1:350bf501d1af 50 void Read_Velocity(){ //读取编码器的值,计算电机速度并打印
YYL5213 0:ad5e5d970dd9 51 stpA=EnA.getPulses();
YYL5213 0:ad5e5d970dd9 52 stpB=EnB.getPulses();
YYL5213 0:ad5e5d970dd9 53 VA=stpA-sttA;
YYL5213 0:ad5e5d970dd9 54 VB=stpB-sttB;
YYL5213 0:ad5e5d970dd9 55 sttA= stpA;
YYL5213 0:ad5e5d970dd9 56 sttB= stpB;
YYL5213 0:ad5e5d970dd9 57 pc.printf("%d %d %.3f\n",VA,VB,adj_point);
YYL5213 0:ad5e5d970dd9 58 }
YYL5213 1:350bf501d1af 59 int main()
YYL5213 1:350bf501d1af 60 { Velo.attach(&Read_Velocity, 0.01);//开启tricker,10ms一次
YYL5213 0:ad5e5d970dd9 61 pc.baud(115200);
YYL5213 0:ad5e5d970dd9 62 pc.printf("PC connected!\n");
YYL5213 1:350bf501d1af 63 while(1){ //下面是进行的主流程
YYL5213 1:350bf501d1af 64 adj_point=adj.read();//读取电位器值
YYL5213 1:350bf501d1af 65 motor_run(1,adj_point,0);//设定出的pwm占空比
YYL5213 0:ad5e5d970dd9 66 motor_run(2,adj_point,0);
YYL5213 0:ad5e5d970dd9 67 wait_ms(50);
YYL5213 0:ad5e5d970dd9 68 }
YYL5213 0:ad5e5d970dd9 69 }
YYL5213 0:ad5e5d970dd9 70
YYL5213 0:ad5e5d970dd9 71
YYL5213 0:ad5e5d970dd9 72