ドローン用計測制御基板の作り方 vol.1 ハードウェア編 p.30掲載 マルチプレクサによるサーボモータへの信号切り替え

Dependencies:   mbed

Committer:
Joeatsumi
Date:
Mon Dec 30 09:17:48 2019 +0000
Revision:
0:00eb873ca4c4
20191230

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Joeatsumi 0:00eb873ca4c4 1 //==================================================
Joeatsumi 0:00eb873ca4c4 2 //Manual and Auto
Joeatsumi 0:00eb873ca4c4 3 //
Joeatsumi 0:00eb873ca4c4 4 //MPU board: mbed LPC1768
Joeatsumi 0:00eb873ca4c4 5 //Multiplexer TC74HC157AP
Joeatsumi 0:00eb873ca4c4 6 //2019/10/13 A.Toda
Joeatsumi 0:00eb873ca4c4 7 //==================================================
Joeatsumi 0:00eb873ca4c4 8 #include "mbed.h"
Joeatsumi 0:00eb873ca4c4 9
Joeatsumi 0:00eb873ca4c4 10 //==================================================
Joeatsumi 0:00eb873ca4c4 11 #define THRESHOLD_PWM 0.0015
Joeatsumi 0:00eb873ca4c4 12 #define SERVO_PERIOD 0.020
Joeatsumi 0:00eb873ca4c4 13 //==================================================
Joeatsumi 0:00eb873ca4c4 14
Joeatsumi 0:00eb873ca4c4 15 //Port Setting
Joeatsumi 0:00eb873ca4c4 16 InterruptIn reading_port(p18);
Joeatsumi 0:00eb873ca4c4 17 DigitalOut mux_switch(p19);
Joeatsumi 0:00eb873ca4c4 18 PwmOut ELE(p21);
Joeatsumi 0:00eb873ca4c4 19 Serial pc(USBTX, USBRX); //UART
Joeatsumi 0:00eb873ca4c4 20
Joeatsumi 0:00eb873ca4c4 21 //==================================================
Joeatsumi 0:00eb873ca4c4 22 //Timer valiables
Joeatsumi 0:00eb873ca4c4 23 //==================================================
Joeatsumi 0:00eb873ca4c4 24 Timer ch_time;//timer for calculate pulse width
Joeatsumi 0:00eb873ca4c4 25
Joeatsumi 0:00eb873ca4c4 26 double measured_pre_pulse=0.0;
Joeatsumi 0:00eb873ca4c4 27 double measured_pulse=0.0;
Joeatsumi 0:00eb873ca4c4 28
Joeatsumi 0:00eb873ca4c4 29 double pulse_width_ele;
Joeatsumi 0:00eb873ca4c4 30 //=================================================
Joeatsumi 0:00eb873ca4c4 31 //Functions for rising and falind edge interrution
Joeatsumi 0:00eb873ca4c4 32 //=================================================
Joeatsumi 0:00eb873ca4c4 33 //rise edge
Joeatsumi 0:00eb873ca4c4 34 void rising_edge(){
Joeatsumi 0:00eb873ca4c4 35 ch_time.reset();//reset timer counter
Joeatsumi 0:00eb873ca4c4 36 measured_pre_pulse=ch_time.read();
Joeatsumi 0:00eb873ca4c4 37
Joeatsumi 0:00eb873ca4c4 38 }
Joeatsumi 0:00eb873ca4c4 39
Joeatsumi 0:00eb873ca4c4 40 //falling edge
Joeatsumi 0:00eb873ca4c4 41 void falling_edge(){
Joeatsumi 0:00eb873ca4c4 42 measured_pre_pulse=(ch_time.read()-measured_pre_pulse);
Joeatsumi 0:00eb873ca4c4 43 pc.printf("The pulse width=%f\r\n",measured_pre_pulse);
Joeatsumi 0:00eb873ca4c4 44 if(measured_pre_pulse>THRESHOLD_PWM){
Joeatsumi 0:00eb873ca4c4 45 mux_switch=1;
Joeatsumi 0:00eb873ca4c4 46 }else{
Joeatsumi 0:00eb873ca4c4 47 mux_switch=0;
Joeatsumi 0:00eb873ca4c4 48 }
Joeatsumi 0:00eb873ca4c4 49 }
Joeatsumi 0:00eb873ca4c4 50
Joeatsumi 0:00eb873ca4c4 51 //==================================================
Joeatsumi 0:00eb873ca4c4 52 //Main
Joeatsumi 0:00eb873ca4c4 53 //==================================================
Joeatsumi 0:00eb873ca4c4 54 int main() {
Joeatsumi 0:00eb873ca4c4 55
Joeatsumi 0:00eb873ca4c4 56 //UART initialization
Joeatsumi 0:00eb873ca4c4 57 pc.baud(115200);
Joeatsumi 0:00eb873ca4c4 58
Joeatsumi 0:00eb873ca4c4 59 //Logging starts
Joeatsumi 0:00eb873ca4c4 60 pc.printf("Reading starts.");
Joeatsumi 0:00eb873ca4c4 61
Joeatsumi 0:00eb873ca4c4 62 //define servo period
Joeatsumi 0:00eb873ca4c4 63 ELE.period(SERVO_PERIOD); // servo requires a 20ms period
Joeatsumi 0:00eb873ca4c4 64 pulse_width_ele=0.001;
Joeatsumi 0:00eb873ca4c4 65
Joeatsumi 0:00eb873ca4c4 66 //timer starts
Joeatsumi 0:00eb873ca4c4 67 ch_time.start();
Joeatsumi 0:00eb873ca4c4 68
Joeatsumi 0:00eb873ca4c4 69 //declare interrupitons
Joeatsumi 0:00eb873ca4c4 70 reading_port.rise(rising_edge);
Joeatsumi 0:00eb873ca4c4 71 reading_port.fall(falling_edge);
Joeatsumi 0:00eb873ca4c4 72
Joeatsumi 0:00eb873ca4c4 73 mux_switch=0;
Joeatsumi 0:00eb873ca4c4 74
Joeatsumi 0:00eb873ca4c4 75 //while
Joeatsumi 0:00eb873ca4c4 76 while(1) {
Joeatsumi 0:00eb873ca4c4 77
Joeatsumi 0:00eb873ca4c4 78 pulse_width_ele=0.0015;
Joeatsumi 0:00eb873ca4c4 79 wait(0.05);
Joeatsumi 0:00eb873ca4c4 80 }//while ends
Joeatsumi 0:00eb873ca4c4 81
Joeatsumi 0:00eb873ca4c4 82 }//main ends