YY L
/
motor_driver_test_1
电机使用电位器进行速度调节
main.cpp@1:350bf501d1af, 2022-03-24 (annotated)
- 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?
User | Revision | Line number | New 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 |