chenghuansmalljj

Dependencies:   mbed

Committer:
enormousjj
Date:
Wed Apr 11 04:53:08 2018 +0000
Revision:
0:82a391c84dbb
servobitch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
enormousjj 0:82a391c84dbb 1 #include "mbed.h"
enormousjj 0:82a391c84dbb 2
enormousjj 0:82a391c84dbb 3 //****************************************************************************** Define
enormousjj 0:82a391c84dbb 4 //The number will be compiled as type "double" in default
enormousjj 0:82a391c84dbb 5 //Add a "f" after the number can make it compiled as type "float"
enormousjj 0:82a391c84dbb 6 #define Ts 0.01f //period of timer1 (s)
enormousjj 0:82a391c84dbb 7 #define Servo_Period 20
enormousjj 0:82a391c84dbb 8
enormousjj 0:82a391c84dbb 9
enormousjj 0:82a391c84dbb 10
enormousjj 0:82a391c84dbb 11 //****************************************************************************** End of Define
enormousjj 0:82a391c84dbb 12
enormousjj 0:82a391c84dbb 13 //****************************************************************************** I/O
enormousjj 0:82a391c84dbb 14 //PWM
enormousjj 0:82a391c84dbb 15 PwmOut servo(A0);
enormousjj 0:82a391c84dbb 16 //Timer Setting
enormousjj 0:82a391c84dbb 17 Ticker timer;
enormousjj 0:82a391c84dbb 18 //****************************************************************************** End of I/O
enormousjj 0:82a391c84dbb 19
enormousjj 0:82a391c84dbb 20 //****************************************************************************** Functions
enormousjj 0:82a391c84dbb 21 void init_timer(void);
enormousjj 0:82a391c84dbb 22 void init_PWM(void);
enormousjj 0:82a391c84dbb 23 void timer_interrupt(void);
enormousjj 0:82a391c84dbb 24 //****************************************************************************** End of Functions
enormousjj 0:82a391c84dbb 25
enormousjj 0:82a391c84dbb 26 //****************************************************************************** Variables
enormousjj 0:82a391c84dbb 27 // Servo
enormousjj 0:82a391c84dbb 28 float zero_degree_duty = 0.062; // 0.025~0.115(-90~+90)(not linear, so the experiment is needed)
enormousjj 0:82a391c84dbb 29 float pos_90degree_duty = 0.1067; //0.1067 =true //0.113
enormousjj 0:82a391c84dbb 30 float neg_90degree_duty = 0.026; //0.025
enormousjj 0:82a391c84dbb 31
enormousjj 0:82a391c84dbb 32
enormousjj 0:82a391c84dbb 33
enormousjj 0:82a391c84dbb 34 //****************************************************************************** End of Variables
enormousjj 0:82a391c84dbb 35
enormousjj 0:82a391c84dbb 36 //****************************************************************************** Main
enormousjj 0:82a391c84dbb 37 int main()
enormousjj 0:82a391c84dbb 38 {
enormousjj 0:82a391c84dbb 39 init_timer();
enormousjj 0:82a391c84dbb 40 init_PWM();
enormousjj 0:82a391c84dbb 41
enormousjj 0:82a391c84dbb 42 while(1)
enormousjj 0:82a391c84dbb 43 {
enormousjj 0:82a391c84dbb 44 }
enormousjj 0:82a391c84dbb 45 }
enormousjj 0:82a391c84dbb 46 //****************************************************************************** End of Main
enormousjj 0:82a391c84dbb 47
enormousjj 0:82a391c84dbb 48 //****************************************************************************** timer_interrupt
enormousjj 0:82a391c84dbb 49 void timer_interrupt()
enormousjj 0:82a391c84dbb 50 {
enormousjj 0:82a391c84dbb 51
enormousjj 0:82a391c84dbb 52
enormousjj 0:82a391c84dbb 53 static int counter =0;
enormousjj 0:82a391c84dbb 54 static float servo_counter =zero_degree_duty;
enormousjj 0:82a391c84dbb 55
enormousjj 0:82a391c84dbb 56 counter ++;
enormousjj 0:82a391c84dbb 57
enormousjj 0:82a391c84dbb 58 if(counter >= 600)
enormousjj 0:82a391c84dbb 59 {
enormousjj 0:82a391c84dbb 60 return ;
enormousjj 0:82a391c84dbb 61
enormousjj 0:82a391c84dbb 62 }
enormousjj 0:82a391c84dbb 63 else
enormousjj 0:82a391c84dbb 64 {
enormousjj 0:82a391c84dbb 65 if(counter %2 ==0)
enormousjj 0:82a391c84dbb 66 {
enormousjj 0:82a391c84dbb 67 servo_counter += ((pos_90degree_duty -zero_degree_duty)/300);
enormousjj 0:82a391c84dbb 68 //6sec 轉90度
enormousjj 0:82a391c84dbb 69 servo.write(servo_counter);
enormousjj 0:82a391c84dbb 70 }
enormousjj 0:82a391c84dbb 71
enormousjj 0:82a391c84dbb 72 }
enormousjj 0:82a391c84dbb 73
enormousjj 0:82a391c84dbb 74
enormousjj 0:82a391c84dbb 75
enormousjj 0:82a391c84dbb 76 // Code for servo motor
enormousjj 0:82a391c84dbb 77 }
enormousjj 0:82a391c84dbb 78 //****************************************************************************** End of timer_interrupt
enormousjj 0:82a391c84dbb 79
enormousjj 0:82a391c84dbb 80 //****************************************************************************** init_timer
enormousjj 0:82a391c84dbb 81 void init_timer()
enormousjj 0:82a391c84dbb 82 {
enormousjj 0:82a391c84dbb 83 timer.attach_us(&timer_interrupt, 10000);//10ms interrupt period (100 Hz)
enormousjj 0:82a391c84dbb 84 }
enormousjj 0:82a391c84dbb 85 //****************************************************************************** End of init_timer
enormousjj 0:82a391c84dbb 86
enormousjj 0:82a391c84dbb 87 //****************************************************************************** init_PWM
enormousjj 0:82a391c84dbb 88 void init_PWM()
enormousjj 0:82a391c84dbb 89 {
enormousjj 0:82a391c84dbb 90 servo.period_ms(Servo_Period);
enormousjj 0:82a391c84dbb 91 servo.write(zero_degree_duty);
enormousjj 0:82a391c84dbb 92 }
enormousjj 0:82a391c84dbb 93 //****************************************************************************** End of init_PWM